diff --git a/core/API/DataTableGenericFilter.php b/core/API/DataTableGenericFilter.php
index 22f691c5055f95f7bd444ec302cc1f1981405699..fec5bb7e942e93cccb125cbbb52837c996aac62a 100644
--- a/core/API/DataTableGenericFilter.php
+++ b/core/API/DataTableGenericFilter.php
@@ -9,6 +9,8 @@
  * @package Piwik
  */
 use Piwik\Common;
+use Piwik\DataTable;
+use Piwik\DataTable\Filter\AddColumnsProcessedMetricsGoal;
 
 /**
  * @package Piwik
@@ -31,7 +33,7 @@ class Piwik_API_DataTableGenericFilter
     /**
      * Filters the given data table
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
@@ -39,7 +41,7 @@ class Piwik_API_DataTableGenericFilter
     }
 
     /**
-     * Returns an array containing the information of the generic Piwik_DataTable_Filter
+     * Returns an array containing the information of the generic Filter
      * to be applied automatically to the data resulting from the API calls.
      *
      * Order to apply the filters:
@@ -71,7 +73,7 @@ class Piwik_API_DataTableGenericFilter
                 ),
                 'AddColumnsProcessedMetricsGoal' => array(
                     'filter_update_columns_when_show_all_goals' => array('integer'),
-                    'idGoal'                                    => array('string', Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal::GOALS_OVERVIEW),
+                    'idGoal'                                    => array('string', AddColumnsProcessedMetricsGoal::GOALS_OVERVIEW),
                 ),
                 'Sort'                           => array(
                     'filter_sort_column' => array('string'),
@@ -95,12 +97,12 @@ class Piwik_API_DataTableGenericFilter
      * Apply generic filters to the DataTable object resulting from the API Call.
      * Disable this feature by setting the parameter disable_generic_filters to 1 in the API call request.
      *
-     * @param Piwik_DataTable $datatable
+     * @param DataTable $datatable
      * @return bool
      */
     protected function applyGenericFilters($datatable)
     {
-        if ($datatable instanceof Piwik_DataTable_Array) {
+        if ($datatable instanceof DataTable\Map) {
             $tables = $datatable->getArray();
             $filterWasApplied = false;
             foreach ($tables as $table) {
diff --git a/core/API/DataTableManipulator.php b/core/API/DataTableManipulator.php
index a8d88fda4353ec060f9f41dec7bc2e94dec396a9..03541cf4ff600623ae06fc1f801c41c58a1ec6c9 100644
--- a/core/API/DataTableManipulator.php
+++ b/core/API/DataTableManipulator.php
@@ -8,7 +8,9 @@
  * @category Piwik
  * @package Piwik
  */
-use Piwik\Period_Range;
+use Piwik\DataTable\Row;
+use Piwik\Period\Range;
+use Piwik\DataTable;
 
 /**
  * Base class for manipulating data tables.
@@ -52,15 +54,15 @@ abstract class Piwik_API_DataTableManipulator
      * data table arrays. It calls back the template method self::doManipulate for each table.
      * This way, data table arrays can be handled in a transparent fashion.
      *
-     * @param Piwik_DataTable_Array|Piwik_DataTable $dataTable
+     * @param DataTable\Map|DataTable $dataTable
      * @throws Exception
-     * @return Piwik_DataTable_Array|Piwik_DataTable
+     * @return DataTable\Map|DataTable
      */
     protected function manipulate($dataTable)
     {
-        if ($dataTable instanceof Piwik_DataTable_Array) {
+        if ($dataTable instanceof DataTable\Map) {
             return $this->manipulateDataTableArray($dataTable);
-        } else if ($dataTable instanceof Piwik_DataTable) {
+        } else if ($dataTable instanceof DataTable) {
             return $this->manipulateDataTable($dataTable);
         } else {
             return $dataTable;
@@ -81,7 +83,7 @@ abstract class Piwik_API_DataTableManipulator
     }
 
     /**
-     * Manipulates a single Piwik_DataTable instance. Derived classes must define
+     * Manipulates a single DataTable instance. Derived classes must define
      * this function.
      */
     protected abstract function manipulateDataTable($dataTable);
@@ -90,10 +92,10 @@ abstract class Piwik_API_DataTableManipulator
      * Load the subtable for a row.
      * Returns null if none is found.
      *
-     * @param Piwik_DataTable     $dataTable
-     * @param Piwik_DataTable_Row $row
+     * @param DataTable     $dataTable
+     * @param Row $row
      *
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     protected function loadSubtable($dataTable, $row)
     {
@@ -111,7 +113,7 @@ abstract class Piwik_API_DataTableManipulator
         $request['idSubtable'] = $idSubTable;
         if ($dataTable) {
             $period = $dataTable->metadata['period'];
-            if ($period instanceof Period_Range) {
+            if ($period instanceof Range) {
                 $request['date'] = $period->getDateStart().','.$period->getDateEnd();
             } else {
                 $request['date'] = $period->getDateStart()->toString();
diff --git a/core/API/DataTableManipulator/Flattener.php b/core/API/DataTableManipulator/Flattener.php
index 4f700ac85499de043c3921ed9cb719d4e661cd65..6ccae47fdd71e9ababf705ac4e65186f8636b1e0 100644
--- a/core/API/DataTableManipulator/Flattener.php
+++ b/core/API/DataTableManipulator/Flattener.php
@@ -8,6 +8,8 @@
  * @category Piwik
  * @package Piwik
  */
+use Piwik\DataTable;
+use Piwik\DataTable\Row;
 
 /**
  * This class is responsible for flattening data tables.
@@ -40,8 +42,8 @@ class Piwik_API_DataTableManipulator_Flattener extends Piwik_API_DataTableManipu
     public $recursiveLabelSeparator = ' - ';
 
     /**
-     * @param  Piwik_DataTable $dataTable
-     * @return Piwik_DataTable|Piwik_DataTable_Array
+     * @param  DataTable $dataTable
+     * @return DataTable|DataTable\Map
      */
     public function flatten($dataTable)
     {
@@ -56,8 +58,8 @@ class Piwik_API_DataTableManipulator_Flattener extends Piwik_API_DataTableManipu
      * Template method called from self::manipulate.
      * Flatten each data table.
      *
-     * @param Piwik_DataTable $dataTable
-     * @return Piwik_DataTable
+     * @param DataTable $dataTable
+     * @return DataTable
      */
     protected function manipulateDataTable($dataTable)
     {
@@ -73,12 +75,12 @@ class Piwik_API_DataTableManipulator_Flattener extends Piwik_API_DataTableManipu
     }
 
     /**
-     * @param Piwik_DataTable_Row $row
-     * @param Piwik_DataTable $dataTable
+     * @param Row $row
+     * @param DataTable $dataTable
      * @param string $labelPrefix
      * @param bool $parentLogo
      */
-    private function flattenRow(Piwik_DataTable_Row $row, Piwik_DataTable $dataTable,
+    private function flattenRow(Row $row, DataTable $dataTable,
                                 $labelPrefix = '', $parentLogo = false)
     {
         $label = $row->getColumn('label');
diff --git a/core/API/DataTableManipulator/LabelFilter.php b/core/API/DataTableManipulator/LabelFilter.php
index 550dbde69ba976ed2ba1cfd998c10a6be68fdd00..56ccd4366e86dc64a45240c4f5664e44527bdf97 100644
--- a/core/API/DataTableManipulator/LabelFilter.php
+++ b/core/API/DataTableManipulator/LabelFilter.php
@@ -9,6 +9,8 @@
  * @package Piwik
  */
 use Piwik\Common;
+use Piwik\DataTable;
+use Piwik\DataTable\Row;
 
 /**
  * This class is responsible for handling the label parameter that can be
@@ -38,10 +40,10 @@ class Piwik_API_DataTableManipulator_LabelFilter extends Piwik_API_DataTableMani
      * are not needed.
      *
      * @param string $labels      the labels to search for
-     * @param Piwik_DataTable $dataTable  the data table to be filtered
+     * @param DataTable $dataTable  the data table to be filtered
      * @param bool $addLabelIndex Whether to add label_index metadata describing which
      *                            label a row corresponds to.
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function filter($labels, $dataTable, $addLabelIndex = false)
     {
@@ -58,8 +60,8 @@ class Piwik_API_DataTableManipulator_LabelFilter extends Piwik_API_DataTableMani
      * Method for the recursive descend
      *
      * @param array $labelParts
-     * @param Piwik_DataTable $dataTable
-     * @return Piwik_DataTable_Row|false
+     * @param DataTable $dataTable
+     * @return Row|false
      */
     private function doFilterRecursiveDescend($labelParts, $dataTable)
     {
@@ -137,7 +139,7 @@ class Piwik_API_DataTableManipulator_LabelFilter extends Piwik_API_DataTableMani
     }
 
     /**
-     * Filter a Piwik_DataTable instance. See @filter for more info.
+     * Filter a DataTable instance. See @filter for more info.
      */
     protected function manipulateDataTable($dataTable)
     {
diff --git a/core/API/DocumentationGenerator.php b/core/API/DocumentationGenerator.php
index 19150ce1da7475c2be2e0c343884eb80a8051b00..e928409dfa30f583e1a599cab6cbfb634ef72405 100644
--- a/core/API/DocumentationGenerator.php
+++ b/core/API/DocumentationGenerator.php
@@ -25,7 +25,7 @@ class Piwik_API_DocumentationGenerator
      */
     public function __construct()
     {
-        $plugins = PluginsManager::getInstance()->getLoadedPluginsName();
+        $plugins = \Piwik\PluginsManager::getInstance()->getLoadedPluginsName();
         foreach ($plugins as $plugin) {
             $plugin = Common::unprefixClass($plugin);
             try {
diff --git a/core/API/Request.php b/core/API/Request.php
index 4af8db7500eaa5be45c6b4dbe20dcf6867abcefd..7a7569e59ccbb0536c511a63938aeef2dd862689 100644
--- a/core/API/Request.php
+++ b/core/API/Request.php
@@ -11,6 +11,7 @@
 use Piwik\Piwik;
 use Piwik\Common;
 use Piwik\Access;
+use Piwik\DataTable;
 
 /**
  * An API request is the object used to make a call to the API and get the result.
@@ -121,7 +122,7 @@ class Piwik_API_Request
      * It then calls the API Proxy which will call the requested method.
      *
      * @throws Piwik_FrontController_PluginDeactivatedException
-     * @return Piwik_DataTable|mixed  The data resulting from the API call
+     * @return DataTable|mixed  The data resulting from the API call
      */
     public function process()
     {
@@ -137,7 +138,7 @@ class Piwik_API_Request
 
             list($module, $method) = $this->extractModuleAndMethod($moduleMethod);
 
-            if (!PluginsManager::getInstance()->isPluginActivated($module)) {
+            if (!\Piwik\PluginsManager::getInstance()->isPluginActivated($module)) {
                 throw new Piwik_FrontController_PluginDeactivatedException($module);
             }
             $moduleClass = "Piwik_" . $module . "_API";
diff --git a/core/API/ResponseBuilder.php b/core/API/ResponseBuilder.php
index 80407213299faea1aa42014edee8ba626f32fb1c..c9bc6eec91685c3f0b15077b7b42688ec74687bd 100644
--- a/core/API/ResponseBuilder.php
+++ b/core/API/ResponseBuilder.php
@@ -8,8 +8,12 @@
  * @category Piwik
  * @package Piwik
  */
+use Piwik\DataTable\Renderer\Json;
+use Piwik\DataTable\Simple;
+use Piwik\DataTable\Renderer;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\DataTable;
 
 /**
  * @package Piwik
@@ -38,7 +42,7 @@ class Piwik_API_ResponseBuilder
     /**
      * This method processes the data resulting from the API call.
      *
-     * - If the data resulted from the API call is a Piwik_DataTable then
+     * - If the data resulted from the API call is a DataTable then
      *         - we apply the standard filters if the parameters have been found
      *           in the URL. For example to offset,limit the Table you can add the following parameters to any API
      *        call that returns a DataTable: filter_limit=10&filter_offset=20
@@ -75,8 +79,8 @@ class Piwik_API_ResponseBuilder
         // If the returned value is an object DataTable we
         // apply the set of generic filters if asked in the URL
         // and we render the DataTable according to the format specified in the URL
-        if ($value instanceof Piwik_DataTable
-            || $value instanceof Piwik_DataTable_Array
+        if ($value instanceof DataTable
+            || $value instanceof DataTable\Map
         ) {
             return $this->handleDataTable($value);
         }
@@ -121,7 +125,7 @@ class Piwik_API_ResponseBuilder
         }
 
         try {
-            $renderer = Piwik_DataTable_Renderer::factory($format);
+            $renderer = Renderer::factory($format);
         } catch (Exception $exceptionRenderer) {
             return "Error: " . $e->getMessage() . " and: " . $exceptionRenderer->getMessage();
         }
@@ -174,7 +178,7 @@ class Piwik_API_ResponseBuilder
     /**
      * Apply the specified renderer to the DataTable
      *
-     * @param Piwik_DataTable|array $dataTable
+     * @param DataTable|array $dataTable
      * @return string
      */
     protected function getRenderedDataTable($dataTable)
@@ -192,7 +196,7 @@ class Piwik_API_ResponseBuilder
 
         $method = Common::getRequestVar('method', '', 'string', $this->request);
 
-        $renderer = Piwik_DataTable_Renderer::factory($format);
+        $renderer = Renderer::factory($format);
         $renderer->setTable($dataTable);
         $renderer->setRenderSubTables(Common::getRequestVar('expanded', false, 'int', $this->request));
         $renderer->setHideIdSubDatableFromResponse(Common::getRequestVar('hideIdSubDatable', false, 'int', $this->request));
@@ -268,7 +272,7 @@ class Piwik_API_ResponseBuilder
      */
     protected function handleScalar($scalar)
     {
-        $dataTable = new Piwik_DataTable_Simple();
+        $dataTable = new Simple();
         $dataTable->addRowsFromArray(array($scalar));
         return $this->getRenderedDataTable($dataTable);
     }
@@ -276,7 +280,7 @@ class Piwik_API_ResponseBuilder
     /**
      * Handles the given data table
      *
-     * @param Piwik_DataTable $datatable
+     * @param DataTable $datatable
      * @return string
      */
     protected function handleDataTable($datatable)
@@ -404,10 +408,10 @@ class Piwik_API_ResponseBuilder
 
     /**
      * Render a multidimensional array to Json
-     * Handle Piwik_DataTable|Piwik_DataTable_Array elements in the first dimension only, following case does not work:
+     * Handle DataTable|Set elements in the first dimension only, following case does not work:
      * array(
      *        array(
-     *            Piwik_DataTable,
+     *            DataTable,
      *            2 => array(
      *                1,
      *                2
@@ -415,7 +419,7 @@ class Piwik_API_ResponseBuilder
      *        ),
      *    );
      *
-     * @param array $array  can contain scalar, arrays, Piwik_DataTable and Piwik_DataTable_Array
+     * @param array $array  can contain scalar, arrays, DataTable and Set
      * @return string
      */
     public static function convertMultiDimensionalArrayToJson($array)
@@ -440,10 +444,10 @@ class Piwik_API_ResponseBuilder
                     $json .= Common::json_encode($value);
                     break;
 
-                // Case dimension is a Piwik_DataTable_Array or a Piwik_DataTable
-                case ($value instanceof Piwik_DataTable_Array || $value instanceof Piwik_DataTable):
+                // Case dimension is a Set or a DataTable
+                case ($value instanceof DataTable\Map || $value instanceof DataTable):
 
-                    $XMLRenderer = new Piwik_DataTable_Renderer_Json();
+                    $XMLRenderer = new Json();
                     $XMLRenderer->setTable($value);
                     $renderedReport = $XMLRenderer->render();
                     $json .= $renderedReport;
diff --git a/core/Archive.php b/core/Archive.php
index ddc0cb453ecb0d0a828c2810a1f89fa7d48245a9..a0412b4ae6b1bbbf2995dd1ddd4b98a2a80a3c63 100644
--- a/core/Archive.php
+++ b/core/Archive.php
@@ -9,8 +9,13 @@
  * @package Piwik
  */
 namespace Piwik;
+use Piwik\Archive\Parameters;
+use Piwik\Period\Range;
 use Piwik\Piwik;
 use Piwik\Metrics;
+use Piwik\Date;
+use Piwik\ArchiveProcessor\Rules;
+use Piwik\DataAccess\ArchiveSelector;
 
 /**
  * The archive object is used to query specific data for a day or a period of statistics for a given website.
@@ -93,16 +98,16 @@ class Archive
     private $forceIndexedByDate;
 
     /**
-     * @var Archive_Parameters
+     * @var Parameters
      */
     private $params;
 
     /**
-     * @param Archive_Parameters $params
+     * @param Parameters $params
      * @param bool $forceIndexedBySite Whether to force index the result of a query by site ID.
      * @param bool $forceIndexedByDate Whether to force index the result of a query by period.
      */
-    protected function __construct(Archive_Parameters $params, $forceIndexedBySite = false,
+    protected function __construct(Parameters $params, $forceIndexedBySite = false,
                                    $forceIndexedByDate = false)
     {
         $this->params = $params;
@@ -115,7 +120,7 @@ class Archive
      *
      * @param $idSites
      * @param string $period 'day', 'week', 'month', 'year' or 'range'
-     * @param Piwik_Date|string $strDate 'YYYY-MM-DD', magic keywords (ie, 'today'; @see Piwik_Date::factory())
+     * @param Date|string $strDate 'YYYY-MM-DD', magic keywords (ie, 'today'; @see Date::factory())
      *                                   or date range (ie, 'YYYY-MM-DD,YYYY-MM-DD').
      * @param bool|string $segment Segment definition - defaults to false for backward compatibility.
      * @param bool|string $_restrictSitesToLogin Used only when running as a scheduled task.
@@ -126,7 +131,7 @@ class Archive
         $websiteIds = Site::getIdSitesFromIdSitesString($idSites, $_restrictSitesToLogin);
 
         if (Period::isMultiplePeriod($strDate, $period)) {
-            $oPeriod = new Period_Range($period, $strDate);
+            $oPeriod = new Range($period, $strDate);
             $allPeriods = $oPeriod->getSubperiods();
         } else {
             $timezone = count($websiteIds) == 1 ? Site::getTimezoneFor($websiteIds[0]) : false;
@@ -150,7 +155,7 @@ class Archive
             $forceIndexedByDate = true;
         }
 
-        $params = new Archive_Parameters();
+        $params = new Parameters();
         $params->setIdSites($idSites);
         $params->setPeriods($periods);
         $params->setSegment($segment);
@@ -212,7 +217,7 @@ class Archive
      *
      * @param string|array $names One or more archive names, eg, 'nb_visits', 'Referers_distinctKeywords',
      *                            etc.
-     * @return Piwik_DataTable|false False if no value with the given names. Based on the number
+     * @return DataTable|false False if no value with the given names. Based on the number
      *                               of sites/periods, the result can be a DataTable_Array, which
      *                               contains DataTable instances.
      */
@@ -226,13 +231,13 @@ class Archive
      * This method will build a dataTable from the blob value $name in the current archive.
      *
      * For example $name = 'Referers_searchEngineByKeyword' will return a
-     * Piwik_DataTable containing all the keywords. If a $idSubtable is given, the method
+     * DataTable containing all the keywords. If a $idSubtable is given, the method
      * will return the subTable of $name. If 'all' is supplied for $idSubtable every subtable
      * will be returned.
      *
      * @param string $name The name of the record to get.
      * @param int|string|null $idSubtable The subtable ID (if any) or 'all' if requesting every datatable.
-     * @return Piwik_DataTable|false
+     * @return DataTable|false
      */
     public function getDataTable($name, $idSubtable = null)
     {
@@ -243,13 +248,13 @@ class Archive
     /**
      * Same as getDataTable() except that it will also load in memory all the subtables
      * for the DataTable $name. You can then access the subtables by using the
-     * Piwik_DataTable_Manager::getTable() function.
+     * Manager::getTable() function.
      *
      * @param string $name The name of the record to get.
      * @param int|string|null $idSubtable The subtable ID (if any) or self::ID_SUBTABLE_LOAD_ALL_SUBTABLES if requesting every datatable.
      * @param bool $addMetadataSubtableId Whether to add the DB subtable ID as metadata to each datatable,
      *                                    or not.
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getDataTableExpanded($name, $idSubtable = null, $addMetadataSubtableId = true)
     {
@@ -280,11 +285,11 @@ class Archive
      * @param string $name
      * @param int $idSite
      * @param string $period
-     * @param Piwik_Date $date
+     * @param Date $date
      * @param string $segment
      * @param bool $expanded
      * @param int|null $idSubtable
-     * @return Piwik_DataTable|Piwik_DataTable_Array
+     * @return DataTable|DataTable\Map
      */
     public static function getDataTableFromArchive($name, $idSite, $period, $date, $segment, $expanded, $idSubtable = null)
     {
@@ -315,7 +320,7 @@ class Archive
      * @param array|string $archiveNames
      * @param $archiveDataType
      * @param null|int $idSubtable
-     * @return Archive_DataCollection
+     * @return DataCollection
      */
     private function get($archiveNames, $archiveDataType, $idSubtable = null)
     {
@@ -332,7 +337,7 @@ class Archive
             }
         }
 
-        $result = new Archive_DataCollection(
+        $result = new Archive\DataCollection(
             $archiveNames, $archiveDataType, $this->params->getIdSites(), $this->params->getPeriods(), $defaultRow = null);
 
         $archiveIds = $this->getArchiveIds($archiveNames);
@@ -341,7 +346,7 @@ class Archive
         }
 
         $loadAllSubtables = $idSubtable == self::ID_SUBTABLE_LOAD_ALL_SUBTABLES;
-        $archiveData = Piwik_DataAccess_ArchiveSelector::getArchiveData($archiveIds, $archiveNames, $archiveDataType, $loadAllSubtables);
+        $archiveData = ArchiveSelector::getArchiveData($archiveIds, $archiveNames, $archiveDataType, $loadAllSubtables);
         foreach ($archiveData as $row) {
             // values are grouped by idsite (site ID), date1-date2 (date range), then name (field name)
             $idSite = $row['idsite'];
@@ -365,7 +370,7 @@ class Archive
      * Returns archive IDs for the sites, periods and archive names that are being
      * queried. This function will use the idarchive cache if it has the right data,
      * query archive tables for IDs w/o launching archiving, or launch archiving and
-     * get the idarchive from Piwik_ArchiveProcessor instances.
+     * get the idarchive from ArchiveProcessor instances.
      */
     private function getArchiveIds($archiveNames)
     {
@@ -388,7 +393,7 @@ class Archive
 
         // cache id archives for plugins we haven't processed yet
         if (!empty($archiveGroups)) {
-            if (!Piwik_ArchiveProcessor_Rules::isArchivingDisabledFor($this->params->getSegment(), $this->getPeriodLabel())) {
+            if (!Rules::isArchivingDisabledFor($this->params->getSegment(), $this->getPeriodLabel())) {
                 $this->cacheArchiveIdsAfterLaunching($archiveGroups, $plugins);
             } else {
                 $this->cacheArchiveIdsWithoutLaunching($plugins);
@@ -413,7 +418,7 @@ class Archive
     }
 
     /**
-     * @return Archive_Parameters
+     * @return Parameters
      */
     public function getParams()
     {
@@ -430,7 +435,7 @@ class Archive
      */
     private function cacheArchiveIdsAfterLaunching($archiveGroups, $plugins)
     {
-        $today = Piwik_Date::today();
+        $today = Date::today();
 
         /* @var Period $period */
         foreach ($this->params->getPeriods() as $period) {
@@ -459,9 +464,9 @@ class Archive
                 }
 
                 if ($period->getLabel() == 'day') {
-                    $processing = new Piwik_ArchiveProcessor_Day($period, $site, $this->params->getSegment());
+                    $processing = new ArchiveProcessor\Day($period, $site, $this->params->getSegment());
                 } else {
-                    $processing = new Piwik_ArchiveProcessor_Period($period, $site, $this->params->getSegment());
+                    $processing = new ArchiveProcessor\Period($period, $site, $this->params->getSegment());
                 }
 
                 // process for each plugin as well
@@ -493,7 +498,7 @@ class Archive
      */
     private function cacheArchiveIdsWithoutLaunching($plugins)
     {
-        $idarchivesByReport = Piwik_DataAccess_ArchiveSelector::getArchiveIds(
+        $idarchivesByReport = ArchiveSelector::getArchiveIds(
             $this->params->getIdSites(), $this->params->getPeriods(), $this->params->getSegment(), $plugins);
 
         // initialize archive ID cache for each report
@@ -518,7 +523,7 @@ class Archive
      */
     private function getDoneStringForPlugin($plugin)
     {
-        return Piwik_ArchiveProcessor_Rules::getDoneStringFlagFor($this->params->getSegment(), $this->getPeriodLabel(), $plugin);
+        return Rules::getDoneStringFlagFor($this->params->getSegment(), $this->getPeriodLabel(), $plugin);
     }
 
     private function getPeriodLabel()
@@ -529,7 +534,7 @@ class Archive
 
     /**
      * Returns an array describing what metadata to use when indexing a query result.
-     * For use with Archive_DataCollection.
+     * For use with DataCollection.
      *
      * @return array
      */
@@ -637,7 +642,7 @@ class Archive
 
         $plugin = substr($report, 0, strpos($report, '_'));
         if (empty($plugin)
-            || !Piwik_PluginsManager::getInstance()->isPluginActivated($plugin)
+            || !\Piwik\PluginsManager::getInstance()->isPluginActivated($plugin)
         ) {
             $pluginStr = empty($plugin) ? '' : "($plugin)";
             throw new Exception("Error: The report '$report' was requested but it is not available "
diff --git a/core/Archive/DataCollection.php b/core/Archive/DataCollection.php
index 1f4a29382df278173859a3d34e493275b39b9260..4b05615c21efb638c4c26064a592009a69bae4f2 100644
--- a/core/Archive/DataCollection.php
+++ b/core/Archive/DataCollection.php
@@ -9,15 +9,20 @@
  * @package Piwik
  */
 
-namespace Piwik;
+namespace Piwik\Archive;
+
+use Exception;
+use Piwik\Archive\DataTableFactory;
+use Piwik\DataTable;
+
 /**
  * This class is used to hold and transform archive data for the Archive class.
  *
  * Archive data is loaded into an instance of this type, can be indexed by archive
  * metadata (such as the site ID, period string, etc.), and can be transformed into
- * Piwik_DataTable and Piwik_DataTable_Array instances.
+ * DataTable and Set instances.
  */
-class Archive_DataCollection
+class DataCollection
 {
     /**
      * The archive data, indexed first by site ID and then by period date range. Eg,
@@ -192,18 +197,18 @@ class Archive_DataCollection
 
     /**
      * Returns archive data as a DataTable indexed by metadata. Indexed data will
-     * be represented by Piwik_DataTable_Array instances.
+     * be represented by Set instances.
      *
      * @param array $resultIndices An array mapping metadata names to pretty labels
      *                             for them. Each archive data row will be indexed
      *                             by the metadata specified here.
      *
      *                             Eg, array('site' => 'idSite', 'period' => 'Date')
-     * @return Piwik_DataTable|Piwik_DataTable_Array
+     * @return \Piwik\DataTable|Set
      */
     public function getDataTable($resultIndices)
     {
-        $dataTableFactory = new Piwik_Archive_DataTableFactory(
+        $dataTableFactory = new DataTableFactory(
             $this->dataNames, $this->dataType, $this->sitesId, $this->periods, $this->defaultRow);
 
         $index = $this->getArray($resultIndices);
@@ -212,7 +217,7 @@ class Archive_DataCollection
 
     /**
      * Returns archive data as a DataTable indexed by metadata. Indexed data will
-     * be represented by Piwik_DataTable_Array instances. Each DataTable will have
+     * be represented by Set instances. Each DataTable will have
      * its subtable IDs set.
      *
      * This function will only work if blob data was loaded and only one record
@@ -227,21 +232,21 @@ class Archive_DataCollection
      * @param bool $addMetadataSubtableId Whether to add the DB subtable ID as metadata
      *                                    to each datatable, or not.
      * @throws Exception
-     * @return Piwik_DataTable|Piwik_DataTable_Array
+     * @return \Piwik\DataTable|Set
      */
     public function getExpandedDataTable($resultIndices, $idSubtable = null, $addMetadataSubtableId = false)
     {
         if ($this->dataType != 'blob') {
-            throw new Exception("Archive_DataCollection: cannot call getExpandedDataTable with "
+            throw new Exception("DataCollection: cannot call getExpandedDataTable with "
                 . "{$this->dataType} data types. Only works with blob data.");
         }
 
         if (count($this->dataNames) !== 1) {
-            throw new Exception("Archive_DataCollection: cannot call getExpandedDataTable with "
+            throw new Exception("DataCollection: cannot call getExpandedDataTable with "
                 . "more than one record.");
         }
 
-        $dataTableFactory = new Piwik_Archive_DataTableFactory(
+        $dataTableFactory = new DataTableFactory(
             $this->dataNames, 'blob', $this->sitesId, $this->periods, $this->defaultRow);
         $dataTableFactory->expandDataTable($addMetadataSubtableId);
         $dataTableFactory->useSubtable($idSubtable);
diff --git a/core/Archive/DataTableFactory.php b/core/Archive/DataTableFactory.php
index e0d516aeb60800178b58d8d7a1ea81f6bb7da493..319db1d90447412136a4eb5d2a88764d5028ad0c 100644
--- a/core/Archive/DataTableFactory.php
+++ b/core/Archive/DataTableFactory.php
@@ -9,67 +9,71 @@
  * @package Piwik
  */
 
-use Piwik\Archive_DataCollection;
+namespace Piwik\Archive;
+
 use Piwik\Site;
+use Piwik\DataTable;
+use Piwik\DataTable\Row;
+
 const FIX_ME_OMG = 'this is a warning and reminder to fix this code ';
 
 /**
- * Creates a Piwik_DataTable or Piwik_DataTable_Array instance based on an array
- * index created by Archive_DataCollection.
- * 
- * This class is only used by Archive_DataCollection.
+ * Creates a DataTable or Set instance based on an array
+ * index created by DataCollection.
+ *
+ * This class is only used by DataCollection.
  */
-class Piwik_Archive_DataTableFactory
+class DataTableFactory
 {
     /**
-     * @see Archive_DataCollection::$dataNames.
+     * @see DataCollection::$dataNames.
      */
     private $dataNames;
-    
+
     /**
-     * @see Archive_DataCollection::$dataType.
+     * @see DataCollection::$dataType.
      */
     private $dataType;
-    
+
     /**
      * Whether to expand the DataTables that're created or not. Expanding a DataTable
      * means creating DataTables using subtable blobs and correctly setting the subtable
      * IDs of all DataTables.
-     * 
+     *
      * @var bool
      */
     private $expandDataTable = false;
-    
+
     /**
      * Whether to add the subtable ID used in the database to the in-memory DataTables
      * as metadata or not.
-     * 
+     *
      * @var bool
      */
     private $addMetadataSubtableId = false;
-    
+
     /**
-     * @see Archive_DataCollection::$sitesId.
+     * @see DataCollection::$sitesId.
      */
     private $sitesId;
-    
+
     /**
-     * @see Archive_DataCollection::$periods.
+     * @see DataCollection::$periods.
      */
     private $periods;
-    
+
     /**
      * The ID of the subtable to create a DataTable for. Only relevant for blob data.
-     * 
+     *
      * @var int|null
      */
     private $idSubtable = null;
-    
+
     /**
-     * @see Archive_DataCollection::$defaultRow.
+     * @see DataCollection::$defaultRow.
      */
     private $defaultRow;
-    
+
     /**
      * Constructor.
      */
@@ -83,11 +87,11 @@ class Piwik_Archive_DataTableFactory
         $this->periods = $periods;
         $this->defaultRow = $defaultRow;
     }
-    
+
     /**
      * Tells the factory instance to expand the DataTables that are created by
      * creating subtables and setting the subtable IDs of rows w/ subtables correctly.
-     * 
+     *
      * @param bool $addMetadataSubtableId Whether to add the subtable ID used in the
      *                                    database to the in-memory DataTables as
      *                                    metadata or not.
@@ -108,21 +112,21 @@ class Piwik_Archive_DataTableFactory
     public function useSubtable($idSubtable)
     {
         if (count($this->dataNames) !== 1) {
-            throw new Exception("Piwik_Archive_DataTableFactory: Getting subtables for multiple records in one"
-                               . " archive query is not currently supported.");
+            throw new Exception("DataTableFactory: Getting subtables for multiple records in one"
+                . " archive query is not currently supported.");
         }
-        
+
         $this->idSubtable = $idSubtable;
     }
-    
+
     /**
-     * Creates a Piwik_DataTable|Piwik_DataTable_Array instance using an index of
+     * Creates a DataTable|Set instance using an index of
      * archive data.
-     * 
-     * @param array $index @see Archive_DataCollection
+     *
+     * @param array $index @see DataCollection
      * @param array $resultIndices an array mapping metadata names with pretty metadata
      *                             labels.
-     * @return Piwik_DataTable|Piwik_DataTable_Array
+     * @return DataTable|Set
      */
     public function make($index, $resultIndices)
     {
@@ -134,50 +138,50 @@ class Piwik_Archive_DataTableFactory
             ) {
                 $index = $this->defaultRow;
             }
-            
+
             $dataTable = $this->createDataTable($index, $keyMetadata = array());
         } else {
             $dataTable = $this->createDataTableArrayFromIndex($index, $resultIndices);
         }
-        
+
         $this->transformMetadata($dataTable);
         return $dataTable;
     }
 
     /**
-     * Creates a Piwik_DataTable|Piwik_DataTable_Array instance using an array
+     * Creates a DataTable|Set instance using an array
      * of blobs.
-     * 
+     *
      * If only one record is being queried, a single DataTable will
-     * be returned. Otherwise, a DataTable_Array is returned that indexes
+     * be returned. Otherwise, a DataTable\Map is returned that indexes
      * DataTables by record name.
-     * 
+     *
      * If expandDataTable was called, and only one record is being queried,
      * the created DataTable's subtables will be expanded.
-     * 
+     *
      * @param array $blobRow
-     * @return Piwik_DataTable|Piwik_DataTable_Array
+     * @return DataTable|Set
      */
     private function makeFromBlobRow($blobRow)
     {
         if ($blobRow === false) {
-            return new Piwik_DataTable();
+            return new DataTable();
         }
-        
+
         if (count($this->dataNames) === 1) {
             return $this->makeDataTableFromSingleBlob($blobRow);
         } else {
             return $this->makeIndexedByRecordNameDataTable($blobRow);
         }
     }
-    
+
     /**
      * Creates a DataTable for one record from an archive data row.
-     * 
+     *
      * @see makeFromBlobRow
-     * 
+     *
      * @param array $blobRow
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     private function makeDataTableFromSingleBlob($blobRow)
     {
@@ -185,101 +189,101 @@ class Piwik_Archive_DataTableFactory
         if ($this->idSubtable !== null) {
             $recordName .= '_' . $this->idSubtable;
         }
-        
+
         if (!empty($blobRow[$recordName])) {
-            $table = Piwik_DataTable::fromSerializedArray($blobRow[$recordName]);
+            $table = DataTable::fromSerializedArray($blobRow[$recordName]);
         } else {
-            $table = new Piwik_DataTable();
+            $table = new DataTable();
         }
-        
+
         // set table metadata
-        $table->metadata = Archive_DataCollection::getDataRowMetadata($blobRow);
-        
+        $table->metadata = DataCollection::getDataRowMetadata($blobRow);
+
         if ($this->expandDataTable) {
             $table->enableRecursiveFilters();
             $this->setSubtables($table, $blobRow);
         }
-        
+
         return $table;
     }
-    
+
     /**
      * Creates a DataTable for every record in an archive data row and puts them
-     * in a DataTable_Array instance.
-     * 
+     * in a DataTable\Map instance.
+     *
      * @param array $blobRow
-     * @return Piwik_DataTable_Array
+     * @return DataTable\Map
      */
     private function makeIndexedByRecordNameDataTable($blobRow)
     {
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('recordName');
-        
-        $tableMetadata = Archive_DataCollection::getDataRowMetadata($blobRow);
-        
+
+        $tableMetadata = DataCollection::getDataRowMetadata($blobRow);
+
         foreach ($blobRow as $name => $blob) {
-            $newTable = Piwik_DataTable::fromSerializedArray($blob);
+            $newTable = DataTable::fromSerializedArray($blob);
             $newTable->metadata = $tableMetadata;
-            
+
             $table->addTable($newTable, $name);
         }
-        
+
         return $table;
     }
-    
+
     /**
-     * Creates a Piwik_DataTable_Array from an array index.
-     * 
-     * @param array $index @see Archive_DataCollection
+     * Creates a Set from an array index.
+     *
+     * @param array $index @see DataCollection
      * @param array $resultIndices @see make
      * @param array $keyMetadata The metadata to add to the table when it's created.
-     * @return Piwik_DataTable_Array
+     * @return Set
      */
     private function createDataTableArrayFromIndex($index, $resultIndices, $keyMetadata = array())
     {
         $resultIndexLabel = reset($resultIndices);
         $resultIndex = key($resultIndices);
-        
+
         array_shift($resultIndices);
-        
-        $result = new Piwik_DataTable_Array();
+
+        $result = new DataTable\Map();
         $result->setKeyName($resultIndexLabel);
-        
+
         foreach ($index as $label => $value) {
             $keyMetadata[$resultIndex] = $label;
-            
+
             if (empty($resultIndices)) {
                 $newTable = $this->createDataTable($value, $keyMetadata);
             } else {
                 $newTable = $this->createDataTableArrayFromIndex($value, $resultIndices, $keyMetadata);
             }
-            
+
             $result->addTable($newTable, $this->prettifyIndexLabel($resultIndex, $label));
         }
-        
+
         return $result;
     }
-    
+
     /**
-     * Creates a Piwik_DataTable instance from an index row.
-     * 
+     * Creates a DataTable instance from an index row.
+     *
      * @param array|false $data An archive data row.
      * @param array $keyMetadata The metadata to add to the table(s) when created.
-     * @return Piwik_DataTable|Piwik_DataTable_Array
+     * @return DataTable|DataTable\Map
      */
     private function createDataTable($data, $keyMetadata)
     {
         if ($this->dataType == 'blob') {
             $result = $this->makeFromBlobRow($data);
         } else {
-            $table = new Piwik_DataTable_Simple();
-            
+            $table = new DataTable\Simple();
+
             if (!empty($data)) {
-                $table->metadata = Archive_DataCollection::getDataRowMetadata($data);
-                
-                Archive_DataCollection::removeMetadataFromDataRow($data);
-                
-                $table->addRow(new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => $data)));
+                $table->metadata = DataCollection::getDataRowMetadata($data);
+
+                DataCollection::removeMetadataFromDataRow($data);
+
+                $table->addRow(new Row(array(Row::COLUMNS => $data)));
             } else {
                 // if we're querying numeric data, we couldn't find any, and we're only
                 // looking for one metric, add a row w/ one column w/ value 0. this is to
@@ -288,39 +292,39 @@ class Piwik_Archive_DataTableFactory
                 // would break.
                 if (count($this->dataNames) == 1) {
                     $name = reset($this->dataNames);
-                    $table->addRow(new Piwik_DataTable_Row(array(
-                        Piwik_DataTable_Row::COLUMNS => array($name => 0)
-                    )));
+                    $table->addRow(new Row(array(
+                                                                Row::COLUMNS => array($name => 0)
+                                                           )));
                 }
             }
-            
+
             $result = $table;
         }
-        
+
         if (!isset($keyMetadata['site'])) {
             $keyMetadata['site'] = reset($this->sitesId);
         }
-        
+
         if (!isset($keyMetadata['period'])) {
             reset($this->periods);
             $keyMetadata['period'] = key($this->periods);
         }
-        
-        // Note: $result can be a DataTable_Array
+
+        // Note: $result can be a DataTable\Map
         $result->filter(function ($table) use ($keyMetadata) {
             foreach ($keyMetadata as $name => $value) {
                 $table->setMetadata($name, $value);
             }
         });
-        
+
         return $result;
     }
-    
+
     /**
      * Creates DataTables from $dataTable's subtable blobs (stored in $blobRow) and sets
      * the subtable IDs of each DataTable row.
-     * 
-     * @param Piwik_DataTable $dataTable
+     *
+     * @param DataTable $dataTable
      * @param array $blobRow An array associating record names (w/ subtable if applicable)
      *                       with blob values. This should hold every subtable blob for
      *                       the loaded DataTable.
@@ -328,18 +332,18 @@ class Piwik_Archive_DataTableFactory
     private function setSubtables($dataTable, $blobRow)
     {
         $dataName = reset($this->dataNames);
-        
+
         foreach ($dataTable->getRows() as $row) {
             $sid = $row->getIdSubDataTable();
             if ($sid === null) {
                 continue;
             }
-            
-            $blobName = $dataName."_".$sid;
+
+            $blobName = $dataName . "_" . $sid;
             if (isset($blobRow[$blobName])) {
-                $subtable = Piwik_DataTable::fromSerializedArray($blobRow[$blobName]);
+                $subtable = DataTable::fromSerializedArray($blobRow[$blobName]);
                 $this->setSubtables($subtable, $blobRow);
-                
+
                 // we edit the subtable ID so that it matches the newly table created in memory
                 // NB: we dont overwrite the datatableid in the case we are displaying the table expanded.
                 if ($this->addMetadataSubtableId) {
@@ -347,12 +351,12 @@ class Piwik_Archive_DataTableFactory
                     // see Renderer/Php.php
                     $row->addMetadata('idsubdatatable_in_db', $row->getIdSubDataTable());
                 }
-                
+
                 $row->setSubtable($subtable);
             }
         }
     }
-    
+
     /**
      * Converts site IDs and period string ranges into Site instances and
      * Period instances in DataTable metadata.
@@ -360,24 +364,24 @@ class Piwik_Archive_DataTableFactory
     private function transformMetadata($table)
     {
         $periods = $this->periods;
-        $table->filter(function ($table) use($periods) {
+        $table->filter(function ($table) use ($periods) {
             $table->metadata['site'] = new Site($table->metadata['site']);
             $table->metadata['period'] = empty($periods[$table->metadata['period']])
-                                            ? FIX_ME_OMG
-                                            : $periods[$table->metadata['period']];
+                ? FIX_ME_OMG
+                : $periods[$table->metadata['period']];
         });
     }
-    
+
     /**
      * Returns the pretty version of an index label.
-     * 
+     *
      * @param string $labelType eg, 'site', 'period', etc.
      * @param string $label eg, '0', '1', '2012-01-01,2012-01-31', etc.
      * @return string
      */
     private function prettifyIndexLabel($labelType, $label)
     {
-        if(empty($this->periods[$label])) {
+        if (empty($this->periods[$label])) {
             return $label; // BAD BUG FIXME
         }
         if ($labelType == 'period') { // prettify period labels
diff --git a/core/Archive/Parameters.php b/core/Archive/Parameters.php
index aa03d3beed89f0c9e75954b11414ff09db024210..8db15dcbb5154091bcde0460be76035fde335be5 100644
--- a/core/Archive/Parameters.php
+++ b/core/Archive/Parameters.php
@@ -1,10 +1,19 @@
 <?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ * @category Piwik
+ * @package Piwik
+ */
 
-namespace Piwik;
+namespace Piwik\Archive;
 use Exception;
 use Piwik\Segment;
 
-class Archive_Parameters
+class Parameters
 {
     /**
      * The list of site IDs to query archive data for.
diff --git a/core/ArchiveProcessor.php b/core/ArchiveProcessor.php
index 63b16ebd935ce8808dd21004d1cbbdf2b68198ef..46cde2533ea0096d1e859f187934cb811b6488ad 100644
--- a/core/ArchiveProcessor.php
+++ b/core/ArchiveProcessor.php
@@ -8,19 +8,27 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik;
+use Exception;
+use Piwik\ArchiveProcessor\Rules;
 use Piwik\Config;
 use Piwik\Period;
 use Piwik\Piwik;
+use Piwik\Date;
 use Piwik\Segment;
 use Piwik\Site;
+use Piwik\DataAccess\ArchiveSelector;
+use Piwik\DataAccess\ArchiveWriter;
+use Piwik\DataAccess\LogAggregator;
+use Zend_Registry;
 
 /**
  * The ArchiveProcessor class is used by the Archive object to make sure the given Archive is processed and available in the DB.
  *
  * @package Piwik
- * @subpackage Piwik_ArchiveProcessor
+ * @subpackage ArchiveProcessor
  */
-abstract class Piwik_ArchiveProcessor
+abstract class ArchiveProcessor
 {
     /**
      * Flag stored at the end of the archiving
@@ -53,7 +61,7 @@ abstract class Piwik_ArchiveProcessor
     protected $idArchive;
 
     /**
-     * @var Piwik_DataAccess_ArchiveWriter
+     * @var \Piwik\DataAccess\ArchiveWriter
      */
     protected $archiveWriter;
 
@@ -65,7 +73,7 @@ abstract class Piwik_ArchiveProcessor
     protected $temporaryArchive;
 
     /**
-     * @var Piwik_DataAccess_LogAggregator
+     * @var LogAggregator
      */
     protected $logAggregator = null;
 
@@ -105,12 +113,12 @@ abstract class Piwik_ArchiveProcessor
     }
 
     /**
-     * @return Piwik_DataAccess_LogAggregator
+     * @return LogAggregator
      */
     public function getLogAggregator()
     {
         if (empty($this->logAggregator)) {
-            $this->logAggregator = new Piwik_DataAccess_LogAggregator($this->getPeriod()->getDateStart(), $this->getPeriod()->getDateEnd(),
+            $this->logAggregator = new LogAggregator($this->getPeriod()->getDateStart(), $this->getPeriod()->getDateEnd(),
                 $this->getSite(), $this->getSegment());
         }
         return $this->logAggregator;
@@ -212,7 +220,7 @@ abstract class Piwik_ArchiveProcessor
         $period = $this->getPeriod();
         $segment = $this->getSegment();
 
-        $idAndVisits = Piwik_DataAccess_ArchiveSelector::getArchiveIdAndVisits($site, $period, $segment, $minDatetimeArchiveProcessedUTC, $requestedPlugin);
+        $idAndVisits = ArchiveSelector::getArchiveIdAndVisits($site, $period, $segment, $minDatetimeArchiveProcessedUTC, $requestedPlugin);
         if (!$idAndVisits) {
             return false;
         }
@@ -257,14 +265,14 @@ abstract class Piwik_ArchiveProcessor
 
     protected function doesRequestedPluginIncludeVisitsSummary($requestedPlugin)
     {
-        $processAllReportsIncludingVisitsSummary = Piwik_ArchiveProcessor_Rules::shouldProcessReportsAllPlugins($this->getSegment(), $this->getPeriod()->getLabel());
+        $processAllReportsIncludingVisitsSummary = Rules::shouldProcessReportsAllPlugins($this->getSegment(), $this->getPeriod()->getLabel());
         $doesRequestedPluginIncludeVisitsSummary = $processAllReportsIncludingVisitsSummary || $requestedPlugin == 'VisitsSummary';
         return $doesRequestedPluginIncludeVisitsSummary;
     }
 
     protected function computeNewArchive($requestedPlugin, $enforceProcessCoreMetricsOnly)
     {
-        $archiveWriter = new Piwik_DataAccess_ArchiveWriter($this->getSite()->getId(), $this->getSegment(), $this->getPeriod(), $requestedPlugin, $this->isArchiveTemporary());
+        $archiveWriter = new ArchiveWriter($this->getSite()->getId(), $this->getSegment(), $this->getPeriod(), $requestedPlugin, $this->isArchiveTemporary());
         $archiveWriter->initNewArchive();
 
         $this->archiveWriter = $archiveWriter;
@@ -286,14 +294,15 @@ abstract class Piwik_ArchiveProcessor
 
         $isVisitsToday = $this->getNumberOfVisits() > 0;
         if ($isVisitsToday
-            && !$enforceProcessCoreMetricsOnly) {
+            && !$enforceProcessCoreMetricsOnly
+        ) {
             $this->compute();
         }
 
         $archiveWriter->finalizeArchive();
 
         if ($isVisitsToday && $this->period->getLabel() != 'day') {
-            Piwik_DataAccess_ArchiveSelector::purgeOutdatedArchives($this->getPeriod()->getDateStart());
+            ArchiveSelector::purgeOutdatedArchives($this->getPeriod()->getDateStart());
         }
 
         return $archiveWriter->getIdArchive();
@@ -317,7 +326,7 @@ abstract class Piwik_ArchiveProcessor
             return $endDateTimestamp;
         }
         // Temporary archive
-        return Piwik_ArchiveProcessor_Rules::getMinTimeProcessedForTemporaryArchive($this->getDateStart(), $this->getPeriod(), $this->getSegment(), $this->getSite());
+        return Rules::getMinTimeProcessedForTemporaryArchive($this->getDateStart(), $this->getPeriod(), $this->getSegment(), $this->getSite());
     }
 
     public function isArchiveTemporary()
@@ -356,7 +365,7 @@ abstract class Piwik_ArchiveProcessor
      */
     abstract protected function compute();
 
-    protected static function determineIfArchivePermanent(Piwik_Date $dateEnd)
+    protected static function determineIfArchivePermanent(Date $dateEnd)
     {
         $now = time();
         $endTimestampUTC = strtotime($dateEnd->getDateEndUTC());
@@ -369,7 +378,7 @@ abstract class Piwik_ArchiveProcessor
     }
 
     /**
-     * @return Piwik_Date
+     * @return Date
      */
     public function getDateEnd()
     {
@@ -377,7 +386,7 @@ abstract class Piwik_ArchiveProcessor
     }
 
     /**
-     * @return Piwik_Date
+     * @return Date
      */
     public function getDateStart()
     {
@@ -429,7 +438,7 @@ abstract class Piwik_ArchiveProcessor
      */
     public function shouldProcessReportsForPlugin($pluginName)
     {
-        if (Piwik_ArchiveProcessor_Rules::shouldProcessReportsAllPlugins($this->getSegment(), $this->getPeriod()->getLabel())) {
+        if (Rules::shouldProcessReportsAllPlugins($this->getSegment(), $this->getPeriod()->getLabel())) {
             return true;
         }
         // If any other segment, only process if the requested report belong to this plugin
@@ -437,7 +446,7 @@ abstract class Piwik_ArchiveProcessor
         if ($pluginBeingProcessed == $pluginName) {
             return true;
         }
-        if (!PluginsManager::getInstance()->isPluginLoaded($pluginBeingProcessed)) {
+        if (!\Piwik\PluginsManager::getInstance()->isPluginLoaded($pluginBeingProcessed)) {
             return true;
         }
         return false;
diff --git a/core/ArchiveProcessor/Day.php b/core/ArchiveProcessor/Day.php
index 8d17b34ad2b7591dee0cb31b9267f00e8038bbe7..ba8fbb3ae6b5058dc04fdf183a8c24f8143a82fd 100644
--- a/core/ArchiveProcessor/Day.php
+++ b/core/ArchiveProcessor/Day.php
@@ -8,19 +8,23 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\ArchiveProcessor;
 use Piwik\Metrics;
+use Piwik\ArchiveProcessor;
+use Piwik_DataArray;
+use Piwik\DataTable;
 
 /**
  * This class
  * @package Piwik
- * @subpackage Piwik_ArchiveProcessor
+ * @subpackage ArchiveProcessor
  */
-class Piwik_ArchiveProcessor_Day extends Piwik_ArchiveProcessor
+class Day extends ArchiveProcessor
 {
     /**
      * Converts the given array to a datatable
      * @param Piwik_DataArray $array
-     * @return Piwik_DataTable
+     * @return \Piwik\DataTable
      */
     static public function getDataTableFromDataArray(Piwik_DataArray $array)
     {
@@ -31,10 +35,10 @@ class Piwik_ArchiveProcessor_Day extends Piwik_ArchiveProcessor
         if (!empty($dataArrayTwoLevels)) {
             $subtableByLabel = array();
             foreach ($dataArrayTwoLevels as $label => $subTable) {
-                $subtableByLabel[$label] = Piwik_DataTable::makeFromIndexedArray($subTable);
+                $subtableByLabel[$label] = DataTable::makeFromIndexedArray($subTable);
             }
         }
-        return Piwik_DataTable::makeFromIndexedArray($dataArray, $subtableByLabel);
+        return DataTable::makeFromIndexedArray($dataArray, $subtableByLabel);
     }
 
     /**
diff --git a/core/ArchiveProcessor/Period.php b/core/ArchiveProcessor/Period.php
index 0350adb0347367e13424a3a9be33dbc6e7d86ea0..6f7085c1a982dfdb0e181f6ab2152f0c3771ba24 100644
--- a/core/ArchiveProcessor/Period.php
+++ b/core/ArchiveProcessor/Period.php
@@ -8,10 +8,18 @@
  * @category Piwik
  * @package Piwik
  */
+
+namespace Piwik\ArchiveProcessor;
+
+use Exception;
 use Piwik\Archive;
 use Piwik\Metrics;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\ArchiveProcessor;
+use Piwik\DataTable;
+use Piwik\DataTable\Map;
+use Piwik\DataTable\Manager;
 
 /**
  * This class provides generic methods to archive data for a period (week / month / year).
@@ -21,9 +29,9 @@ use Piwik\Common;
  * Public methods can be called by the plugins that hook on the event 'ArchiveProcessing_Period.compute'
  *
  * @package Piwik
- * @subpackage Piwik_ArchiveProcessor
+ * @subpackage ArchiveProcessor
  */
-class Piwik_ArchiveProcessor_Period extends Piwik_ArchiveProcessor
+class Period extends ArchiveProcessor
 {
     /**
      * Array of (column name before => column name renamed) of the columns for which sum operation is invalid.
@@ -58,7 +66,7 @@ class Piwik_ArchiveProcessor_Period extends Piwik_ArchiveProcessor
      * @param int $maximumRowsInDataTableLevelZero       Max row count of parent datatable to archive
      * @param int $maximumRowsInSubDataTable             Max row count of children datatable(s) to archive
      * @param string $columnToSortByBeforeTruncation     Column name to sort by, before truncating rows (ie. if there are more rows than the specified max row count)
-     * @param array $columnAggregationOperations         Operations for aggregating columns, @see Piwik_DataTable_Row::sumRow()
+     * @param array $columnAggregationOperations         Operations for aggregating columns, @see Row::sumRow()
      * @param array $invalidSummedColumnNameToRenamedName  (current_column_name => new_column_name) for columns that must change names when summed
      *                                                             (eg. unique visitors go from nb_uniq_visitors to sum_daily_nb_uniq_visitors)
      *
@@ -75,7 +83,7 @@ class Piwik_ArchiveProcessor_Period extends Piwik_ArchiveProcessor
                                               $invalidSummedColumnNameToRenamedName = null)
     {
         // We clean up below all tables created during this function call (and recursive calls)
-        $latestUsedTableId = Piwik_DataTable_Manager::getInstance()->getMostRecentTableId();
+        $latestUsedTableId = Manager::getInstance()->getMostRecentTableId();
         if (!is_array($recordNames)) {
             $recordNames = array($recordNames);
         }
@@ -91,7 +99,7 @@ class Piwik_ArchiveProcessor_Period extends Piwik_ArchiveProcessor
             Common::destroy($table);
             $this->insertBlobRecord($recordName, $blob);
         }
-        Piwik_DataTable_Manager::getInstance()->deleteAll($latestUsedTableId);
+        Manager::getInstance()->deleteAll($latestUsedTableId);
 
         return $nameToCount;
     }
@@ -147,18 +155,18 @@ class Piwik_ArchiveProcessor_Period extends Piwik_ArchiveProcessor
      *
      * @param string $name
      * @param array $invalidSummedColumnNameToRenamedName  columns in the array (old name, new name) to be renamed as the sum operation is not valid on them (eg. nb_uniq_visitors->sum_daily_nb_uniq_visitors)
-     * @param array $columnAggregationOperations           Operations for aggregating columns, @see Piwik_DataTable_Row::sumRow()
-     * @return Piwik_DataTable
+     * @param array $columnAggregationOperations           Operations for aggregating columns, @see Row::sumRow()
+     * @return DataTable
      */
     protected function getRecordDataTableSum($name, $invalidSummedColumnNameToRenamedName, $columnAggregationOperations = null)
     {
-        $table = new Piwik_DataTable();
+        $table = new DataTable();
         if (!empty($columnAggregationOperations)) {
             $table->setColumnAggregationOperations($columnAggregationOperations);
         }
 
         $data = $this->archiver->getDataTableExpanded($name, $idSubTable = null, $addMetadataSubtableId = false);
-        if ($data instanceof Piwik_DataTable_Array) {
+        if ($data instanceof DataTable\Map) {
             foreach ($data->getArray() as $date => $tableToSum) {
                 $table->addDataTable($tableToSum);
             }
diff --git a/core/ArchiveProcessor/Rules.php b/core/ArchiveProcessor/Rules.php
index de856f470b3b4de17e77590447afc643c7c8dd9b..d58c7e5fb3b3b91271306bb9e62be1e834722901 100644
--- a/core/ArchiveProcessor/Rules.php
+++ b/core/ArchiveProcessor/Rules.php
@@ -8,17 +8,21 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\ArchiveProcessor;
+
+use Exception;
 use Piwik\Config;
-use Piwik\Period;
 use Piwik\Piwik;
 use Piwik\Common;
 use Piwik\Segment;
 use Piwik\Site;
+use Piwik\Date;
+use Piwik_Tracker_Cache;
 
 /**
  * This class contains Archiving rules/logic which are used in several places
  */
-class Piwik_ArchiveProcessor_Rules
+class Rules
 {
     const OPTION_TODAY_ARCHIVE_TTL = 'todayArchiveTimeToLive';
 
@@ -98,10 +102,10 @@ class Piwik_ArchiveProcessor_Rules
      * Given a monthly archive table, will delete all reports that are now outdated,
      * or reports that ended with an error
      *
-     * @param Piwik_Date $date
+     * @param \Piwik\Date $date
      * @return int|bool  False, or timestamp indicating which archives to delete
      */
-    public static function shouldPurgeOutdatedArchives(Piwik_Date $date)
+    public static function shouldPurgeOutdatedArchives(Date $date)
     {
         if (self::$purgeDisabledByTests) {
             return false;
@@ -128,10 +132,10 @@ class Piwik_ArchiveProcessor_Rules
             if (self::isBrowserTriggerEnabled()) {
                 // If Browser Archiving is enabled, it is likely there are many more temporary archives
                 // We delete more often which is safe, since reports are re-processed on demand
-                $purgeArchivesOlderThan = Piwik_Date::factory(time() - 2 * $temporaryArchivingTimeout)->getDateTime();
+                $purgeArchivesOlderThan = Date::factory(time() - 2 * $temporaryArchivingTimeout)->getDateTime();
             } else {
                 // If archive.php via Cron is building the reports, we should keep all temporary reports from today
-                $purgeArchivesOlderThan = Piwik_Date::factory('today')->getDateTime();
+                $purgeArchivesOlderThan = Date::factory('today')->getDateTime();
             }
             return $purgeArchivesOlderThan;
         }
@@ -140,12 +144,12 @@ class Piwik_ArchiveProcessor_Rules
         return false;
     }
 
-    public static function getMinTimeProcessedForTemporaryArchive(Piwik_Date $dateStart, Period $period, Segment $segment, Site $site)
+    public static function getMinTimeProcessedForTemporaryArchive(Date $dateStart, \Piwik\Period $period, Segment $segment, Site $site)
     {
         $now = time();
-        $minimumArchiveTime = $now - Piwik_ArchiveProcessor_Rules::getTodayArchiveTimeToLive();
+        $minimumArchiveTime = $now - Rules::getTodayArchiveTimeToLive();
 
-        $isArchivingDisabled = Piwik_ArchiveProcessor_Rules::isArchivingDisabledFor($segment, $period->getLabel());
+        $isArchivingDisabled = Rules::isArchivingDisabledFor($segment, $period->getLabel());
         if ($isArchivingDisabled) {
             if ($period->getNumberOfSubperiods() == 0
                 && $dateStart->getTimestamp() <= $now
@@ -156,7 +160,7 @@ class Piwik_ArchiveProcessor_Rules
                 // This week, this month, this year:
                 // accept any archive that was processed today after 00:00:01 this morning
                 $timezone = $site->getTimezone();
-                $minimumArchiveTime = Piwik_Date::factory(Piwik_Date::factory('now', $timezone)->getDateStartUTC())->setTimezone($timezone)->getTimestamp();
+                $minimumArchiveTime = Date::factory(Date::factory('now', $timezone)->getDateStartUTC())->setTimezone($timezone)->getTimestamp();
             }
         }
         return $minimumArchiveTime;
@@ -207,7 +211,7 @@ class Piwik_ArchiveProcessor_Rules
     protected static function isRequestAuthorizedToArchive()
     {
         return !self::$archivingDisabledByTests &&
-            (Piwik_ArchiveProcessor_Rules::isBrowserTriggerEnabled()
+            (Rules::isBrowserTriggerEnabled()
                 || Common::isPhpCliMode()
                 || (Piwik::isUserIsSuperUser()
                     && Common::isArchivePhpTriggered()));
diff --git a/core/AssetManager.php b/core/AssetManager.php
index f82f691c20aab849d5dea815a24f59855e78d1fd..f175bc5c41fa3fc9ecd92023f652b853fd1e03ff 100644
--- a/core/AssetManager.php
+++ b/core/AssetManager.php
@@ -81,7 +81,7 @@ class Piwik_AssetManager
      */
     public static function generateAssetsCacheBuster()
     {
-        $pluginList = md5(implode(",", PluginsManager::getInstance()->getLoadedPluginsName()));
+        $pluginList = md5(implode(",", \Piwik\PluginsManager::getInstance()->getLoadedPluginsName()));
         $cacheBuster = md5(Common::getSalt() . $pluginList . PHP_VERSION . Piwik_Version::VERSION);
         return $cacheBuster;
     }
diff --git a/core/Common.php b/core/Common.php
index c7ed91eacdb34f3232549e079c61399534b2e81a..da6e8892b5667e02f1115e904c9636f38e095e32 100644
--- a/core/Common.php
+++ b/core/Common.php
@@ -105,7 +105,7 @@ class Common
      */
     public static function isGoalPluginEnabled()
     {
-        return PluginsManager::getInstance()->isPluginActivated('Goals');
+        return \Piwik\PluginsManager::getInstance()->isPluginActivated('Goals');
     }
 
     /*
diff --git a/core/Controller.php b/core/Controller.php
index 646b1552b1a69f342bb0f8a3558bc8a3f0f509ca..0d6aa3ec641249d8639360422f02166868173bea 100644
--- a/core/Controller.php
+++ b/core/Controller.php
@@ -9,11 +9,14 @@
  * @package Piwik
  */
 use Piwik\Config;
+use Piwik\DataTable\Filter\CalculateEvolutionFilter;
 use Piwik\Period;
-use Piwik\Period_Range;
+use Piwik\Period\Month;
+use Piwik\Period\Range;
 use Piwik\Piwik;
 use Piwik\Common;
 use Piwik\Access;
+use Piwik\Date;
 use Piwik\Site;
 
 
@@ -39,9 +42,9 @@ abstract class Piwik_Controller
     protected $strDate;
 
     /**
-     * Piwik_Date object or null if the requested date is a range
+     * Date object or null if the requested date is a range
      *
-     * @var Piwik_Date|null
+     * @var Date|null
      */
     protected $date;
 
@@ -85,7 +88,7 @@ abstract class Piwik_Controller
      *
      * @param string $date             today, yesterday, YYYY-MM-DD
      * @param string $defaultTimezone  default timezone to use
-     * @return Piwik_Date
+     * @return Date
      */
     protected function getDateParameterInTimezone($date, $defaultTimezone)
     {
@@ -103,17 +106,17 @@ abstract class Piwik_Controller
             }
             $timezone = $defaultTimezone;
         }
-        return Piwik_Date::factory($date, $timezone);
+        return Date::factory($date, $timezone);
     }
 
     /**
      * Sets the date to be used by all other methods in the controller.
      * If the date has to be modified, it should be called just after the controller construct
      *
-     * @param Piwik_Date $date
+     * @param Date $date
      * @return void
      */
-    protected function setDate(Piwik_Date $date)
+    protected function setDate(Date $date)
     {
         $this->date = $date;
         $strDate = $this->date->toString();
@@ -299,8 +302,8 @@ abstract class Piwik_Controller
      */
     public static function getDateRangeRelativeToEndDate($period, $lastN, $endDate, $site)
     {
-        $last30Relative = new Period_Range($period, $lastN, $site->getTimezone());
-        $last30Relative->setDefaultEndDate(Piwik_Date::factory($endDate));
+        $last30Relative = new Range($period, $lastN, $site->getTimezone());
+        $last30Relative->setDefaultEndDate(Date::factory($endDate));
         $date = $last30Relative->getDateStart()->toString() . "," . $last30Relative->getDateEnd()->toString();
         return $date;
     }
@@ -355,11 +358,11 @@ abstract class Piwik_Controller
     /**
      * Sets the first date available in the calendar
      *
-     * @param Piwik_Date $minDate
+     * @param Date $minDate
      * @param Piwik_View $view
      * @return void
      */
-    protected function setMinDateView(Piwik_Date $minDate, $view)
+    protected function setMinDateView(Date $minDate, $view)
     {
         $view->minDateYear = $minDate->toString('Y');
         $view->minDateMonth = $minDate->toString('m');
@@ -369,11 +372,11 @@ abstract class Piwik_Controller
     /**
      * Sets "today" in the calendar. Today does not always mean "UTC" today, eg. for websites in UTC+12.
      *
-     * @param Piwik_Date $maxDate
+     * @param Date $maxDate
      * @param Piwik_View $view
      * @return void
      */
-    protected function setMaxDateView(Piwik_Date $maxDate, $view)
+    protected function setMaxDateView(Date $maxDate, $view)
     {
         $view->maxDateYear = $maxDate->toString('Y');
         $view->maxDateMonth = $maxDate->toString('m');
@@ -404,10 +407,10 @@ abstract class Piwik_Controller
             $rawDate = Common::getRequestVar('date');
             $periodStr = Common::getRequestVar('period');
             if ($periodStr != 'range') {
-                $date = Piwik_Date::factory($this->strDate);
+                $date = Date::factory($this->strDate);
                 $period = Period::factory($periodStr, $date);
             } else {
-                $period = new Period_Range($periodStr, $rawDate, $this->site->getTimezone());
+                $period = new Range($periodStr, $rawDate, $this->site->getTimezone());
             }
             $view->rawDate = $rawDate;
             $view->prettyDate = self::getCalendarPrettyDate($period);
@@ -416,10 +419,10 @@ abstract class Piwik_Controller
             $view->siteMainUrl = $this->site->getMainUrl();
 
             $datetimeMinDate = $this->site->getCreationDate()->getDatetime();
-            $minDate = Piwik_Date::factory($datetimeMinDate, $this->site->getTimezone());
+            $minDate = Date::factory($datetimeMinDate, $this->site->getTimezone());
             $this->setMinDateView($minDate, $view);
 
-            $maxDate = Piwik_Date::factory('now', $this->site->getTimezone());
+            $maxDate = Date::factory('now', $this->site->getTimezone());
             $this->setMaxDateView($maxDate, $view);
 
             // Setting current period start & end dates, for pre-setting the calendar when "Date Range" is selected
@@ -768,7 +771,7 @@ abstract class Piwik_Controller
      */
     public static function getCalendarPrettyDate($period)
     {
-        if ($period instanceof Piwik_Period_Month) // show month name when period is for a month
+        if ($period instanceof Month) // show month name when period is for a month
         {
             return $period->getLocalizedLongString();
         } else {
@@ -786,7 +789,7 @@ abstract class Piwik_Controller
      */
     public static function getPrettyDate($date, $period)
     {
-        return self::getCalendarPrettyDate(Period::factory($period, Piwik_Date::factory($date)));
+        return self::getCalendarPrettyDate(Period::factory($period, Date::factory($date)));
     }
 
 
@@ -805,7 +808,7 @@ abstract class Piwik_Controller
      */
     protected function getEvolutionHtml($date, $currentValue, $pastDate, $pastValue)
     {
-        $evolutionPercent = Piwik_DataTable_Filter_CalculateEvolutionFilter::calculate(
+        $evolutionPercent = CalculateEvolutionFilter::calculate(
             $currentValue, $pastValue, $precision = 1);
 
         // do not display evolution if evolution percent is 0 and current value is 0
diff --git a/core/Controller/Admin.php b/core/Controller/Admin.php
index dd98dbc835429117035248688bbb6737a94f2de3..a6c58b46a6a9339f1aea905c13acf0c4adc4b490 100644
--- a/core/Controller/Admin.php
+++ b/core/Controller/Admin.php
@@ -54,10 +54,10 @@ abstract class Piwik_Controller_Admin extends Piwik_Controller
         $view->isSuperUser = Piwik::isUserIsSuperUser();
 
         // for old geoip plugin warning
-        $view->usingOldGeoIPPlugin = PluginsManager::getInstance()->isPluginActivated('GeoIP');
+        $view->usingOldGeoIPPlugin = \Piwik\PluginsManager::getInstance()->isPluginActivated('GeoIP');
 
         // for cannot find installed plugin warning
-        $missingPlugins = PluginsManager::getInstance()->getMissingPlugins();
+        $missingPlugins = \Piwik\PluginsManager::getInstance()->getMissingPlugins();
         if (!empty($missingPlugins)) {
             $pluginsLink = Piwik_Url::getCurrentQueryStringWithParametersModified(array(
                                                                                        'module' => 'CorePluginsAdmin', 'action' => 'index'
diff --git a/core/DataAccess/ArchiveSelector.php b/core/DataAccess/ArchiveSelector.php
index 5c7abde8c6880e3e92808e5736e566031ec7b63a..8ed467ba9004ac3843fb75d79589590e426efa77 100644
--- a/core/DataAccess/ArchiveSelector.php
+++ b/core/DataAccess/ArchiveSelector.php
@@ -8,12 +8,19 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataAccess;
+
+use Exception;
+use Piwik\ArchiveProcessor\Rules;
 use Piwik\Period;
-use Piwik\Period_Range;
+use Piwik\Period\Range;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
+use Piwik\ArchiveProcessor;
 use Piwik\Segment;
 use Piwik\Site;
+use Piwik\DataAccess\ArchiveTableCreator;
 
 /**
  * Data Access object used to query archives
@@ -29,7 +36,7 @@ use Piwik\Site;
  * - value         = the actual data (a numeric value, or a blob of compressed serialized data)
  *
  */
-class Piwik_DataAccess_ArchiveSelector
+class ArchiveSelector
 {
     const NB_VISITS_RECORD_LOOKED_UP = "nb_visits";
 
@@ -47,7 +54,7 @@ class Piwik_DataAccess_ArchiveSelector
         $timeStampWhere = '';
         if ($minDatetimeArchiveProcessedUTC) {
             $timeStampWhere = " AND ts_archived >= ? ";
-            $bindSQL[] = Piwik_Date::factory($minDatetimeArchiveProcessedUTC)->getDatetime();
+            $bindSQL[] = Date::factory($minDatetimeArchiveProcessedUTC)->getDatetime();
         }
 
         $pluginOrVisitsSummary = array("VisitsSummary", $requestedPlugin);
@@ -55,7 +62,7 @@ class Piwik_DataAccess_ArchiveSelector
         $sqlWhereArchiveName = self::getNameCondition($pluginOrVisitsSummary, $segment);
 
         $sqlQuery = "	SELECT idarchive, value, name, date1 as startDate
-						FROM " . Piwik_DataAccess_ArchiveTableCreator::getNumericTable($dateStart) . "``
+						FROM " . ArchiveTableCreator::getNumericTable($dateStart) . "``
 						WHERE idsite = ?
 							AND date1 = ?
 							AND date2 = ?
@@ -112,7 +119,7 @@ class Piwik_DataAccess_ArchiveSelector
     protected static function getMostRecentIdArchiveFromResults(Segment $segment, $requestedPlugin, $results)
     {
         $idArchive = false;
-        $namesRequestedPlugin = Piwik_ArchiveProcessor_Rules::getDoneFlags(array($requestedPlugin), $segment);
+        $namesRequestedPlugin = Rules::getDoneFlags(array($requestedPlugin), $segment);
         foreach ($results as $result) {
             if ($idArchive === false
                 && in_array($result['name'], $namesRequestedPlugin)
@@ -151,7 +158,7 @@ class Piwik_DataAccess_ArchiveSelector
         $monthToPeriods = array();
         foreach ($periods as $period) {
             /** @var Period $period */
-            $table = Piwik_DataAccess_ArchiveTableCreator::getNumericTable($period->getDateStart());
+            $table = ArchiveTableCreator::getNumericTable($period->getDateStart());
             $monthToPeriods[$table][] = $period;
         }
 
@@ -162,7 +169,7 @@ class Piwik_DataAccess_ArchiveSelector
 
             // if looking for a range archive. NOTE: we assume there's only one period if its a range.
             $bind = array($firstPeriod->getId());
-            if ($firstPeriod instanceof Period_Range) {
+            if ($firstPeriod instanceof Range) {
                 $dateCondition = "date1 = ? AND date2 = ?";
                 $bind[] = $firstPeriod->getDateStart()->toString('Y-m-d');
                 $bind[] = $firstPeriod->getDateEnd()->toString('Y-m-d');
@@ -232,11 +239,11 @@ class Piwik_DataAccess_ArchiveSelector
                 throw new Exception("Unexpected: id archive not found for period '$period' '");
             }
             // $period = "2009-01-04,2009-01-04",
-            $date = Piwik_Date::factory(substr($period, 0, 10));
+            $date = Date::factory(substr($period, 0, 10));
             if ($archiveDataType == 'numeric') {
-                $table = Piwik_DataAccess_ArchiveTableCreator::getNumericTable($date);
+                $table = ArchiveTableCreator::getNumericTable($date);
             } else {
-                $table = Piwik_DataAccess_ArchiveTableCreator::getBlobTable($date);
+                $table = ArchiveTableCreator::getBlobTable($date);
             }
             $sql = sprintf($getValuesSql, $table, implode(',', $ids));
             $dataRows = Piwik_FetchAll($sql, $bind);
@@ -260,20 +267,20 @@ class Piwik_DataAccess_ArchiveSelector
     {
         // the flags used to tell how the archiving process for a specific archive was completed,
         // if it was completed
-        $doneFlags = Piwik_ArchiveProcessor_Rules::getDoneFlags($plugins, $segment);
+        $doneFlags = Rules::getDoneFlags($plugins, $segment);
 
         $allDoneFlags = "'" . implode("','", $doneFlags) . "'";
 
         // create the SQL to find archives that are DONE
         return "(name IN ($allDoneFlags)) AND " .
-            " (value = '" . Piwik_ArchiveProcessor::DONE_OK . "' OR " .
-            " value = '" . Piwik_ArchiveProcessor::DONE_OK_TEMPORARY . "')";
+            " (value = '" . ArchiveProcessor::DONE_OK . "' OR " .
+            " value = '" . ArchiveProcessor::DONE_OK_TEMPORARY . "')";
     }
 
-    static public function purgeOutdatedArchives(Piwik_Date $dateStart)
+    static public function purgeOutdatedArchives(Date $dateStart)
     {
 
-        $purgeArchivesOlderThan = Piwik_ArchiveProcessor_Rules::shouldPurgeOutdatedArchives($dateStart);
+        $purgeArchivesOlderThan = Rules::shouldPurgeOutdatedArchives($dateStart);
         if (!$purgeArchivesOlderThan) {
             return;
         }
@@ -285,48 +292,48 @@ class Piwik_DataAccess_ArchiveSelector
         self::deleteArchivesWithPeriodRange($dateStart);
 
         Piwik::log("Purging temporary archives: done [ purged archives older than $purgeArchivesOlderThan in "
-            . $dateStart->toString("Y-m") ." ] [Deleted IDs: " . implode (',', $idArchivesToDelete) . "]");
+            . $dateStart->toString("Y-m") . " ] [Deleted IDs: " . implode(',', $idArchivesToDelete) . "]");
     }
 
     /*
      * Deleting "Custom Date Range" reports after 1 day, since they can be re-processed and would take up un-necessary space
      */
-    protected static function deleteArchivesWithPeriodRange(Piwik_Date $date)
+    protected static function deleteArchivesWithPeriodRange(Date $date)
     {
         $query = "DELETE FROM %s WHERE period = ? AND ts_archived < ?";
 
-        $yesterday = Piwik_Date::factory('yesterday')->getDateTime();
+        $yesterday = Date::factory('yesterday')->getDateTime();
         $bind = array(Piwik::$idPeriods['range'], $yesterday);
-        $numericTable = Piwik_DataAccess_ArchiveTableCreator::getNumericTable($date);
+        $numericTable = ArchiveTableCreator::getNumericTable($date);
         Piwik_Query(sprintf($query, $numericTable), $bind);
         Piwik::log("Purging Custom Range archives: done [ purged archives older than $yesterday from $numericTable / blob ]");
         try {
-            Piwik_Query(sprintf($query, Piwik_DataAccess_ArchiveTableCreator::getBlobTable($date)), $bind);
+            Piwik_Query(sprintf($query, ArchiveTableCreator::getBlobTable($date)), $bind);
         } catch (Exception $e) {
             // Individual blob tables could be missing
         }
     }
 
-    protected static function deleteArchiveIds(Piwik_Date $date, $idArchivesToDelete)
+    protected static function deleteArchiveIds(Date $date, $idArchivesToDelete)
     {
         $query = "DELETE FROM %s WHERE idarchive IN (" . implode(',', $idArchivesToDelete) . ")";
 
-        Piwik_Query(sprintf($query, Piwik_DataAccess_ArchiveTableCreator::getNumericTable($date)));
+        Piwik_Query(sprintf($query, ArchiveTableCreator::getNumericTable($date)));
         try {
-            Piwik_Query(sprintf($query, Piwik_DataAccess_ArchiveTableCreator::getBlobTable($date)));
+            Piwik_Query(sprintf($query, ArchiveTableCreator::getBlobTable($date)));
         } catch (Exception $e) {
             // Individual blob tables could be missing
         }
     }
 
-    protected static function getTemporaryArchiveIdsOlderThan(Piwik_Date $date, $purgeArchivesOlderThan)
+    protected static function getTemporaryArchiveIdsOlderThan(Date $date, $purgeArchivesOlderThan)
     {
         $query = "SELECT idarchive
-                FROM ". Piwik_DataAccess_ArchiveTableCreator::getNumericTable($date) ."
+                FROM " . ArchiveTableCreator::getNumericTable($date) . "
                 WHERE name LIKE 'done%'
-                    AND ((  value = " . Piwik_ArchiveProcessor::DONE_OK_TEMPORARY . "
+                    AND ((  value = " . ArchiveProcessor::DONE_OK_TEMPORARY . "
                             AND ts_archived < ?)
-                         OR value = " . Piwik_ArchiveProcessor::DONE_ERROR . ")";
+                         OR value = " . ArchiveProcessor::DONE_ERROR . ")";
 
         $result = Piwik_FetchAll($query, array($purgeArchivesOlderThan));
         $idArchivesToDelete = array();
diff --git a/core/DataAccess/ArchiveTableCreator.php b/core/DataAccess/ArchiveTableCreator.php
index d36206d1fee57856a0e3c2d324b1f5a670253c42..9b2fb6797dfb4bcaa297e2d2f3ab8441b313887f 100644
--- a/core/DataAccess/ArchiveTableCreator.php
+++ b/core/DataAccess/ArchiveTableCreator.php
@@ -1,6 +1,11 @@
 <?php
+namespace Piwik\DataAccess;
+
+use Exception;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
+use Zend_Registry;
 
 /**
  * Piwik - Open source web analytics
@@ -12,7 +17,7 @@ use Piwik\Common;
  * @package Piwik
  */
 
-class Piwik_DataAccess_ArchiveTableCreator
+class ArchiveTableCreator
 {
     const NUMERIC_TABLE = "numeric";
 
@@ -20,17 +25,17 @@ class Piwik_DataAccess_ArchiveTableCreator
 
     static public $tablesAlreadyInstalled = null;
 
-    static public function getNumericTable(Piwik_Date $date)
+    static public function getNumericTable(Date $date)
     {
         return self::getTable($date, self::NUMERIC_TABLE);
     }
 
-    static public function getBlobTable(Piwik_Date $date)
+    static public function getBlobTable(Date $date)
     {
         return self::getTable($date, self::BLOB_TABLE);
     }
 
-    static protected function getTable(Piwik_Date $date, $type)
+    static protected function getTable(Date $date, $type)
     {
         $tableNamePrefix = "archive_" . $type;
         $tableName = $tableNamePrefix . "_" . $date->toString('Y_m');
@@ -68,6 +73,7 @@ class Piwik_DataAccess_ArchiveTableCreator
     {
         self::$tablesAlreadyInstalled = null;
     }
+
     static public function refreshTableList($forceReload = false)
     {
         self::$tablesAlreadyInstalled = Piwik::getTablesInstalled($forceReload);
@@ -87,7 +93,8 @@ class Piwik_DataAccess_ArchiveTableCreator
         $archiveTables = array();
         foreach (self::$tablesAlreadyInstalled as $table) {
             if (strpos($table, 'archive_numeric_') !== false
-                || strpos($table, 'archive_blob_') !== false ) {
+                || strpos($table, 'archive_blob_') !== false
+            ) {
                 $archiveTables[] = $table;
             }
         }
@@ -103,13 +110,12 @@ class Piwik_DataAccess_ArchiveTableCreator
 
     static public function getTypeFromTableName($tableName)
     {
-        if(strpos($tableName, 'archive_numeric_') !== false) {
+        if (strpos($tableName, 'archive_numeric_') !== false) {
             return self::NUMERIC_TABLE;
         }
-        if(strpos($tableName, 'archive_blob_') !== false) {
+        if (strpos($tableName, 'archive_blob_') !== false) {
             return self::BLOB_TABLE;
         }
         return false;
     }
-
 }
\ No newline at end of file
diff --git a/core/DataAccess/ArchiveWriter.php b/core/DataAccess/ArchiveWriter.php
index 2c7841a19ce3c624ba9c3f9f92c6949761b869d3..ef04212b7481755567235029148d7b18e7cabf46 100644
--- a/core/DataAccess/ArchiveWriter.php
+++ b/core/DataAccess/ArchiveWriter.php
@@ -8,18 +8,25 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataAccess;
+
+use Exception;
+use Piwik\ArchiveProcessor\Rules;
 use Piwik\Config;
+use Piwik\DataAccess\ArchiveTableCreator;
 use Piwik\Period;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\ArchiveProcessor;
 use Piwik\Segment;
+use Zend_Registry;
 
 /**
  * This class is used to create a new Archive.
  * An Archive is a set of reports (numeric and data tables).
  * New data can be inserted in the archive with insertRecord/insertBulkRecords
  */
-class Piwik_DataAccess_ArchiveWriter
+class ArchiveWriter
 {
     const PREFIX_SQL_LOCK = "locked_";
 
@@ -38,7 +45,7 @@ class Piwik_DataAccess_ArchiveWriter
         $this->idSite = $idSite;
         $this->segment = $segment;
         $this->period = $period;
-        $this->doneFlag = Piwik_ArchiveProcessor_Rules::getDoneStringFlagFor($segment, $period->getLabel(), $requestedPlugin);
+        $this->doneFlag = Rules::getDoneStringFlagFor($segment, $period->getLabel(), $requestedPlugin);
         $this->isArchiveTemporary = $isArchiveTemporary;
 
         $this->dateStart = $this->period->getDateStart();
@@ -106,7 +113,7 @@ class Piwik_DataAccess_ArchiveWriter
 
     protected function logArchiveStatusAsIncomplete()
     {
-        $statusWhileProcessing = Piwik_ArchiveProcessor::DONE_ERROR;
+        $statusWhileProcessing = ArchiveProcessor::DONE_ERROR;
         $this->insertRecord($this->doneFlag, $statusWhileProcessing);
     }
 
@@ -148,9 +155,9 @@ class Piwik_DataAccess_ArchiveWriter
 
     protected function logArchiveStatusAsFinal()
     {
-        $status = Piwik_ArchiveProcessor::DONE_OK;
+        $status = ArchiveProcessor::DONE_OK;
         if ($this->isArchiveTemporary) {
-            $status = Piwik_ArchiveProcessor::DONE_OK_TEMPORARY;
+            $status = ArchiveProcessor::DONE_OK_TEMPORARY;
         }
         $this->insertRecord($this->doneFlag, $status);
     }
@@ -236,12 +243,12 @@ class Piwik_DataAccess_ArchiveWriter
         if (is_numeric($value)) {
             return $this->getTableNumeric();
         }
-        return Piwik_DataAccess_ArchiveTableCreator::getBlobTable($this->dateStart);
+        return ArchiveTableCreator::getBlobTable($this->dateStart);
     }
 
     protected function getTableNumeric()
     {
-        return Piwik_DataAccess_ArchiveTableCreator::getNumericTable($this->dateStart);
+        return ArchiveTableCreator::getNumericTable($this->dateStart);
     }
 
     protected function getInsertFields()
diff --git a/core/DataAccess/LogAggregator.php b/core/DataAccess/LogAggregator.php
index e21ff15b5e5bd0c58aad7b3461308182358b25ea..72e94e8b70a377ce1adf53b94c670315ceee35f9 100644
--- a/core/DataAccess/LogAggregator.php
+++ b/core/DataAccess/LogAggregator.php
@@ -8,16 +8,23 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataAccess;
+
+use PDOStatement;
 use Piwik\Common;
 use Piwik\Metrics;
+use Piwik\Date;
 use Piwik\Segment;
 use Piwik\Site;
+use Piwik_RankingQuery;
+use Piwik_Tracker_GoalManager;
+use Zend_Registry;
 
 /**
  * This class queries the Visitor logs tables (visits, actions, conversions, ecommerce)
  * and returns aggregate data.
  */
-class Piwik_DataAccess_LogAggregator
+class LogAggregator
 {
     const LOG_VISIT_TABLE = 'log_visit';
 
@@ -47,10 +54,10 @@ class Piwik_DataAccess_LogAggregator
 
     const FIELDS_SEPARATOR = ", \n\t\t\t";
 
-    /** @var \Piwik_Date */
+    /** @var \Piwik\Date */
     protected $dateStart;
 
-    /** @var \Piwik_Date */
+    /** @var \Piwik\Date */
     protected $dateEnd;
 
     /** @var \Piwik\Site */
@@ -59,7 +66,7 @@ class Piwik_DataAccess_LogAggregator
     /** @var \Piwik\Segment */
     protected $segment;
 
-    public function __construct(Piwik_Date $dateStart, Piwik_Date $dateEnd, Site $site, Segment $segment)
+    public function __construct(Date $dateStart, Date $dateEnd, Site $site, Segment $segment)
     {
         $this->dateStart = $dateStart;
         $this->dateEnd = $dateEnd;
@@ -241,10 +248,10 @@ class Piwik_DataAccess_LogAggregator
         }
         return $dimensions;
     }
-    
+
     /**
      * Prefixes a column name with a table name if not already done.
-     * 
+     *
      * @param string $column eg, 'location_provider'
      * @param string $tableName eg, 'log_visit'
      * @return string eg, 'log_visit.location_provider'
diff --git a/core/DataTable.php b/core/DataTable.php
index c92935868c55a69507b7a6cb80358568cf382fd1..a1dd872ec54c1070121f6f31e6189d22c25015a2 100644
--- a/core/DataTable.php
+++ b/core/DataTable.php
@@ -9,7 +9,17 @@
  * @package Piwik
  */
 
+namespace Piwik;
+
+use Closure;
+use Exception;
 use Piwik\Common;
+use Piwik\DataTable\Manager;
+use Piwik\DataTable\Renderer\Html;
+use Piwik\DataTable\Row;
+use Piwik\DataTable\Filter;
+use Piwik\DataTable\Row\DataTableSummaryRow;
+use ReflectionClass;
 
 /**
  * @see Common::destroy()
@@ -21,7 +31,7 @@ require_once PIWIK_INCLUDE_PATH . '/core/Common.php';
  * ---- DataTable
  * A DataTable is a data structure used to store complex tables of data.
  *
- * A DataTable is composed of multiple DataTable_Row.
+ * A DataTable is composed of multiple DataTable\Row.
  * A DataTable can be applied one or several DataTable_Filter.
  * A DataTable can be given to a DataTable_Renderer that would export the data under a given format (XML, HTML, etc.).
  *
@@ -31,7 +41,7 @@ require_once PIWIK_INCLUDE_PATH . '/core/Common.php';
  * - efficient way of loading data from an external source (from a PHP array structure)
  * - very simple interface to get data from the table
  *
- * ---- DataTable_Row
+ * ---- DataTable\Row
  * A DataTableRow in the table is defined by
  * - multiple columns (a label, multiple values, ...)
  * - optional metadata
@@ -45,7 +55,7 @@ require_once PIWIK_INCLUDE_PATH . '/core/Common.php';
  * - metadata = array('logo' => '/plugins/UserSettings/images/browsers/FF.gif')
  * - no sub DataTable
  *
- * A more complex example would be a DataTable_Row that is associated to a sub DataTable.
+ * A more complex example would be a DataTable\Row that is associated to a sub DataTable.
  * For example, for the row of the search engine Google,
  * we want to get the list of keywords associated, with their statistics.
  * - columns = array(   'label' => 'Google',
@@ -54,8 +64,8 @@ require_once PIWIK_INCLUDE_PATH . '/core/Common.php';
  *                        'returning_visits' => 77)
  * - metadata = array(    'logo' => '/plugins/Referers/images/searchEngines/google.com.png',
  *                        'url' => 'http://google.com')
- * - DataTable = DataTable containing several DataTable_Row containing the keywords information for this search engine
- *            Example of one DataTable_Row
+ * - DataTable = DataTable containing several DataTable\Row containing the keywords information for this search engine
+ *            Example of one DataTable\Row
  *            - the keyword columns specific to this search engine =
  *                    array(  'label' => 'Piwik', // the keyword
  *                            'visitors' => 155,  // Piwik has been searched on Google by 155 visitors
@@ -67,7 +77,7 @@ require_once PIWIK_INCLUDE_PATH . '/core/Common.php';
  *
  * ---- DataTable_Filter
  * A DataTable_Filter is a applied to a DataTable and so
- * can filter information in the multiple DataTable_Row.
+ * can filter information in the multiple DataTable\Row.
  *
  * For example a DataTable_Filter can:
  * - remove rows from the table,
@@ -132,12 +142,12 @@ require_once PIWIK_INCLUDE_PATH . '/core/Common.php';
  *                        [ keyword2, +1000% ]
  *                        [ keyword3, -430% ]
  *
- * @see Piwik_DataTable_Row A Piwik_DataTable is composed of Piwik_DataTable_Row
+ * @see Piwik_DataTable\Row A DataTable is composed of Piwik_DataTable\Row
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable
+class DataTable
 {
     /** Name for metadata that describes when a report was archived. */
     const ARCHIVED_DATE_METADATA_NAME = 'archived_date';
@@ -151,9 +161,9 @@ class Piwik_DataTable
     private static $maximumDepthLevelAllowed = self::MAX_DEPTH_DEFAULT;
 
     /**
-     * Array of Piwik_DataTable_Row
+     * Array of Row
      *
-     * @var Piwik_DataTable_Row[]
+     * @var Row[]
      */
     protected $rows = array();
 
@@ -197,7 +207,7 @@ class Piwik_DataTable
     protected $tableSortedBy = false;
 
     /**
-     * List of Piwik_DataTable_Filter queued to this table
+     * List of Filter queued to this table
      *
      * @var array
      */
@@ -230,7 +240,7 @@ class Piwik_DataTable
     protected $rowsIndexByLabel = array();
 
     /**
-     * @var Piwik_DataTable_Row
+     * @var \Piwik\DataTable\Row
      */
     protected $summaryRow = null;
 
@@ -251,7 +261,7 @@ class Piwik_DataTable
 
     /**
      * The operations that should be used when aggregating columns from multiple rows.
-     * @see self::addDataTable() and Piwik_DataTable_Row::sumRow()
+     * @see self::addDataTable() and Piwik_DataTable\Row::sumRow()
      */
     protected $columnAggregationOperations = array();
 
@@ -264,7 +274,7 @@ class Piwik_DataTable
      */
     public function __construct()
     {
-        $this->currentId = Piwik_DataTable_Manager::getInstance()->addTable($this);
+        $this->currentId = Manager::getInstance()->addTable($this);
     }
 
     /**
@@ -282,7 +292,7 @@ class Piwik_DataTable
                 Common::destroy($row);
             }
             unset($this->rows);
-            Piwik_DataTable_Manager::getInstance()->setTableDeleted($this->getId());
+            Manager::getInstance()->setTableDeleted($this->getId());
             $depth--;
         }
     }
@@ -302,7 +312,7 @@ class Piwik_DataTable
         if ($this->enableRecursiveSort === true) {
             foreach ($this->getRows() as $row) {
                 if (($idSubtable = $row->getIdSubDataTable()) !== null) {
-                    $table = Piwik_DataTable_Manager::getInstance()->getTable($idSubtable);
+                    $table = Manager::getInstance()->getTable($idSubtable);
                     $table->enableRecursiveSort();
                     $table->sort($functionCallback, $columnSortedBy);
                 }
@@ -363,7 +373,7 @@ class Piwik_DataTable
     /**
      * Apply a filter to this datatable
      *
-     * @param string|Closure $className   Class name, eg. "Sort" or "Piwik_DataTable_Filter_Sort".
+     * @param string|Closure $className   Class name, eg. "Sort" or "Sort".
      *                                    If this variable is a closure, it will get executed immediately.
      * @param array $parameters  Array of parameters to the filter, eg. array('nb_visits', 'asc')
      */
@@ -374,8 +384,8 @@ class Piwik_DataTable
             return;
         }
 
-        if (!class_exists($className, false)) {
-            $className = "Piwik_DataTable_Filter_" . $className;
+        if (!class_exists($className, true)) {
+            $className = 'Piwik\DataTable\Filter\\' . $className;
         }
         $reflectionObj = new ReflectionClass($className);
 
@@ -394,8 +404,8 @@ class Piwik_DataTable
      * Queue a DataTable_Filter that will be applied when applyQueuedFilters() is called.
      * (just before sending the datatable back to the browser (or API, etc.)
      *
-     * @param string $className   The class name of the filter, eg. Piwik_DataTable_Filter_Limit
-     * @param array $parameters  The parameters to give to the filter, eg. array( $offset, $limit) for the filter Piwik_DataTable_Filter_Limit
+     * @param string $className   The class name of the filter, eg. Limit
+     * @param array $parameters  The parameters to give to the filter, eg. array( $offset, $limit) for the filter Limit
      */
     public function queueFilter($className, $parameters = array())
     {
@@ -428,9 +438,9 @@ class Piwik_DataTable
      *
      * @example  tests/core/DataTable.test.php
      *
-     * @param Piwik_DataTable $tableToSum
+     * @param \Piwik\DataTable $tableToSum
      */
-    public function addDataTable(Piwik_DataTable $tableToSum)
+    public function addDataTable(DataTable $tableToSum)
     {
         foreach ($tableToSum->getRows() as $row) {
             $labelToLookFor = $row->getColumn('label');
@@ -449,7 +459,7 @@ class Piwik_DataTable
                 // if the row has the subtable already
                 // then we have to recursively sum the subtables
                 if (($idSubTable = $row->getIdSubDataTable()) !== null) {
-                    $subTable = Piwik_DataTable_Manager::getInstance()->getTable($idSubTable);
+                    $subTable = Manager::getInstance()->getTable($idSubTable);
                     $subTable->setColumnAggregationOperations($this->columnAggregationOperations);
                     $rowFound->sumSubtable($subTable);
                 }
@@ -458,15 +468,15 @@ class Piwik_DataTable
     }
 
     /**
-     * Returns the Piwik_DataTable_Row that has a column 'label' with the value $label
+     * Returns the Row that has a column 'label' with the value $label
      *
      * @param string $label  Value of the column 'label' of the row to return
-     * @return Piwik_DataTable_Row|false  The row if found, false otherwise
+     * @return \Piwik\DataTable\Row|false  The row if found, false otherwise
      */
     public function getRowFromLabel($label)
     {
         $rowId = $this->getRowIdFromLabel($label);
-        if ($rowId instanceof Piwik_DataTable_Row) {
+        if ($rowId instanceof Row) {
             return $rowId;
         }
         if (is_int($rowId) && isset($this->rows[$rowId])) {
@@ -506,11 +516,11 @@ class Piwik_DataTable
      *
      * @param bool $keepFilters
      *
-     * @return Piwik_DataTable
+     * @return \Piwik\DataTable
      */
     public function getEmptyClone($keepFilters = true)
     {
-        $clone = new Piwik_DataTable;
+        $clone = new DataTable;
         if ($keepFilters) {
             $clone->queuedFilters = $this->queuedFilters;
         }
@@ -536,7 +546,7 @@ class Piwik_DataTable
      * Returns the ith row in the array
      *
      * @param int $id
-     * @return Piwik_DataTable_Row or false if not found
+     * @return \Piwik\DataTable\Row or false if not found
      */
     public function getRowFromId($id)
     {
@@ -555,7 +565,7 @@ class Piwik_DataTable
      * Returns a row that has the subtable ID matching the parameter
      *
      * @param int $idSubTable
-     * @return Piwik_DataTable_Row|false if not found
+     * @return \Piwik\DataTable\Row|false if not found
      */
     public function getRowFromIdSubDataTable($idSubTable)
     {
@@ -571,10 +581,10 @@ class Piwik_DataTable
     /**
      * Add a row to the table and rebuild the index if necessary
      *
-     * @param Piwik_DataTable_Row $row  to add at the end of the array
-     * @return Piwik_DataTable_Row
+     * @param \Piwik\DataTable\Row $row  to add at the end of the array
+     * @return \Piwik\DataTable\Row
      */
-    public function addRow(Piwik_DataTable_Row $row)
+    public function addRow(Row $row)
     {
         // if there is a upper limit on the number of allowed rows and the table is full,
         // add the new row to the summary row
@@ -583,8 +593,8 @@ class Piwik_DataTable
         ) {
             if ($this->summaryRow === null) // create the summary row if necessary
             {
-                $this->addSummaryRow(new Piwik_DataTable_Row(array(
-                                                                  Piwik_DataTable_Row::COLUMNS => $row->getColumns()
+                $this->addSummaryRow(new Row(array(
+                                                                  Row::COLUMNS => $row->getColumns()
                                                              )));
                 $this->summaryRow->setColumn('label', self::LABEL_SUMMARY_ROW);
             } else {
@@ -609,10 +619,10 @@ class Piwik_DataTable
     /**
      * Sets the summary row (a dataTable can have only one summary row)
      *
-     * @param Piwik_DataTable_Row $row
-     * @return Piwik_DataTable_Row Returns $row.
+     * @param Row $row
+     * @return Row Returns $row.
      */
-    public function addSummaryRow(Piwik_DataTable_Row $row)
+    public function addSummaryRow(Row $row)
     {
         $this->summaryRow = $row;
         return $row;
@@ -631,7 +641,7 @@ class Piwik_DataTable
     /**
      * Adds a new row from a PHP array data structure
      *
-     * @param array $row  eg. array(Piwik_DataTable_Row::COLUMNS => array( 'visits' => 13, 'test' => 'toto'),)
+     * @param array $row  eg. array(Row::COLUMNS => array( 'visits' => 13, 'test' => 'toto'),)
      */
     public function addRowFromArray($row)
     {
@@ -649,9 +659,9 @@ class Piwik_DataTable
     }
 
     /**
-     * Returns the array of Piwik_DataTable_Row
+     * Returns the array of Row
      *
-     * @return Piwik_DataTable_Row[]
+     * @return Row[]
      */
     public function getRows()
     {
@@ -746,7 +756,7 @@ class Piwik_DataTable
     /**
      * Returns the first row of the DataTable
      *
-     * @return Piwik_DataTable_Row
+     * @return \Piwik\DataTable\Row
      */
     public function getFirstRow()
     {
@@ -763,7 +773,7 @@ class Piwik_DataTable
     /**
      * Returns the last row of the DataTable
      *
-     * @return Piwik_DataTable_Row
+     * @return Row
      */
     public function getLastRow()
     {
@@ -789,7 +799,7 @@ class Piwik_DataTable
         $totalCount = 0;
         foreach ($this->rows as $row) {
             if (($idSubTable = $row->getIdSubDataTable()) !== null) {
-                $subTable = Piwik_DataTable_Manager::getInstance()->getTable($idSubTable);
+                $subTable = Manager::getInstance()->getTable($idSubTable);
                 $count = $subTable->getRowsCountRecursive();
                 $totalCount += $count;
             }
@@ -825,7 +835,7 @@ class Piwik_DataTable
         foreach ($this->getRows() as $row) {
             $row->renameColumn($oldName, $newName);
             if (($idSubDataTable = $row->getIdSubDataTable()) !== null) {
-                Piwik_DataTable_Manager::getInstance()->getTable($idSubDataTable)->renameColumn($oldName, $newName);
+                Manager::getInstance()->getTable($idSubDataTable)->renameColumn($oldName, $newName);
             }
         }
         if (!is_null($this->summaryRow)) {
@@ -846,7 +856,7 @@ class Piwik_DataTable
                 $row->deleteColumn($name);
             }
             if (($idSubDataTable = $row->getIdSubDataTable()) !== null) {
-                Piwik_DataTable_Manager::getInstance()->getTable($idSubDataTable)->deleteColumns($names, $deleteRecursiveInSubtables);
+                Manager::getInstance()->getTable($idSubDataTable)->deleteColumns($names, $deleteRecursiveInSubtables);
             }
         }
         if (!is_null($this->summaryRow)) {
@@ -932,7 +942,7 @@ class Piwik_DataTable
      */
     public function __toString()
     {
-        $renderer = new Piwik_DataTable_Renderer_Html();
+        $renderer = new Html();
         $renderer->setTable($this);
         return (string)$renderer;
     }
@@ -941,11 +951,11 @@ class Piwik_DataTable
      * Returns true if both DataTable are exactly the same.
      * Used in unit tests.
      *
-     * @param Piwik_DataTable $table1
-     * @param Piwik_DataTable $table2
+     * @param \Piwik\DataTable $table1
+     * @param \Piwik\DataTable $table2
      * @return bool
      */
-    public static function isEqual(Piwik_DataTable $table1, Piwik_DataTable $table2)
+    public static function isEqual(DataTable $table1, DataTable $table2)
     {
         $rows1 = $table1->getRows();
         $rows2 = $table2->getRows();
@@ -960,7 +970,7 @@ class Piwik_DataTable
         foreach ($rows1 as $row1) {
             $row2 = $table2->getRowFromLabel($row1->getColumn('label'));
             if ($row2 === false
-                || !Piwik_DataTable_Row::isEqual($row1, $row2)
+                || !Row::isEqual($row1, $row2)
             ) {
                 return false;
             }
@@ -1010,12 +1020,12 @@ class Piwik_DataTable
 
         if ($depth > self::$maximumDepthLevelAllowed) {
             $depth = 0;
-            throw new Exception("Maximum recursion level of " . self::$maximumDepthLevelAllowed . " reached. Maybe you have set a DataTable_Row with an associated DataTable belonging already to one of its parent tables?");
+            throw new Exception("Maximum recursion level of " . self::$maximumDepthLevelAllowed . " reached. Maybe you have set a DataTable\Row with an associated DataTable belonging already to one of its parent tables?");
         }
         if (!is_null($maximumRowsInDataTable)) {
             $this->filter('AddSummaryRow',
                 array($maximumRowsInDataTable - 1,
-                      Piwik_DataTable::LABEL_SUMMARY_ROW,
+                      DataTable::LABEL_SUMMARY_ROW,
                       $columnToSortByBeforeTruncation)
             );
         }
@@ -1026,7 +1036,7 @@ class Piwik_DataTable
         $aSerializedDataTable = array();
         foreach ($this->rows as $row) {
             if (($idSubTable = $row->getIdSubDataTable()) !== null) {
-                $subTable = Piwik_DataTable_Manager::getInstance()->getTable($idSubTable);
+                $subTable = Manager::getInstance()->getTable($idSubTable);
                 $depth++;
                 $aSerializedDataTable = $aSerializedDataTable + $subTable->getSerialized($maximumRowsInSubDataTable, $maximumRowsInSubDataTable, $columnToSortByBeforeTruncation);
                 $depth--;
@@ -1057,7 +1067,7 @@ class Piwik_DataTable
      * Does not load recursively all the sub DataTable.
      * They will be loaded only when requesting them specifically.
      *
-     * The function creates all the necessary DataTable_Row
+     * The function creates all the necessary DataTable\Row
      *
      * @param string $stringSerialized  string of serialized datatable
      * @throws Exception
@@ -1078,8 +1088,8 @@ class Piwik_DataTable
      *                       array(
      *                             // row1
      *                             array(
-     *                                   Piwik_DataTable_Row::COLUMNS => array( col1_name => value1, col2_name => value2, ...),
-     *                                   Piwik_DataTable_Row::METADATA => array( metadata1_name => value1,  ...), // see Piwik_DataTable_Row
+     *                                   Row::COLUMNS => array( col1_name => value1, col2_name => value2, ...),
+     *                                   Row::METADATA => array( metadata1_name => value1,  ...), // see Row
      *                             ),
      *                             // row2
      *                             array( ... ),
@@ -1089,7 +1099,7 @@ class Piwik_DataTable
     {
         foreach ($array as $id => $row) {
             if (is_array($row)) {
-                $row = new Piwik_DataTable_Row($row);
+                $row = new Row($row);
             }
             if ($id == self::ID_SUMMARY_ROW) {
                 $this->summaryRow = $row;
@@ -1140,10 +1150,10 @@ class Piwik_DataTable
             // case when the array is indexed by the default numeric index
             if (array_keys($array) == array_keys(array_fill(0, count($array), true))) {
                 foreach ($array as $row) {
-                    $this->addRow(new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array($row))));
+                    $this->addRow(new Row(array(Row::COLUMNS => array($row))));
                 }
             } else {
-                $this->addRow(new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => $array)));
+                $this->addRow(new Row(array(Row::COLUMNS => $array)));
             }
             // we have converted our simple array to one single row
             // => we exit the method as the job is now finished
@@ -1171,10 +1181,10 @@ class Piwik_DataTable
                         throw $e;
                     }
                 }
-                $row = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => $row));
+                $row = new Row(array(Row::COLUMNS => $row));
             } // other (string, numbers...) => we build a line from this value
             else {
-                $row = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array($key => $row)));
+                $row = new Row(array(Row::COLUMNS => array($key => $row)));
             }
             $this->addRow($row);
         }
@@ -1188,8 +1198,8 @@ class Piwik_DataTable
      * )
      * to a DataTable, ie. with the internal structure
      * array (
-     *     array( Piwik_DataTable_Row::COLUMNS => array('label' => LABEL, col1 => X, col2 => Y)),
-     *     array( Piwik_DataTable_Row::COLUMNS => array('label' => LABEL2, col1 => X, col2 => Y)),
+     *     array( Row::COLUMNS => array('label' => LABEL, col1 => X, col2 => Y)),
+     *     array( Row::COLUMNS => array('label' => LABEL2, col1 => X, col2 => Y)),
      * )
      *
      * It also works with array having only one value per row, eg.
@@ -1199,18 +1209,18 @@ class Piwik_DataTable
      * )
      * would be converted to:
      * array (
-     *     array( Piwik_DataTable_Row::COLUMNS => array('label' => LABEL, 'value' => X)),
-     *     array( Piwik_DataTable_Row::COLUMNS => array('label' => LABEL2, 'value' => Y)),
+     *     array( Row::COLUMNS => array('label' => LABEL, 'value' => X)),
+     *     array( Row::COLUMNS => array('label' => LABEL2, 'value' => Y)),
      * )
      *
      *
      * @param array $array Indexed array, two formats are supported
      * @param array|null $subtablePerLabel An indexed array of up to one DataTable to associate as a sub table
-     * @return Piwik_DataTable
+     * @return \Piwik\DataTable
      */
     public static function makeFromIndexedArray($array, $subtablePerLabel = null)
     {
-        $table = new Piwik_DataTable();
+        $table = new DataTable();
         $cleanRow = array();
         foreach ($array as $label => $row) {
             // Support the case of an $array of single values
@@ -1218,12 +1228,12 @@ class Piwik_DataTable
                 $row = array('value' => $row);
             }
             // Put the 'label' column first
-            $cleanRow[Piwik_DataTable_Row::COLUMNS] = array('label' => $label) + $row;
+            $cleanRow[Row::COLUMNS] = array('label' => $label) + $row;
             // Assign subtable if specified
             if (isset($subtablePerLabel[$label])) {
-                $cleanRow[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] = $subtablePerLabel[$label];
+                $cleanRow[Row::DATATABLE_ASSOCIATED] = $subtablePerLabel[$label];
             }
-            $table->addRow(new Piwik_DataTable_Row($cleanRow));
+            $table->addRow(new Row($cleanRow));
         }
         return $table;
     }
@@ -1326,7 +1336,7 @@ class Piwik_DataTable
                     return array(false, $i);
                 } else // if we're adding missing rows, add a new row
                 {
-                    $row = new Piwik_DataTable_Row_DataTableSummary();
+                    $row = new DataTableSummaryRow();
                     $row->setColumns(array('label' => $segment) + $missingRowColumns);
 
                     $next = $table->addRow($row);
@@ -1348,7 +1358,7 @@ class Piwik_DataTable
                     return array(false, $i);
                 } else if ($i != $pathLength - 1) // create subtable if missing, but only if not on the last segment
                 {
-                    $table = new Piwik_DataTable();
+                    $table = new DataTable();
                     $table->setMaximumAllowedRows($maxSubtableRows);
                     $table->setColumnAggregationOperations($this->columnAggregationOperations);
                     $next->setSubtable($table);
@@ -1371,11 +1381,11 @@ class Piwik_DataTable
      * @param bool $useMetadataColumn If true and if $labelColumn is supplied, the parent row's
      *                                        label will be added as metadata.
      *
-     * @return Piwik_DataTable
+     * @return \Piwik\DataTable
      */
     public function mergeSubtables($labelColumn = false, $useMetadataColumn = false)
     {
-        $result = new Piwik_DataTable();
+        $result = new DataTable();
         foreach ($this->getRows() as $row) {
             $subtable = $row->getSubtable();
             if ($subtable !== false) {
@@ -1423,18 +1433,18 @@ class Piwik_DataTable
      * Returns a new DataTable created with data from a 'simple' array.
      *
      * @param array $array
-     * @return Piwik_DataTable
+     * @return \Piwik\DataTable
      */
     public static function makeFromSimpleArray($array)
     {
-        $dataTable = new Piwik_DataTable();
+        $dataTable = new DataTable();
         $dataTable->addRowsFromSimpleArray($array);
         return $dataTable;
     }
 
     /**
      * Set the aggregation operation for a column, e.g. "min".
-     * @see self::addDataTable() and Piwik_DataTable_Row::sumRow()
+     * @see self::addDataTable() and Piwik_DataTable\Row::sumRow()
      *
      * @param string $columnName
      * @param string $operation
@@ -1467,11 +1477,11 @@ class Piwik_DataTable
      * Creates a new DataTable instance from a serialize()'d array of rows.
      *
      * @param string $data
-     * @return Piwik_DataTable
+     * @return \Piwik\DataTable
      */
     public static function fromSerializedArray($data)
     {
-        $result = new Piwik_DataTable();
+        $result = new DataTable();
         $result->addRowsFromSerializedArray($data);
         return $result;
     }
diff --git a/core/DataTable/Filter.php b/core/DataTable/Filter.php
index 455c5aa6e7750e49e9443885581a857e85882947..43cb33f2a04cef7b890a569932b69b359a1f43a2 100644
--- a/core/DataTable/Filter.php
+++ b/core/DataTable/Filter.php
@@ -8,6 +8,12 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable;
+
+use Exception;
+use Piwik\DataTable;
+use Piwik\DataTable\Manager;
+use Piwik\DataTable\Row;
 
 /**
  * A filter is applied instantly to a given DataTable and can
@@ -21,9 +27,9 @@
  * and can do whatever is necessary on the data (in the filter() method).
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-abstract class Piwik_DataTable_Filter
+abstract class Filter
 {
     /**
      * @var bool
@@ -32,19 +38,19 @@ abstract class Piwik_DataTable_Filter
 
     /**
      * @throws Exception
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function __construct($table)
     {
-        if (!($table instanceof Piwik_DataTable)) {
-            throw new Exception("The filter accepts only a Piwik_DataTable object.");
+        if (!($table instanceof DataTable)) {
+            throw new Exception("The filter accepts only a DataTable object.");
         }
     }
 
     /**
      * Filters the given data table
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     abstract public function filter($table);
 
@@ -61,16 +67,16 @@ abstract class Piwik_DataTable_Filter
     /**
      * Filters a subtable
      *
-     * @param Piwik_DataTable_Row $row
+     * @param Row $row
      * @return mixed
      */
-    public function filterSubTable(Piwik_DataTable_Row $row)
+    public function filterSubTable(Row $row)
     {
         if (!$this->enableRecursive) {
             return;
         }
         if ($row->isSubtableLoaded()) {
-            $subTable = Piwik_DataTable_Manager::getInstance()->getTable($row->getIdSubDataTable());
+            $subTable = Manager::getInstance()->getTable($row->getIdSubDataTable());
             $this->filter($subTable);
         }
     }
diff --git a/core/DataTable/Filter/AddColumnsProcessedMetrics.php b/core/DataTable/Filter/AddColumnsProcessedMetrics.php
index 73baf7aaa91bc652228478c4ed52084eca044364..dc41dacdc7feebccd17492320acce9bfc1b9f543 100644
--- a/core/DataTable/Filter/AddColumnsProcessedMetrics.php
+++ b/core/DataTable/Filter/AddColumnsProcessedMetrics.php
@@ -8,22 +8,27 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable\Filter;
+use Piwik\DataTable\Row;
 use Piwik\Metrics;
+use Piwik\DataTable;
 
 /**
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_AddColumnsProcessedMetrics extends Piwik_DataTable_Filter
+class AddColumnsProcessedMetrics extends Filter
 {
     protected $invalidDivision = 0;
     protected $roundPrecision = 2;
     protected $deleteRowsWithNoVisit = true;
 
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param bool $deleteRowsWithNoVisit  Automatically set to true when filter_add_columns_when_show_all_columns is found in the API request
-     * @return Piwik_DataTable_Filter_AddColumnsProcessedMetrics
+     * @return AddColumnsProcessedMetrics
      */
     public function __construct($table, $deleteRowsWithNoVisit = true)
     {
@@ -34,7 +39,7 @@ class Piwik_DataTable_Filter_AddColumnsProcessedMetrics extends Piwik_DataTable_
     /**
      * Filters the given data table
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
@@ -97,7 +102,7 @@ class Piwik_DataTable_Filter_AddColumnsProcessedMetrics extends Piwik_DataTable_
      * - raw datatables coming from the archive DB, which columns are int indexed
      * - datatables processed resulting of API calls, which columns have human readable english names
      *
-     * @param Piwik_DataTable_Row $row
+     * @param Row $row
      * @param int $columnIdRaw see consts in Archive::
      * @param bool $mappingIdToName
      * @return mixed  Value of column, false if not found
@@ -108,7 +113,7 @@ class Piwik_DataTable_Filter_AddColumnsProcessedMetrics extends Piwik_DataTable_
             $mappingIdToName = Metrics::$mappingFromIdToName;
         }
         $columnIdReadable = $mappingIdToName[$columnIdRaw];
-        if ($row instanceof Piwik_DataTable_Row) {
+        if ($row instanceof Row) {
             $raw = $row->getColumn($columnIdRaw);
             if ($raw !== false) {
                 return $raw;
diff --git a/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php b/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php
index 99d822bbd069e08e1629f0a6583a60e342d73784..422df1adcf1a4c7b57a153918dbe904a14e9f617 100644
--- a/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php
+++ b/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php
@@ -8,14 +8,19 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Exception;
 use Piwik\Metrics;
 use Piwik\Piwik;
+use Piwik\DataTable;
+use Piwik\DataTable\Filter\AddColumnsProcessedMetrics;
 
 /**
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal extends Piwik_DataTable_Filter_AddColumnsProcessedMetrics
+class AddColumnsProcessedMetricsGoal extends AddColumnsProcessedMetrics
 {
     /**
      * Process main goal metrics: conversion rate, revenue per visit
@@ -41,13 +46,13 @@ class Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal extends Piwik_DataTa
      * - nb conversions
      * - revenue per visit
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param bool $enable             should be true (automatically set to true when filter_update_columns_when_show_all_goals is found in the API request)
      * @param string $processOnlyIdGoal  Defines what metrics to add (don't process metrics when you don't display them)
      *                                             If self::GOALS_FULL_TABLE, all Goal metrics (and per goal metrics) will be processed
      *                                             If self::GOALS_OVERVIEW, only the main goal metrics will be added
      *                                             If an int > 0, then will process only metrics for this specific Goal
-     * @return Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal
+     * @return \Piwik\DataTable\Filter\AddColumnsProcessedMetricsGoal
      */
     public function __construct($table, $enable = true, $processOnlyIdGoal)
     {
@@ -61,13 +66,13 @@ class Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal extends Piwik_DataTa
     /**
      * Filters the given data table
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
         // Add standard processed metrics
         parent::filter($table);
-        $roundingPrecision = Piwik_Tracker_GoalManager::REVENUE_PRECISION;
+        $roundingPrecision = \Piwik_Tracker_GoalManager::REVENUE_PRECISION;
         $expectedColumns = array();
         foreach ($table->getRows() as $key => $row) {
             $currentColumns = $row->getColumns();
diff --git a/core/DataTable/Filter/AddConstantMetadata.php b/core/DataTable/Filter/AddConstantMetadata.php
index 4bff5aa813cf0714307d7e02e217749f55aec84f..f3682f5b10659dd6e8617f5f2da710b5cbcd62e4 100644
--- a/core/DataTable/Filter/AddConstantMetadata.php
+++ b/core/DataTable/Filter/AddConstantMetadata.php
@@ -8,6 +8,10 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
 
 /**
  * Add a new metadata column to the table.
@@ -16,14 +20,14 @@
  * This value is fixed for all icons so we simply add the same value for all rows.
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_AddConstantMetadata extends Piwik_DataTable_Filter
+class AddConstantMetadata extends Filter
 {
     /**
      * Creates a new filter and sets all required parameters
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param string $metadataName
      * @param mixed $metadataValue
      */
@@ -37,7 +41,7 @@ class Piwik_DataTable_Filter_AddConstantMetadata extends Piwik_DataTable_Filter
     /**
      * Filters the given data table
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
diff --git a/core/DataTable/Filter/AddSummaryRow.php b/core/DataTable/Filter/AddSummaryRow.php
index ca0cb1882f36776a1b07414dbf778cc8d7231b67..12504fa033d46121c78e7c276cf9e9643a33848c 100644
--- a/core/DataTable/Filter/AddSummaryRow.php
+++ b/core/DataTable/Filter/AddSummaryRow.php
@@ -8,6 +8,11 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
+use Piwik\DataTable\Row;
 
 /**
  * Add a new row to the table containing a summary
@@ -23,14 +28,14 @@
  * This row is assigned a label of 'Others'.
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_AddSummaryRow extends Piwik_DataTable_Filter
+class AddSummaryRow extends Filter
 {
     /**
      * Creates a new filter and set all required parameters
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param int $startRowToSummarize
      * @param int $labelSummaryRow
      * @param null $columnToSortByBeforeTruncating
@@ -38,7 +43,7 @@ class Piwik_DataTable_Filter_AddSummaryRow extends Piwik_DataTable_Filter
      */
     public function __construct($table,
                                 $startRowToSummarize,
-                                $labelSummaryRow = Piwik_DataTable::LABEL_SUMMARY_ROW,
+                                $labelSummaryRow = DataTable::LABEL_SUMMARY_ROW,
                                 $columnToSortByBeforeTruncating = null,
                                 $deleteRows = true)
     {
@@ -52,7 +57,7 @@ class Piwik_DataTable_Filter_AddSummaryRow extends Piwik_DataTable_Filter
     /**
      * Adds a summary row to the given data table
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
@@ -62,14 +67,14 @@ class Piwik_DataTable_Filter_AddSummaryRow extends Piwik_DataTable_Filter
         if ($table->getRowsCount() <= $this->startRowToSummarize + 1) {
             return;
         }
-        
+
         $rows = $table->getRows();
         $count = $table->getRowsCount();
-        $newRow = new Piwik_DataTable_Row();
+        $newRow = new Row();
         for ($i = $this->startRowToSummarize; $i < $count; $i++) {
             if (!isset($rows[$i])) {
-                // case when the last row is a summary row, it is not indexed by $cout but by Piwik_DataTable::ID_SUMMARY_ROW
-                $summaryRow = $table->getRowFromId(Piwik_DataTable::ID_SUMMARY_ROW);
+                // case when the last row is a summary row, it is not indexed by $cout but by DataTable::ID_SUMMARY_ROW
+                $summaryRow = $table->getRowFromId(DataTable::ID_SUMMARY_ROW);
 
                 //FIXME: I'm not sure why it could return false, but it was reported in: http://forum.piwik.org/read.php?2,89324,page=1#msg-89442
                 if ($summaryRow) {
diff --git a/core/DataTable/Filter/BeautifyRangeLabels.php b/core/DataTable/Filter/BeautifyRangeLabels.php
index 329bcf330870077dee239605134adf1f5feef67f..5e2c0c1336dee776560b61278564ab34b7a41211 100644
--- a/core/DataTable/Filter/BeautifyRangeLabels.php
+++ b/core/DataTable/Filter/BeautifyRangeLabels.php
@@ -8,6 +8,10 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter\ColumnCallbackReplace;
 
 /**
  * A DataTable filter that replaces range label columns with prettier,
@@ -26,7 +30,7 @@
  * This filter can also be extended to beautify ranges differently based
  * on the range values.
  */
-class Piwik_DataTable_Filter_BeautifyRangeLabels extends Piwik_DataTable_Filter_ColumnCallbackReplace
+class BeautifyRangeLabels extends ColumnCallbackReplace
 {
     /**
      * The string to use when the range being beautified is between 1-1 units.
@@ -44,7 +48,7 @@ class Piwik_DataTable_Filter_BeautifyRangeLabels extends Piwik_DataTable_Filter_
     /**
      * Constructor.
      *
-     * @param Piwik_DataTable $table          The DataTable that will be filtered.
+     * @param DataTable $table          The DataTable that will be filtered.
      * @param string $labelSingular  The string to use when the range being beautified
      *                                         is equal to '1-1 units'.
      * @param string $labelPlural    The string to use when the range being beautified
@@ -85,7 +89,7 @@ class Piwik_DataTable_Filter_BeautifyRangeLabels extends Piwik_DataTable_Filter_
             // get the lower bound
             sscanf($value, "%d", $lowerBound);
 
-            if ($lowerBound !== NULL) {
+            if ($lowerBound !== null) {
                 $plusEncoded = urlencode('+');
                 $plusLen = strlen($plusEncoded);
                 $len = strlen($value);
diff --git a/core/DataTable/Filter/BeautifyTimeRangeLabels.php b/core/DataTable/Filter/BeautifyTimeRangeLabels.php
index 1a2dffce5aaa7b11984890085fbb7b6e4ac026ec..f8fcb59b77b7cf3354ddc7c928276dc59c952653 100644
--- a/core/DataTable/Filter/BeautifyTimeRangeLabels.php
+++ b/core/DataTable/Filter/BeautifyTimeRangeLabels.php
@@ -8,6 +8,10 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter\BeautifyRangeLabels;
 
 /**
  * A DataTable filter replaces range labels that are in seconds with
@@ -17,7 +21,7 @@
  * so range values that span values that are less than one minute are
  * displayed in seconds but other ranges are displayed in minutes.
  */
-class Piwik_DataTable_Filter_BeautifyTimeRangeLabels extends Piwik_DataTable_Filter_BeautifyRangeLabels
+class BeautifyTimeRangeLabels extends BeautifyRangeLabels
 {
     /**
      * A format string used to create pretty range labels when the range's
@@ -31,7 +35,7 @@ class Piwik_DataTable_Filter_BeautifyTimeRangeLabels extends Piwik_DataTable_Fil
     /**
      * Constructor.
      *
-     * @param Piwik_DataTable $table                 The DataTable this filter will run over.
+     * @param DataTable $table                 The DataTable this filter will run over.
      * @param string $labelSecondsPlural    A string to use when beautifying range labels
      *                                                whose lower bound is between 0 and 60. Must be
      *                                                a format string that takes two numeric params.
diff --git a/core/DataTable/Filter/CalculateEvolutionFilter.php b/core/DataTable/Filter/CalculateEvolutionFilter.php
index e38fb9313669cb94aa0f728231dfaeb703acd722..f8d5886d25d80a0bb05a53a5dd4f7bc88da0f479 100755
--- a/core/DataTable/Filter/CalculateEvolutionFilter.php
+++ b/core/DataTable/Filter/CalculateEvolutionFilter.php
@@ -8,7 +8,12 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Row;
 use Piwik\Site;
+use Piwik\DataTable\Filter\ColumnCallbackAddColumnPercentage;
 
 /**
  * A DataTable filter that calculates the evolution of a metric and adds
@@ -21,7 +26,7 @@ use Piwik\Site;
  * The evolution metric is calculated as:
  * <code>((currentValue - pastValue) / pastValue) * 100</code>
  */
-class Piwik_DataTable_Filter_CalculateEvolutionFilter extends Piwik_DataTable_Filter_ColumnCallbackAddColumnPercentage
+class CalculateEvolutionFilter extends ColumnCallbackAddColumnPercentage
 {
     /**
      * The the DataTable that contains past data.
@@ -36,11 +41,11 @@ class Piwik_DataTable_Filter_CalculateEvolutionFilter extends Piwik_DataTable_Fi
     /**
      * Constructor.
      *
-     * @param Piwik_DataTable $table The DataTable being filtered.
-     * @param string          $pastDataTable
-     * @param string          $columnToAdd
-     * @param string          $columnToRead
-     * @param int             $quotientPrecision
+     * @param DataTable $table The DataTable being filtered.
+     * @param string $pastDataTable
+     * @param string $columnToAdd
+     * @param string $columnToRead
+     * @param int $quotientPrecision
      */
     function __construct($table, $pastDataTable, $columnToAdd, $columnToRead, $quotientPrecision = 0)
     {
@@ -56,7 +61,7 @@ class Piwik_DataTable_Filter_CalculateEvolutionFilter extends Piwik_DataTable_Fi
      * Returns the difference between the column in the specific row and its
      * sister column in the past DataTable.
      *
-     * @param Piwik_DataTable_Row $row
+     * @param Row $row
      * @return int|float
      */
     protected function getDividend($row)
@@ -86,7 +91,7 @@ class Piwik_DataTable_Filter_CalculateEvolutionFilter extends Piwik_DataTable_Fi
      * Returns the value of the column in $row's sister row in the past
      * DataTable.
      *
-     * @param Piwik_DataTable_Row $row
+     * @param Row $row
      * @return int|float
      */
     protected function getDivisor($row)
@@ -100,7 +105,7 @@ class Piwik_DataTable_Filter_CalculateEvolutionFilter extends Piwik_DataTable_Fi
     /**
      * Calculates and formats a quotient based on a divisor and dividend.
      *
-     * Unlike Piwik_DataTable_Filter_ColumnCallbackAddColumnPercentage's,
+     * Unlike ColumnCallbackAddColumnPercentage's,
      * version of this method, this method will return 100% if the past
      * value of a metric is 0, and the current value is not 0. For a
      * value representative of an evolution, this makes sense.
@@ -119,7 +124,7 @@ class Piwik_DataTable_Filter_CalculateEvolutionFilter extends Piwik_DataTable_Fi
     /**
      * Utility function. Returns the current row in the past DataTable.
      *
-     * @param Piwik_DataTable_Row $row The row in the 'current' DataTable.
+     * @param Row $row The row in the 'current' DataTable.
      */
     private function getPastRowFromCurrent($row)
     {
@@ -129,10 +134,10 @@ class Piwik_DataTable_Filter_CalculateEvolutionFilter extends Piwik_DataTable_Fi
     /**
      * Calculates the evolution percentage for two arbitrary values.
      *
-     * @param float|int  $currentValue      The current metric value.
-     * @param float|int  $pastValue         The value of the metric in the past. We measure the % change
+     * @param float|int $currentValue      The current metric value.
+     * @param float|int $pastValue         The value of the metric in the past. We measure the % change
      *                                      from this value to $currentValue.
-     * @param float|int  $quotientPrecision The quotient precision to round to.
+     * @param float|int $quotientPrecision The quotient precision to round to.
      *
      * @return string The evolution percent 15%
      */
diff --git a/core/DataTable/Filter/ColumnCallbackAddColumn.php b/core/DataTable/Filter/ColumnCallbackAddColumn.php
index 4aa8b008e4e5ffbe31c34b5664766511dd775e0b..e65ab52e40451bb9ac6b3f44273753e083b39d3c 100755
--- a/core/DataTable/Filter/ColumnCallbackAddColumn.php
+++ b/core/DataTable/Filter/ColumnCallbackAddColumn.php
@@ -8,14 +8,18 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
 
 /**
  * Adds a new column to every row of a DataTable based on the result of callback.
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_ColumnCallbackAddColumn extends Piwik_DataTable_Filter
+class ColumnCallbackAddColumn extends Filter
 {
     /**
      * The names of the columns to pass to the callback.
@@ -41,7 +45,7 @@ class Piwik_DataTable_Filter_ColumnCallbackAddColumn extends Piwik_DataTable_Fil
     /**
      * Constructor.
      *
-     * @param Piwik_DataTable $table               The DataTable that will be filtered.
+     * @param DataTable $table               The DataTable that will be filtered.
      * @param array|string $columns             The names of the columns to pass to the callback.
      * @param string $columnToAdd         The name of the column to add.
      * @param mixed $functionToApply     The callback to apply to each row of a DataTable.
@@ -65,7 +69,7 @@ class Piwik_DataTable_Filter_ColumnCallbackAddColumn extends Piwik_DataTable_Fil
      * Executes a callback on every row of the supplied table and adds the result of
      * the callback as a new column to each row.
      *
-     * @param Piwik_DataTable $table  The table to filter.
+     * @param DataTable $table  The table to filter.
      */
     public function filter($table)
     {
diff --git a/core/DataTable/Filter/ColumnCallbackAddColumnPercentage.php b/core/DataTable/Filter/ColumnCallbackAddColumnPercentage.php
index 5ac99ce678af65364ba5ae78011d87d91540b04c..92ad07185c5e422d95e635ab4158111e0c6e141d 100644
--- a/core/DataTable/Filter/ColumnCallbackAddColumnPercentage.php
+++ b/core/DataTable/Filter/ColumnCallbackAddColumnPercentage.php
@@ -8,7 +8,10 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
 use Piwik\Piwik;
+use Piwik\DataTable\Filter\ColumnCallbackAddColumnQuotient;
 
 /**
  * Add a new column to the table which is a percentage based on the value resulting
@@ -23,9 +26,9 @@ use Piwik\Piwik;
  *   $dataTable->queueFilter('ColumnCallbackAddColumnPercentage', array('nb_visits', 'nb_visits_percentage', $nbVisits, 1));
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_ColumnCallbackAddColumnPercentage extends Piwik_DataTable_Filter_ColumnCallbackAddColumnQuotient
+class ColumnCallbackAddColumnPercentage extends ColumnCallbackAddColumnQuotient
 {
     /**
      * Formats the given value
diff --git a/core/DataTable/Filter/ColumnCallbackAddColumnQuotient.php b/core/DataTable/Filter/ColumnCallbackAddColumnQuotient.php
index b5573bb73115b082031c949b26c6425d2a4bf18a..4e95a8a9a200623d186dece71b52536c46ff7509 100644
--- a/core/DataTable/Filter/ColumnCallbackAddColumnQuotient.php
+++ b/core/DataTable/Filter/ColumnCallbackAddColumnQuotient.php
@@ -8,15 +8,20 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
+use Piwik\DataTable\Row;
 
 /**
  * Adds a new column that is a division of two columns of the current row.
  * Useful to process bounce rates, exit rates, average time on page, etc.
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_ColumnCallbackAddColumnQuotient extends Piwik_DataTable_Filter
+class ColumnCallbackAddColumnQuotient extends Filter
 {
     protected $table;
     protected $columnValueToRead;
@@ -28,7 +33,7 @@ class Piwik_DataTable_Filter_ColumnCallbackAddColumnQuotient extends Piwik_DataT
     protected $getDivisorFromSummaryRow;
 
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param string $columnNameToAdd
      * @param string $columnValueToRead
      * @param number|string $divisorValueOrDivisorColumnName
@@ -57,7 +62,7 @@ class Piwik_DataTable_Filter_ColumnCallbackAddColumnQuotient extends Piwik_DataT
     /**
      * Filters the given data table
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
@@ -101,7 +106,7 @@ class Piwik_DataTable_Filter_ColumnCallbackAddColumnQuotient extends Piwik_DataT
      * Returns the dividend to use when calculating the new column value. Can
      * be overridden by descendent classes to customize behavior.
      *
-     * @param Piwik_DataTable_Row $row  The row being modified.
+     * @param Row $row  The row being modified.
      * @return int|float
      */
     protected function getDividend($row)
@@ -113,7 +118,7 @@ class Piwik_DataTable_Filter_ColumnCallbackAddColumnQuotient extends Piwik_DataT
      * Returns the divisor to use when calculating the new column value. Can
      * be overridden by descendent classes to customize behavior.
      *
-     * @param Piwik_DataTable_Row $row  The row being modified.
+     * @param Row $row  The row being modified.
      * @return int|float
      */
     protected function getDivisor($row)
@@ -121,7 +126,7 @@ class Piwik_DataTable_Filter_ColumnCallbackAddColumnQuotient extends Piwik_DataT
         if (!is_null($this->totalValueUsedAsDivisor)) {
             return $this->totalValueUsedAsDivisor;
         } else if ($this->getDivisorFromSummaryRow) {
-            $summaryRow = $this->table->getRowFromId(Piwik_DataTable::ID_SUMMARY_ROW);
+            $summaryRow = $this->table->getRowFromId(DataTable::ID_SUMMARY_ROW);
             return $summaryRow->getColumn($this->columnNameUsedAsDivisor);
         } else {
             return $row->getColumn($this->columnNameUsedAsDivisor);
diff --git a/core/DataTable/Filter/ColumnCallbackAddMetadata.php b/core/DataTable/Filter/ColumnCallbackAddMetadata.php
index b181f4c177eae86dd552a3afac771724570939cc..166c9e740a41a919afeaf103ba231fc15f0c9e6a 100644
--- a/core/DataTable/Filter/ColumnCallbackAddMetadata.php
+++ b/core/DataTable/Filter/ColumnCallbackAddMetadata.php
@@ -8,6 +8,10 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
 
 /**
  * Add a new 'metadata' column to the table based on the value resulting
@@ -17,9 +21,9 @@
  * with the icon URI built from the label (LINUX => UserSettings/icons/linux.png)
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_ColumnCallbackAddMetadata extends Piwik_DataTable_Filter
+class ColumnCallbackAddMetadata extends Filter
 {
     private $columnsToRead;
     private $functionToApply;
@@ -28,12 +32,12 @@ class Piwik_DataTable_Filter_ColumnCallbackAddMetadata extends Piwik_DataTable_F
     private $applyToSummaryRow;
 
     /**
-     * @param Piwik_DataTable $table
-     * @param string|array    $columnsToRead
-     * @param string          $metadataToAdd
-     * @param string          $functionToApply
-     * @param array           $functionParameters
-     * @param bool            $applyToSummaryRow
+     * @param DataTable $table
+     * @param string|array $columnsToRead
+     * @param string $metadataToAdd
+     * @param string $functionToApply
+     * @param array $functionParameters
+     * @param bool $applyToSummaryRow
      */
     public function __construct($table, $columnsToRead, $metadataToAdd, $functionToApply = null,
                                 $functionParameters = null, $applyToSummaryRow = true)
@@ -54,12 +58,12 @@ class Piwik_DataTable_Filter_ColumnCallbackAddMetadata extends Piwik_DataTable_F
     /**
      * Filters the given data table
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
         foreach ($table->getRows() as $key => $row) {
-            if (!$this->applyToSummaryRow && $key == Piwik_DataTable::ID_SUMMARY_ROW) {
+            if (!$this->applyToSummaryRow && $key == DataTable::ID_SUMMARY_ROW) {
                 continue;
             }
 
diff --git a/core/DataTable/Filter/ColumnCallbackDeleteRow.php b/core/DataTable/Filter/ColumnCallbackDeleteRow.php
index dbe0684cf8fefd078481eb7937251e7d612565d4..66c0eded796330ed3913223ed451d3a4625c59db 100644
--- a/core/DataTable/Filter/ColumnCallbackDeleteRow.php
+++ b/core/DataTable/Filter/ColumnCallbackDeleteRow.php
@@ -8,21 +8,25 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
 
 /**
  * Delete all rows for which a given function returns false for a given column.
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_ColumnCallbackDeleteRow extends Piwik_DataTable_Filter
+class ColumnCallbackDeleteRow extends Filter
 {
     private $columnToFilter;
     private $function;
     private $functionParams;
 
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param string $columnToFilter
      * @param callback $function
      * @param array $functionParams
@@ -43,7 +47,7 @@ class Piwik_DataTable_Filter_ColumnCallbackDeleteRow extends Piwik_DataTable_Fil
     /**
      * Filters the given data table
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
diff --git a/core/DataTable/Filter/ColumnCallbackReplace.php b/core/DataTable/Filter/ColumnCallbackReplace.php
index f1c2d65f3a6cbf0f53685fb03fc32b9fffd293fa..4b2110eff3ac1b7cd387ef549763450813ac631d 100644
--- a/core/DataTable/Filter/ColumnCallbackReplace.php
+++ b/core/DataTable/Filter/ColumnCallbackReplace.php
@@ -8,15 +8,21 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
+use Piwik\DataTable\Row;
+use Piwik\Piwik;
 
 /**
  * Replace a column value with a new value resulting
  * from the function called with the column's value
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_ColumnCallbackReplace extends Piwik_DataTable_Filter
+class ColumnCallbackReplace extends Filter
 {
     private $columnsToFilter;
     private $functionToApply;
@@ -24,7 +30,7 @@ class Piwik_DataTable_Filter_ColumnCallbackReplace extends Piwik_DataTable_Filte
     private $extraColumnParameters;
 
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param array|string $columnsToFilter
      * @param callback $functionToApply
      * @param array|null $functionParameters
@@ -48,7 +54,7 @@ class Piwik_DataTable_Filter_ColumnCallbackReplace extends Piwik_DataTable_Filte
     /**
      * Filters the given data table
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
@@ -79,7 +85,7 @@ class Piwik_DataTable_Filter_ColumnCallbackReplace extends Piwik_DataTable_Filte
     /**
      * Replaces the given column within given row with the given value
      *
-     * @param Piwik_DataTable_Row $row
+     * @param Row $row
      * @param string $columnToFilter
      * @param mixed $newValue
      */
@@ -91,7 +97,7 @@ class Piwik_DataTable_Filter_ColumnCallbackReplace extends Piwik_DataTable_Filte
     /**
      * Returns the element that should be replaced
      *
-     * @param Piwik_DataTable_Row $row
+     * @param Row $row
      * @param string $columnToFilter
      * @return mixed
      */
diff --git a/core/DataTable/Filter/ColumnDelete.php b/core/DataTable/Filter/ColumnDelete.php
index 709d56a02e10cf1fe794a547b486ead969bb082c..5540634ef831d3a520a5639c67340383cf289e67 100644
--- a/core/DataTable/Filter/ColumnDelete.php
+++ b/core/DataTable/Filter/ColumnDelete.php
@@ -8,15 +8,19 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
 
 /**
  * Filter that will remove columns from a DataTable using either a blacklist,
  * whitelist or both.
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_ColumnDelete extends Piwik_DataTable_Filter
+class ColumnDelete extends Filter
 {
     /**
      * The columns that should be removed from DataTable rows.
@@ -51,13 +55,13 @@ class Piwik_DataTable_Filter_ColumnDelete extends Piwik_DataTable_Filter
     /**
      * Constructor.
      *
-     * @param Piwik_DataTable $table
-     * @param array|string    $columnsToRemove An array of column names or a comma-separated list of
+     * @param DataTable $table
+     * @param array|string $columnsToRemove An array of column names or a comma-separated list of
      *                                         column names. These columns will be removed.
-     * @param array|string    $columnsToKeep   An array of column names that should be kept or a
+     * @param array|string $columnsToKeep   An array of column names that should be kept or a
      *                                         comma-separated list of column names. Columns not in
      *                                         this list will be removed.
-     * @param bool            $deleteIfZeroOnly
+     * @param bool $deleteIfZeroOnly
      */
     public function __construct($table, $columnsToRemove, $columnsToKeep = array(), $deleteIfZeroOnly = false)
     {
@@ -80,7 +84,7 @@ class Piwik_DataTable_Filter_ColumnDelete extends Piwik_DataTable_Filter
      * Filters the given DataTable. Removes columns that are not desired from
      * each DataTable row.
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
@@ -112,15 +116,16 @@ class Piwik_DataTable_Filter_ColumnDelete extends Piwik_DataTable_Filter
 
                     $keep = false;
                     // @see self::APPEND_TO_COLUMN_NAME_TO_KEEP
-                    foreach($this->columnsToKeep as $nameKeep => $true) {
-                        if(strpos($name, $nameKeep . self::APPEND_TO_COLUMN_NAME_TO_KEEP) === 0) {
+                    foreach ($this->columnsToKeep as $nameKeep => $true) {
+                        if (strpos($name, $nameKeep . self::APPEND_TO_COLUMN_NAME_TO_KEEP) === 0) {
                             $keep = true;
                         }
                     }
 
                     if (!$keep
                         && $name != 'label' // label cannot be removed via whitelisting
-                        && !isset($this->columnsToKeep[$name])) {
+                        && !isset($this->columnsToKeep[$name])
+                    ) {
                         $row->deleteColumn($name);
                     }
                 }
diff --git a/core/DataTable/Filter/ExcludeLowPopulation.php b/core/DataTable/Filter/ExcludeLowPopulation.php
index 9f4d5c723cf07cf2f7968382c46c3157bf4a22c1..07699ea2ea447d756a4e75d56ac488d593f094c6 100644
--- a/core/DataTable/Filter/ExcludeLowPopulation.php
+++ b/core/DataTable/Filter/ExcludeLowPopulation.php
@@ -8,6 +8,10 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
 
 /**
  * Delete all rows that have a $columnToFilter value less than the $minimumValue
@@ -17,16 +21,16 @@
  * You can obviously apply this filter on a percentaged column, eg. remove all countries with the column 'percent_visits' less than 0.05
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_ExcludeLowPopulation extends Piwik_DataTable_Filter
+class ExcludeLowPopulation extends Filter
 {
     const MINIMUM_SIGNIFICANT_PERCENTAGE_THRESHOLD = 0.02;
-    
+
     /**
      * The minimum value to enforce in a datatable for a specified column. Rows found with
      * a value less than this are removed.
-     * 
+     *
      * @var number
      */
     private $minimumValue;
@@ -34,7 +38,7 @@ class Piwik_DataTable_Filter_ExcludeLowPopulation extends Piwik_DataTable_Filter
     /**
      * Constructor
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param string $columnToFilter              column to filter
      * @param number|Closure $minimumValue                minimum value
      * @param bool $minimumPercentageThreshold
@@ -43,7 +47,7 @@ class Piwik_DataTable_Filter_ExcludeLowPopulation extends Piwik_DataTable_Filter
     {
         parent::__construct($table);
         $this->columnToFilter = $columnToFilter;
-        
+
         if ($minimumValue == 0) {
             if ($minimumPercentageThreshold === false) {
                 $minimumPercentageThreshold = self::MINIMUM_SIGNIFICANT_PERCENTAGE_THRESHOLD;
@@ -52,14 +56,14 @@ class Piwik_DataTable_Filter_ExcludeLowPopulation extends Piwik_DataTable_Filter
             $sumValues = array_sum($allValues);
             $minimumValue = $sumValues * $minimumPercentageThreshold;
         }
-        
+
         $this->minimumValue = $minimumValue;
     }
 
     /**
      * Executes filter and removes all rows below the defined minimum
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
@@ -67,7 +71,7 @@ class Piwik_DataTable_Filter_ExcludeLowPopulation extends Piwik_DataTable_Filter
         $isValueHighPopulation = function ($value) use ($minimumValue) {
             return $value >= $minimumValue;
         };
-        
+
         $table->filter('ColumnCallbackDeleteRow', array($this->columnToFilter, $isValueHighPopulation));
     }
 }
diff --git a/core/DataTable/Filter/GroupBy.php b/core/DataTable/Filter/GroupBy.php
index 166994cd291da50b015c5ef46d46678e47a3b4ce..2dbc839c5928aa5171f2df0c5430410bd3b86c0d 100755
--- a/core/DataTable/Filter/GroupBy.php
+++ b/core/DataTable/Filter/GroupBy.php
@@ -8,6 +8,10 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
 
 /**
  * DataTable filter that will group DataTable rows together based on the results
@@ -16,9 +20,9 @@
  * NOTE: This filter should never be queued, it must be applied directly on a DataTable.
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_GroupBy extends Piwik_DataTable_Filter
+class GroupBy extends Filter
 {
     /**
      * The name of the columns to reduce.
@@ -40,7 +44,7 @@ class Piwik_DataTable_Filter_GroupBy extends Piwik_DataTable_Filter
     /**
      * Constructor.
      *
-     * @param Piwik_DataTable $table           The DataTable to filter.
+     * @param DataTable $table           The DataTable to filter.
      * @param string $groupByColumn   The column name to reduce.
      * @param mixed $reduceFunction  The reduce function. This must alter the $groupByColumn in some way.
      * @param array $parameters      Extra parameters to supply to the reduce function.
@@ -57,7 +61,7 @@ class Piwik_DataTable_Filter_GroupBy extends Piwik_DataTable_Filter
     /**
      * Applies the reduce function to each row and merges rows w/ the same reduce result.
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
@@ -66,7 +70,7 @@ class Piwik_DataTable_Filter_GroupBy extends Piwik_DataTable_Filter
 
         foreach ($table->getRows() as $rowId => $row) {
             // skip the summary row
-            if ($rowId == Piwik_DataTable::ID_SUMMARY_ROW) {
+            if ($rowId == DataTable::ID_SUMMARY_ROW) {
                 continue;
             }
 
diff --git a/core/DataTable/Filter/Limit.php b/core/DataTable/Filter/Limit.php
index 7845727948e3c3d77ee68247c309bf0250a5e9bb..5d751ddbc47532a16481fb165d747828a59a8c7d 100644
--- a/core/DataTable/Filter/Limit.php
+++ b/core/DataTable/Filter/Limit.php
@@ -8,19 +8,23 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
 
 /**
  * Delete all rows from the table that are not in the offset,offset+limit range
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_Limit extends Piwik_DataTable_Filter
+class Limit extends Filter
 {
     /**
      * Filter constructor.
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param int $offset          Starting row (indexed from 0)
      * @param int $limit           Number of rows to keep (specify -1 to keep all rows)
      * @param bool $keepSummaryRow  Whether to keep the summary row or not.
@@ -40,14 +44,14 @@ class Piwik_DataTable_Filter_Limit extends Piwik_DataTable_Filter
     /**
      * Limits the given data table
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
         $table->setRowsCountBeforeLimitFilter();
 
         if ($this->keepSummaryRow) {
-            $summaryRow = $table->getRowFromId(Piwik_DataTable::ID_SUMMARY_ROW);
+            $summaryRow = $table->getRowFromId(DataTable::ID_SUMMARY_ROW);
         }
 
         // we delete from 0 to offset
diff --git a/core/DataTable/Filter/MetadataCallbackAddMetadata.php b/core/DataTable/Filter/MetadataCallbackAddMetadata.php
index dbfc1728eee7b447fd38fe516979235ea798ab88..b24402c8709497a100d2d3eb7a4ecef7a26bdb90 100644
--- a/core/DataTable/Filter/MetadataCallbackAddMetadata.php
+++ b/core/DataTable/Filter/MetadataCallbackAddMetadata.php
@@ -8,6 +8,10 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
 
 /**
  * Add a new metadata to the table based on the value resulting
@@ -18,9 +22,9 @@
  * the path of the logo for this search engine URL (which has the format URL.png).
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_MetadataCallbackAddMetadata extends Piwik_DataTable_Filter
+class MetadataCallbackAddMetadata extends Filter
 {
     private $metadataToRead;
     private $functionToApply;
@@ -28,7 +32,7 @@ class Piwik_DataTable_Filter_MetadataCallbackAddMetadata extends Piwik_DataTable
     private $applyToSummaryRow;
 
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param string|array $metadataToRead
      * @param string $metadataToAdd
      * @param callback $functionToApply
@@ -50,12 +54,12 @@ class Piwik_DataTable_Filter_MetadataCallbackAddMetadata extends Piwik_DataTable
     }
 
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
         foreach ($table->getRows() as $key => $row) {
-            if (!$this->applyToSummaryRow && $key == Piwik_DataTable::ID_SUMMARY_ROW) {
+            if (!$this->applyToSummaryRow && $key == DataTable::ID_SUMMARY_ROW) {
                 continue;
             }
 
diff --git a/core/DataTable/Filter/MetadataCallbackReplace.php b/core/DataTable/Filter/MetadataCallbackReplace.php
index 4e6e5990de0b5d2379a59d411e78cf431a6dee4f..32051c1e6f9b2d51b11cc8e42af8831abe8210da 100644
--- a/core/DataTable/Filter/MetadataCallbackReplace.php
+++ b/core/DataTable/Filter/MetadataCallbackReplace.php
@@ -8,18 +8,24 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter\ColumnCallbackReplace;
+use Piwik\DataTable\Row;
+use false;
 
 /**
  * Replace a metadata value with a new value resulting
  * from the function called with the metadata's value
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_MetadataCallbackReplace extends Piwik_DataTable_Filter_ColumnCallbackReplace
+class MetadataCallbackReplace extends ColumnCallbackReplace
 {
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param array|string $metadataToFilter
      * @param callback $functionToApply
      * @param null|array $functionParameters
@@ -32,7 +38,7 @@ class Piwik_DataTable_Filter_MetadataCallbackReplace extends Piwik_DataTable_Fil
     }
 
     /**
-     * @param Piwik_DataTable_Row $row
+     * @param Row $row
      * @param string $metadataToFilter
      * @param mixed $newValue
      */
@@ -42,7 +48,7 @@ class Piwik_DataTable_Filter_MetadataCallbackReplace extends Piwik_DataTable_Fil
     }
 
     /**
-     * @param Piwik_DataTable_Row $row
+     * @param Row $row
      * @param string $metadataToFilter
      * @return array|false|mixed
      */
diff --git a/core/DataTable/Filter/Null.php b/core/DataTable/Filter/Null.php
index 240dc53c4106fc6cfac4d125f12504dddb8168ea..7b9cb0d623798ae2d9dbce13f4d1fe4586258afa 100644
--- a/core/DataTable/Filter/Null.php
+++ b/core/DataTable/Filter/Null.php
@@ -8,18 +8,22 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
 
 /**
  * Filter template.
  * You can use it if you want to create a new filter.
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_Null extends Piwik_DataTable_Filter
+class Null extends Filter
 {
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function __construct($table)
     {
@@ -27,7 +31,7 @@ class Piwik_DataTable_Filter_Null extends Piwik_DataTable_Filter
     }
 
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
diff --git a/core/DataTable/Filter/Pattern.php b/core/DataTable/Filter/Pattern.php
index 4a1ef8fd993362db913ac119e9dadc2dc01914e9..8ac29a89f811ebe7a27d5257f9b5b463a38c139f 100644
--- a/core/DataTable/Filter/Pattern.php
+++ b/core/DataTable/Filter/Pattern.php
@@ -8,6 +8,10 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
 
 /**
  * Delete all rows for which the given $columnToFilter do not contain the $patternToSearch
@@ -15,9 +19,9 @@
  * Example: from the keyword report, keep only the rows for which the label contains "piwik"
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_Pattern extends Piwik_DataTable_Filter
+class Pattern extends Filter
 {
     private $columnToFilter;
     private $patternToSearch;
@@ -25,7 +29,7 @@ class Piwik_DataTable_Filter_Pattern extends Piwik_DataTable_Filter
     private $invertedMatch;
 
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param string $columnToFilter
      * @param string $patternToSearch
      * @param bool $invertedMatch
@@ -65,7 +69,7 @@ class Piwik_DataTable_Filter_Pattern extends Piwik_DataTable_Filter
     }
 
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
diff --git a/core/DataTable/Filter/PatternRecursive.php b/core/DataTable/Filter/PatternRecursive.php
index 088546fee50d7379b65497930669a662a6f922b7..168c6a520aae74f1be636e9fd40d85836272e671 100644
--- a/core/DataTable/Filter/PatternRecursive.php
+++ b/core/DataTable/Filter/PatternRecursive.php
@@ -8,6 +8,13 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Exception;
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
+use Piwik\DataTable\Filter\Pattern;
+use Piwik\DataTable\Manager;
 
 /**
  * Delete all rows for which
@@ -18,16 +25,16 @@
  * Example: from the pages viewed report, keep only the rows that contain "piwik" or for which a subpage contains "piwik".
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_PatternRecursive extends Piwik_DataTable_Filter
+class PatternRecursive extends Filter
 {
     private $columnToFilter;
     private $patternToSearch;
     private $patternToSearchQuoted;
 
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param string $columnToFilter
      * @param string $patternToSearch
      */
@@ -35,13 +42,13 @@ class Piwik_DataTable_Filter_PatternRecursive extends Piwik_DataTable_Filter
     {
         parent::__construct($table);
         $this->patternToSearch = $patternToSearch;
-        $this->patternToSearchQuoted = Piwik_DataTable_Filter_Pattern::getPatternQuoted($patternToSearch);
+        $this->patternToSearchQuoted = Pattern::getPatternQuoted($patternToSearch);
         $this->patternToSearch = $patternToSearch; //preg_quote($patternToSearch);
         $this->columnToFilter = $columnToFilter;
     }
 
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @return int
      */
     public function filter($table)
@@ -56,7 +63,7 @@ class Piwik_DataTable_Filter_PatternRecursive extends Piwik_DataTable_Filter
 
             try {
                 $idSubTable = $row->getIdSubDataTable();
-                $subTable = Piwik_DataTable_Manager::getInstance()->getTable($idSubTable);
+                $subTable = Manager::getInstance()->getTable($idSubTable);
 
                 // we delete the row if we couldn't find the pattern in any row in the
                 // children hierarchy
@@ -69,7 +76,7 @@ class Piwik_DataTable_Filter_PatternRecursive extends Piwik_DataTable_Filter
             }
 
             if ($patternNotFoundInChildren
-                && !Piwik_DataTable_Filter_Pattern::match($this->patternToSearch, $this->patternToSearchQuoted, $row->getColumn($this->columnToFilter), $invertedMatch = false)
+                && !Pattern::match($this->patternToSearch, $this->patternToSearchQuoted, $row->getColumn($this->columnToFilter), $invertedMatch = false)
             ) {
                 $table->deleteRow($key);
             }
diff --git a/core/DataTable/Filter/RangeCheck.php b/core/DataTable/Filter/RangeCheck.php
index ebfea03d7f0436e75c57f3d7ef473914d5b35452..5fc2db1c9cb1c8e0de2cce90a2e00bc34493d779 100644
--- a/core/DataTable/Filter/RangeCheck.php
+++ b/core/DataTable/Filter/RangeCheck.php
@@ -8,20 +8,24 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
 
 /**
  * Check range
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_RangeCheck extends Piwik_DataTable_Filter
+class RangeCheck extends Filter
 {
     static public $minimumValue = 0.00;
     static public $maximumValue = 100.0;
 
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param string $columnToFilter  name of the column to filter
      * @param float $minimumValue    minimum value for range
      * @param float $maximumValue    maximum value for range
@@ -41,7 +45,7 @@ class Piwik_DataTable_Filter_RangeCheck extends Piwik_DataTable_Filter
     /**
      * Executes the filter an adjusts all columns to fit the defined range
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
diff --git a/core/DataTable/Filter/ReplaceColumnNames.php b/core/DataTable/Filter/ReplaceColumnNames.php
index c2b2beca79cb6442e8a2e573392c8458b21a3a4c..abf802b82ac615f1abe4609c645e9dee31a6bdb2 100644
--- a/core/DataTable/Filter/ReplaceColumnNames.php
+++ b/core/DataTable/Filter/ReplaceColumnNames.php
@@ -8,8 +8,14 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable\Filter;
+use Piwik\DataTable\Simple;
 use Piwik\Metrics;
 use Piwik\Piwik;
+use Piwik\DataTable;
+use Piwik_Tracker_GoalManager;
 
 /**
  * This filter replaces column names using a mapping table that maps from the old name to the new name.
@@ -24,14 +30,14 @@ use Piwik\Piwik;
  * You can specify the mapping array to apply in the constructor.
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_ReplaceColumnNames extends Piwik_DataTable_Filter
+class ReplaceColumnNames extends Filter
 {
     protected $mappingToApply;
 
     /**
-     * @param Piwik_DataTable $table  Table
+     * @param DataTable $table  Table
      * @param array $mappingToApply   Mapping to apply. Must have the format
      *                                           array( OLD_COLUMN_NAME => NEW_COLUMN NAME,
      *                                                  OLD_COLUMN_NAME2 => NEW_COLUMN NAME2,
@@ -49,11 +55,11 @@ class Piwik_DataTable_Filter_ReplaceColumnNames extends Piwik_DataTable_Filter
     /**
      * Executes the filter and renames the defined columns
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
-        if($table instanceof Piwik_DataTable_Simple) {
+        if ($table instanceof Simple) {
             $this->filterSimple($table);
         } else {
             $this->filterTable($table);
@@ -70,13 +76,13 @@ class Piwik_DataTable_Filter_ReplaceColumnNames extends Piwik_DataTable_Filter
         }
     }
 
-    protected function filterSimple(Piwik_DataTable_Simple $table)
+    protected function filterSimple(Simple $table)
     {
         foreach ($table->getRows() as $row) {
-            $columns = array_keys( $row->getColumns() );
-            foreach($columns as $column) {
+            $columns = array_keys($row->getColumns());
+            foreach ($columns as $column) {
                 $newName = $this->getRenamedColumn($column);
-                if($newName) {
+                if ($newName) {
                     $row->renameColumn($column, $newName);
                 }
             }
diff --git a/core/DataTable/Filter/ReplaceSummaryRowLabel.php b/core/DataTable/Filter/ReplaceSummaryRowLabel.php
index b89f05871c976300a9ce66e1124a243a1a91cfa4..2e6571692202c10e3ad17b3959e49cf43f44be72 100644
--- a/core/DataTable/Filter/ReplaceSummaryRowLabel.php
+++ b/core/DataTable/Filter/ReplaceSummaryRowLabel.php
@@ -8,16 +8,21 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
+use Piwik\DataTable\Manager;
 
 /**
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_ReplaceSummaryRowLabel extends Piwik_DataTable_Filter
+class ReplaceSummaryRowLabel extends Filter
 {
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param string|null $newLabel  new label for summary row
      */
     public function __construct($table, $newLabel = null)
@@ -32,13 +37,13 @@ class Piwik_DataTable_Filter_ReplaceSummaryRowLabel extends Piwik_DataTable_Filt
     /**
      * Updates the summary row label
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
         $rows = $table->getRows();
         foreach ($rows as $row) {
-            if ($row->getColumn('label') == Piwik_DataTable::LABEL_SUMMARY_ROW) {
+            if ($row->getColumn('label') == DataTable::LABEL_SUMMARY_ROW) {
                 $row->setColumn('label', $this->newLabel);
                 break;
             }
@@ -47,7 +52,7 @@ class Piwik_DataTable_Filter_ReplaceSummaryRowLabel extends Piwik_DataTable_Filt
         // recurse
         foreach ($rows as $row) {
             if ($row->isSubtableLoaded()) {
-                $subTable = Piwik_DataTable_Manager::getInstance()->getTable($row->getIdSubDataTable());
+                $subTable = Manager::getInstance()->getTable($row->getIdSubDataTable());
                 $this->filter($subTable);
             }
         }
diff --git a/core/DataTable/Filter/SafeDecodeLabel.php b/core/DataTable/Filter/SafeDecodeLabel.php
index ef8643b77f83e07443275b439bcfda46685da9dd..ecb183c6cbe889bbe6eef4aa689e292695c25eae 100644
--- a/core/DataTable/Filter/SafeDecodeLabel.php
+++ b/core/DataTable/Filter/SafeDecodeLabel.php
@@ -8,18 +8,22 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
 
 /**
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_SafeDecodeLabel extends Piwik_DataTable_Filter
+class SafeDecodeLabel extends Filter
 {
     private $columnToDecode;
     static private $outputHtml = true;
 
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function __construct($table)
     {
@@ -57,7 +61,7 @@ class Piwik_DataTable_Filter_SafeDecodeLabel extends Piwik_DataTable_Filter
     /**
      * Decodes all columns of the given data table
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
@@ -71,5 +75,4 @@ class Piwik_DataTable_Filter_SafeDecodeLabel extends Piwik_DataTable_Filter
             }
         }
     }
-
 }
diff --git a/core/DataTable/Filter/Sort.php b/core/DataTable/Filter/Sort.php
index 014362b45d386278e60dabec95b62cb676c27b44..72bc433befccb4a8a8555762388b439b0eed9239 100644
--- a/core/DataTable/Filter/Sort.php
+++ b/core/DataTable/Filter/Sort.php
@@ -8,22 +8,28 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable\Filter;
+use Piwik\DataTable\Simple;
+use Piwik\DataTable\Row;
 use Piwik\Metrics;
+use Piwik\DataTable;
 
 /**
  * Sort the DataTable based on the value of column $columnToSort ordered by $order.
  * Possible to specify a natural sorting (see php.net/natsort for details)
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_Sort extends Piwik_DataTable_Filter
+class Sort extends Filter
 {
     protected $columnToSort;
     protected $order;
 
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param string $columnToSort   name of the column to sort by
      * @param string $order          order (asc|desc)
      * @param bool $naturalSort    use natural sort?
@@ -65,27 +71,27 @@ class Piwik_DataTable_Filter_Sort extends Piwik_DataTable_Filter
      */
     public function sort($a, $b)
     {
-        return !isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
-            && !isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+        return !isset($a->c[Row::COLUMNS][$this->columnToSort])
+            && !isset($b->c[Row::COLUMNS][$this->columnToSort])
 
             ? 0
             : (
-            !isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+            !isset($a->c[Row::COLUMNS][$this->columnToSort])
                 ? 1
                 : (
-            !isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+            !isset($b->c[Row::COLUMNS][$this->columnToSort])
                 ? -1
-                : (($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort] != $b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort]
-                || !isset($a->c[Piwik_DataTable_Row::COLUMNS]['label']))
+                : (($a->c[Row::COLUMNS][$this->columnToSort] != $b->c[Row::COLUMNS][$this->columnToSort]
+                || !isset($a->c[Row::COLUMNS]['label']))
                 ? ($this->sign * (
-                $a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort]
-                    < $b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort]
+                $a->c[Row::COLUMNS][$this->columnToSort]
+                    < $b->c[Row::COLUMNS][$this->columnToSort]
                     ? -1
                     : 1)
                 )
                 : -1 * $this->sign * strnatcasecmp(
-                    $a->c[Piwik_DataTable_Row::COLUMNS]['label'],
-                    $b->c[Piwik_DataTable_Row::COLUMNS]['label'])
+                    $a->c[Row::COLUMNS]['label'],
+                    $b->c[Row::COLUMNS]['label'])
             )
             )
             );
@@ -100,16 +106,16 @@ class Piwik_DataTable_Filter_Sort extends Piwik_DataTable_Filter
      */
     function naturalSort($a, $b)
     {
-        return !isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
-            && !isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+        return !isset($a->c[Row::COLUMNS][$this->columnToSort])
+            && !isset($b->c[Row::COLUMNS][$this->columnToSort])
             ? 0
-            : (!isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+            : (!isset($a->c[Row::COLUMNS][$this->columnToSort])
                 ? 1
-                : (!isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+                : (!isset($b->c[Row::COLUMNS][$this->columnToSort])
                     ? -1
                     : $this->sign * strnatcasecmp(
-                        $a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort],
-                        $b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort]
+                        $a->c[Row::COLUMNS][$this->columnToSort],
+                        $b->c[Row::COLUMNS][$this->columnToSort]
                     )
                 )
             );
@@ -124,16 +130,16 @@ class Piwik_DataTable_Filter_Sort extends Piwik_DataTable_Filter
      */
     function sortString($a, $b)
     {
-        return !isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
-            && !isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+        return !isset($a->c[Row::COLUMNS][$this->columnToSort])
+            && !isset($b->c[Row::COLUMNS][$this->columnToSort])
             ? 0
-            : (!isset($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+            : (!isset($a->c[Row::COLUMNS][$this->columnToSort])
                 ? 1
-                : (!isset($b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort])
+                : (!isset($b->c[Row::COLUMNS][$this->columnToSort])
                     ? -1
                     : $this->sign *
-                        strcasecmp($a->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort],
-                            $b->c[Piwik_DataTable_Row::COLUMNS][$this->columnToSort]
+                        strcasecmp($a->c[Row::COLUMNS][$this->columnToSort],
+                            $b->c[Row::COLUMNS][$this->columnToSort]
                         )
                 )
             );
@@ -142,7 +148,7 @@ class Piwik_DataTable_Filter_Sort extends Piwik_DataTable_Filter
     /**
      * Sets the column to be used for sorting
      *
-     * @param Piwik_DataTable_Row $row
+     * @param Row $row
      * @return int
      */
     protected function selectColumnToSort($row)
@@ -179,12 +185,12 @@ class Piwik_DataTable_Filter_Sort extends Piwik_DataTable_Filter
     /**
      * Sorts the given data table by defined column and sorting method
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @return mixed
      */
     public function filter($table)
     {
-        if ($table instanceof Piwik_DataTable_Simple) {
+        if ($table instanceof Simple) {
             return;
         }
         if (empty($this->columnToSort)) {
diff --git a/core/DataTable/Filter/Truncate.php b/core/DataTable/Filter/Truncate.php
index 7c917034f94b303c81be2aec3411260fd5836f1c..1cd6f98bf070a925d6c33ea992ef1e998649ec1e 100644
--- a/core/DataTable/Filter/Truncate.php
+++ b/core/DataTable/Filter/Truncate.php
@@ -8,15 +8,20 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Filter;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Filter;
+use Piwik\DataTable\Manager;
 
 /**
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Filter_Truncate extends Piwik_DataTable_Filter
+class Truncate extends Filter
 {
     /**
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param int $truncateAfter
      */
     public function __construct($table, $truncateAfter)
@@ -28,7 +33,7 @@ class Piwik_DataTable_Filter_Truncate extends Piwik_DataTable_Filter
     /**
      * Truncates the table after X rows and adds a summary row
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     public function filter($table)
     {
@@ -38,7 +43,7 @@ class Piwik_DataTable_Filter_Truncate extends Piwik_DataTable_Filter
         foreach ($table->getRows() as $row) {
             if ($row->isSubtableLoaded()) {
                 $idSubTable = $row->getIdSubDataTable();
-                $subTable = Piwik_DataTable_Manager::getInstance()->getTable($idSubTable);
+                $subTable = Manager::getInstance()->getTable($idSubTable);
                 $subTable->filter('Truncate', array($this->truncateAfter));
             }
         }
diff --git a/core/DataTable/Manager.php b/core/DataTable/Manager.php
index 21dc600481c1c5298c1e0196ce394c0579858f21..b32463b17604f77cf972140a22de6ff632bb280d 100644
--- a/core/DataTable/Manager.php
+++ b/core/DataTable/Manager.php
@@ -9,7 +9,11 @@
  * @package Piwik
  */
 
+namespace Piwik\DataTable;
+
+use Exception;
 use Piwik\Common;
+use Piwik\DataTable;
 
 /**
  * The DataTable_Manager registers all the instanciated DataTable and provides an
@@ -17,16 +21,16 @@ use Piwik\Common;
  * At the end of archiving, the ArchiveProcessor will read the stored datatable and record them in the DB.
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Manager
+class Manager
 {
     static private $instance = null;
 
     /**
      * Returns instance
      *
-     * @return Piwik_DataTable_Manager
+     * @return \Piwik\DataTable\Manager
      */
     static public function getInstance()
     {
@@ -52,7 +56,7 @@ class Piwik_DataTable_Manager
     /**
      * Add a DataTable to the registry
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @return int  Index of the table in the manager array
      */
     public function addTable($table)
@@ -69,7 +73,7 @@ class Piwik_DataTable_Manager
      *
      * @param int $idTable
      * @throws Exception If the table can't be found
-     * @return Piwik_DataTable  The table
+     * @return DataTable  The table
      */
     public function getTable($idTable)
     {
@@ -134,9 +138,9 @@ class Piwik_DataTable_Manager
      */
     public function dumpAllTables()
     {
-        echo "<hr />Piwik_DataTable_Manager->dumpAllTables()<br />";
+        echo "<hr />Manager->dumpAllTables()<br />";
         foreach ($this->tables as $id => $table) {
-            if (!($table instanceof Piwik_DataTable)) {
+            if (!($table instanceof DataTable)) {
                 echo "Error table $id is not instance of datatable<br />";
                 var_export($table);
             } else {
@@ -146,6 +150,6 @@ class Piwik_DataTable_Manager
                 echo "<br />";
             }
         }
-        echo "<br />-- End Piwik_DataTable_Manager->dumpAllTables()<hr />";
+        echo "<br />-- End Manager->dumpAllTables()<hr />";
     }
 }
diff --git a/core/DataTable/Array.php b/core/DataTable/Map.php
similarity index 86%
rename from core/DataTable/Array.php
rename to core/DataTable/Map.php
index 0274a65fe56e4ae397f7e35bab2b0c5e7cbbca8b..7bda0c19843c68565671ffd6d2698fd0ce6fb953 100644
--- a/core/DataTable/Array.php
+++ b/core/DataTable/Map.php
@@ -8,27 +8,28 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable;
 
 /**
  * The DataTable_Array is a way to store an array of dataTable.
- * The Piwik_DataTable_Array implements some of the features of the Piwik_DataTable such as queueFilter, getRowsCount.
+ * The Set implements some of the features of the DataTable such as queueFilter, getRowsCount.
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Array
+class Map
 {
     /**
-     * Array containing the DataTable withing this Piwik_DataTable_Array
+     * Array containing the DataTable withing this Set
      *
-     * @var Piwik_DataTable[]
+     * @var DataTable[]
      */
     protected $array = array();
 
     /**
      * This is the label used to index the tables.
      * For example if the tables are indexed using the timestamp of each period
-     * eg. $this->array[1045886960] = new Piwik_DataTable();
+     * eg. $this->array[1045886960] = new DataTable();
      * the keyName would be 'timestamp'.
      *
      * This label is used in the Renderer (it becomes a column name or the XML description tag)
@@ -70,7 +71,7 @@ class Piwik_DataTable_Array
     /**
      * Queue a filter to the DataTable_Array will queue this filter to every DataTable of the DataTable_Array.
      *
-     * @param string $className   Filter name, eg. Piwik_DataTable_Filter_Limit
+     * @param string $className   Filter name, eg. Limit
      * @param array $parameters  Filter parameters, eg. array( 50, 10 )
      */
     public function queueFilter($className, $parameters = array())
@@ -106,7 +107,7 @@ class Piwik_DataTable_Array
     /**
      * Returns the array of DataTable
      *
-     * @return Piwik_DataTable[]
+     * @return DataTable[]
      */
     public function getArray()
     {
@@ -117,7 +118,7 @@ class Piwik_DataTable_Array
      * Returns the table with the specified label.
      *
      * @param string $label
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getTable($label)
     {
@@ -128,7 +129,7 @@ class Piwik_DataTable_Array
      * Returns the first row
      * This method can be used to treat DataTable and DataTable_Array in the same way
      *
-     * @return Piwik_DataTable_Row
+     * @return Row
      */
     public function getFirstRow()
     {
@@ -144,7 +145,7 @@ class Piwik_DataTable_Array
     /**
      * Adds a new DataTable to the DataTable_Array
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param string $label  Label used to index this table in the array
      */
     public function addTable($table, $label)
@@ -287,19 +288,19 @@ class Piwik_DataTable_Array
      * This function can be used, for example, to smoosh IndexedBySite archive
      * query results into one DataTable w/ different rows differentiated by site ID.
      *
-     * @return Piwik_DataTable|Piwik_DataTable_Array
+     * @return DataTable|Set
      */
     public function mergeChildren()
     {
         $firstChild = reset($this->array);
 
-        if ($firstChild instanceof Piwik_DataTable_Array) {
+        if ($firstChild instanceof Set) {
             $result = $firstChild->getEmptyClone();
 
             foreach ($this->array as $label => $subTableArray) {
                 foreach ($subTableArray->array as $innerLabel => $subTable) {
                     if (!isset($result->array[$innerLabel])) {
-                        $dataTable = new Piwik_DataTable();
+                        $dataTable = new DataTable();
                         $dataTable->metadata = $subTable->metadata;
 
                         $result->addTable($dataTable, $innerLabel);
@@ -309,7 +310,7 @@ class Piwik_DataTable_Array
                 }
             }
         } else {
-            $result = new Piwik_DataTable();
+            $result = new DataTable();
 
             foreach ($this->array as $label => $subTable) {
                 $this->copyRowsAndSetLabel($result, $subTable, $label);
@@ -323,21 +324,21 @@ class Piwik_DataTable_Array
      * Utility function used by mergeChildren. Copies the rows from one table,
      * sets their 'label' columns to a value and adds them to another table.
      *
-     * @param Piwik_DataTable $toTable    The table to copy rows to.
-     * @param Piwik_DataTable $fromTable  The table to copy rows from.
+     * @param DataTable $toTable    The table to copy rows to.
+     * @param DataTable $fromTable  The table to copy rows from.
      * @param string $label      The value to set the 'label' column of every copied row.
      */
-    private function copyRowsAndSetLabel($toTable, $fromTable, $label)
+    private function copyRowsAndSetLabel(DataTable $toTable, DataTable $fromTable, $label)
     {
         foreach ($fromTable->getRows() as $fromRow) {
             $oldColumns = $fromRow->getColumns();
             unset($oldColumns['label']);
 
             $columns = array_merge(array('label' => $label), $oldColumns);
-            $row = new Piwik_DataTable_Row(array(
-                                                Piwik_DataTable_Row::COLUMNS              => $columns,
-                                                Piwik_DataTable_Row::METADATA             => $fromRow->getMetadata(),
-                                                Piwik_DataTable_Row::DATATABLE_ASSOCIATED => $fromRow->getIdSubDataTable()
+            $row = new Row(array(
+                                                Row::COLUMNS              => $columns,
+                                                Row::METADATA             => $fromRow->getMetadata(),
+                                                Row::DATATABLE_ASSOCIATED => $fromRow->getIdSubDataTable()
                                            ));
             $toTable->addRow($row);
         }
@@ -347,9 +348,9 @@ class Piwik_DataTable_Array
      * Adds a DataTable to all the tables in this array
      * NOTE: Will only add $tableToSum if the childTable has some rows
      *
-     * @param Piwik_DataTable $tableToSum
+     * @param DataTable $tableToSum
      */
-    public function addDataTable(Piwik_DataTable $tableToSum)
+    public function addDataTable(DataTable $tableToSum)
     {
         foreach ($this->getArray() as $childTable) {
             if ($childTable->getRowsCount() > 0) {
@@ -364,7 +365,7 @@ class Piwik_DataTable_Array
      *
      * @see Piwik_DataTable::mergeSubtables
      *
-     * @return Piwik_DataTable_Array
+     * @return Set
      */
     public function mergeSubtables()
     {
@@ -379,11 +380,11 @@ class Piwik_DataTable_Array
      * Returns a new DataTable_Array w/o any child DataTables, but with
      * the same key name as this instance.
      *
-     * @return Piwik_DataTable_Array
+     * @return Set
      */
     public function getEmptyClone()
     {
-        $newTableArray = new Piwik_DataTable_Array;
+        $newTableArray = new Map;
         $newTableArray->setKeyName($this->getKeyName());
         return $newTableArray;
     }
diff --git a/core/DataTable/Renderer.php b/core/DataTable/Renderer.php
index 68fcf88fe502de90acec4982f904a25e439a979d..88f3f9ff3765a8562e182c202ac777462d0cc774 100644
--- a/core/DataTable/Renderer.php
+++ b/core/DataTable/Renderer.php
@@ -8,21 +8,26 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable;
+
+use Exception;
 use Piwik\Metrics;
 use Piwik\Piwik;
+use Piwik\DataTable;
+use Piwik\DataTable\Simple;
 
 /**
  * A DataTable Renderer can produce an output given a DataTable object.
  * All new Renderers must be copied in DataTable/Renderer and added to the factory() method.
  * To use a renderer, simply do:
- *  $render = new Piwik_DataTable_Renderer_Xml();
+ *  $render = new Xml();
  *  $render->setTable($dataTable);
  *  echo $render;
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-abstract class Piwik_DataTable_Renderer
+abstract class Renderer
 {
     protected $table;
     protected $exception;
@@ -59,7 +64,6 @@ abstract class Piwik_DataTable_Renderer
      */
     public $idSite = 'all';
 
-
     public function __construct()
     {
     }
@@ -135,16 +139,16 @@ abstract class Piwik_DataTable_Renderer
     /**
      * Set the DataTable to be rendered
      *
-     * @param Piwik_DataTable|Piwik_DataTable_Simple|Piwik_DataTable_Array $table  table to be rendered
+     * @param DataTable|Simple|DataTable\Map $table  table to be rendered
      * @throws Exception
      */
     public function setTable($table)
     {
         if (!is_array($table)
-            && !($table instanceof Piwik_DataTable)
-            && !($table instanceof Piwik_DataTable_Array)
+            && !($table instanceof DataTable)
+            && !($table instanceof DataTable\Map)
         ) {
-            throw new Exception("DataTable renderers renderer accepts only Piwik_DataTable and Piwik_DataTable_Array instances, and array instances.");
+            throw new Exception("DataTable renderers renderer accepts only DataTable and Set instances, and array instances.");
         }
         $this->table = $table;
     }
@@ -163,7 +167,6 @@ abstract class Piwik_DataTable_Renderer
         $this->exception = $exception;
     }
 
-
     /**
      * @var array
      */
@@ -190,20 +193,19 @@ abstract class Piwik_DataTable_Renderer
      *
      * @param string $name
      * @throws Exception If the renderer is unknown
-     * @return Piwik_DataTable_Renderer
+     * @return \Piwik\DataTable\Renderer
      */
     static public function factory($name)
     {
-        $name = ucfirst(strtolower($name));
-        $className = 'Piwik_DataTable_Renderer_' . $name;
-
+        $className = ucfirst(strtolower($name));
+        $className = 'Piwik\DataTable\Renderer\\' . $className;
         try {
-            Piwik_Loader::loadClass($className);
+            \Piwik\Loader::loadClass($className);
             return new $className;
         } catch (Exception $e) {
             $availableRenderers = implode(', ', self::getRenderers());
             @header('Content-Type: text/plain; charset=utf-8');
-            throw new Exception(Piwik_TranslateException('General_ExceptionInvalidRendererFormat', array($name, $availableRenderers)));
+            throw new Exception(Piwik_TranslateException('General_ExceptionInvalidRendererFormat', array($className, $availableRenderers)));
         }
     }
 
@@ -365,7 +367,7 @@ abstract class Piwik_DataTable_Renderer
      *  - empty array (ie, array())
      *  - array w/ arrays/DataTable instances as values (ie,
      *            array('name' => 'myreport',
-     *                  'reportData' => new Piwik_DataTable())
+     *                  'reportData' => new DataTable())
      *        OR  array('name' => 'myreport',
      *                  'reportData' => array(...)) )
      *
diff --git a/core/DataTable/Renderer/Console.php b/core/DataTable/Renderer/Console.php
index c78b4eda1f0d2fb3920cdbdf946a577ca6d11730..594c80427facc3efda8469f85578b061bf384985 100644
--- a/core/DataTable/Renderer/Console.php
+++ b/core/DataTable/Renderer/Console.php
@@ -8,14 +8,19 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Renderer;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Manager;
+use Piwik\DataTable\Renderer;
 
 /**
  * Simple output
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage Piwik_DataTable_Renderer_ConsoleDataTable
  */
-class Piwik_DataTable_Renderer_Console extends Piwik_DataTable_Renderer
+class Console extends Renderer
 {
     /**
      * Prefix
@@ -60,13 +65,13 @@ class Piwik_DataTable_Renderer_Console extends Piwik_DataTable_Renderer
     /**
      * Computes the output of the given array of data tables
      *
-     * @param Piwik_DataTable_Array $tableArray  data tables to render
+     * @param DataTable\Map $tableArray  data tables to render
      * @param string $prefix      prefix to output before table data
      * @return string
      */
-    protected function renderDataTableArray(Piwik_DataTable_Array $tableArray, $prefix)
+    protected function renderDataTableArray(DataTable\Map $tableArray, $prefix)
     {
-        $output = "Piwik_DataTable_Array<hr />";
+        $output = "Set<hr />";
         $prefix = $prefix . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
         foreach ($tableArray->getArray() as $descTable => $table) {
             $output .= $prefix . "<b>" . $descTable . "</b><br />";
@@ -79,7 +84,7 @@ class Piwik_DataTable_Renderer_Console extends Piwik_DataTable_Renderer
     /**
      * Computes the given dataTable output and returns the string/binary
      *
-     * @param Piwik_DataTable $table   data table to render
+     * @param DataTable $table   data table to render
      * @param string $prefix  prefix to output before table data
      * @return string
      */
@@ -87,10 +92,10 @@ class Piwik_DataTable_Renderer_Console extends Piwik_DataTable_Renderer
     {
         if (is_array($table)) // convert array to DataTable
         {
-            $table = Piwik_DataTable::makeFromSimpleArray($table);
+            $table = DataTable::makeFromSimpleArray($table);
         }
 
-        if ($table instanceof Piwik_DataTable_Array) {
+        if ($table instanceof DataTable\Map) {
             return $this->renderDataTableArray($table, $prefix);
         }
 
@@ -105,7 +110,7 @@ class Piwik_DataTable_Renderer_Console extends Piwik_DataTable_Renderer
             $dataTableArrayBreak = false;
             $columns = array();
             foreach ($row->getColumns() as $column => $value) {
-                if ($value instanceof Piwik_DataTable_Array) {
+                if ($value instanceof DataTable\Map) {
                     $output .= $this->renderDataTableArray($value, $prefix);
                     $dataTableArrayBreak = true;
                     break;
@@ -136,7 +141,7 @@ class Piwik_DataTable_Renderer_Console extends Piwik_DataTable_Renderer
                 if ($row->isSubtableLoaded()) {
                     $depth++;
                     $output .= $this->renderTable(
-                        Piwik_DataTable_Manager::getInstance()->getTable(
+                        Manager::getInstance()->getTable(
                             $row->getIdSubDataTable()
                         ),
                         $prefix . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
diff --git a/core/DataTable/Renderer/Csv.php b/core/DataTable/Renderer/Csv.php
index 9b2f5505d6e73475d665b95271f1cf8e99a8fb6a..03074897d4721f4988d76f48f5600fe3b8ecebe2 100644
--- a/core/DataTable/Renderer/Csv.php
+++ b/core/DataTable/Renderer/Csv.php
@@ -8,10 +8,16 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Renderer;
+
+use Piwik\DataTable\Simple;
+use Piwik\DataTable\Renderer;
 use Piwik\Period;
-use Piwik\Period_Range;
+use Piwik\Period\Range;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
+use Piwik\DataTable;
 
 /**
  * CSV export
@@ -23,9 +29,9 @@ use Piwik\Common;
  * Formatting and layout are ignored.
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer
+class Csv extends Renderer
 {
     /**
      * Column separator
@@ -119,7 +125,7 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer
     /**
      * Computes the output of the given data table
      *
-     * @param Piwik_DataTable|array $table
+     * @param DataTable|array $table
      * @param array $allColumns
      * @return string
      */
@@ -127,10 +133,10 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer
     {
         if (is_array($table)) // convert array to DataTable
         {
-            $table = Piwik_DataTable::makeFromSimpleArray($table);
+            $table = DataTable::makeFromSimpleArray($table);
         }
 
-        if ($table instanceof Piwik_DataTable_Array) {
+        if ($table instanceof DataTable\Map) {
             $str = $this->renderDataTableArray($table, $allColumns);
         } else {
             $str = $this->renderDataTable($table, $allColumns);
@@ -141,7 +147,7 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer
     /**
      * Computes the output of the given data table array
      *
-     * @param Piwik_DataTable_Array $table
+     * @param DataTable\Map $table
      * @param array $allColumns
      * @return string
      */
@@ -176,13 +182,13 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer
     /**
      * Converts the output of the given simple data table
      *
-     * @param Piwik_DataTable_Simple $table
+     * @param Simple $table
      * @param array $allColumns
      * @return string
      */
     protected function renderDataTable($table, &$allColumns = array())
     {
-        if ($table instanceof Piwik_DataTable_Simple) {
+        if ($table instanceof Simple) {
             $row = $table->getFirstRow();
             if ($row !== false) {
                 $columnNameToValue = $row->getColumns();
@@ -352,11 +358,11 @@ class Piwik_DataTable_Renderer_Csv extends Piwik_DataTable_Renderer
         if ($period || $date) // in test cases, there are no request params set
         {
             if ($period == 'range') {
-                $period = new Period_Range($period, $date);
+                $period = new Range($period, $date);
             } else if (strpos($date, ',') !== false) {
-                $period = new Period_Range('range', $date);
+                $period = new Range('range', $date);
             } else {
-                $period = Period::factory($period, Piwik_Date::factory($date));
+                $period = Period::factory($period, Date::factory($date));
             }
 
             $prettyDate = $period->getLocalizedLongString();
diff --git a/core/DataTable/Renderer/Html.php b/core/DataTable/Renderer/Html.php
index 1d620f74cc73c58eb0fb6cc81c1f98c7d690b3d6..035726a9ed31f0858c18dfb4f4d7371d559396d6 100644
--- a/core/DataTable/Renderer/Html.php
+++ b/core/DataTable/Renderer/Html.php
@@ -8,15 +8,21 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Renderer;
+
+use Exception;
+use Piwik\DataTable;
+use Piwik\DataTable\Simple;
+use Piwik\DataTable\Renderer;
 
 /**
  * Simple HTML output
  * Does not work with recursive DataTable (i.e., when a row can be associated with a subDataTable).
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Renderer_Html extends Piwik_DataTable_Renderer
+class Html extends Renderer
 {
     protected $tableId;
     protected $allColumns;
@@ -71,23 +77,23 @@ class Piwik_DataTable_Renderer_Html extends Piwik_DataTable_Renderer
     /**
      * Computes the output for the given data table
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @return string
      */
     protected function renderTable($table)
     {
         if (is_array($table)) // convert array to DataTable
         {
-            $table = Piwik_DataTable::makeFromSimpleArray($table);
+            $table = DataTable::makeFromSimpleArray($table);
         }
 
-        if ($table instanceof Piwik_DataTable_Array) {
+        if ($table instanceof DataTable\Map) {
             foreach ($table->getArray() as $date => $subtable) {
                 if ($subtable->getRowsCount()) {
                     $this->buildTableStructure($subtable, '_' . $table->getKeyName(), $date);
                 }
             }
-        } else // Piwik_DataTable_Simple
+        } else // Simple
         {
             if ($table->getRowsCount()) {
                 $this->buildTableStructure($table);
@@ -101,7 +107,7 @@ class Piwik_DataTable_Renderer_Html extends Piwik_DataTable_Renderer
     /**
      * Adds the given data table to the table structure array
      *
-     * @param Piwik_DataTable_Simple $table
+     * @param Simple $table
      * @param null|string $columnToAdd
      * @param null|string $valueToAdd
      * @throws Exception
@@ -117,7 +123,7 @@ class Piwik_DataTable_Renderer_Html extends Piwik_DataTable_Renderer
          * ROW1 = col1 | col2 | col3 | metadata | idSubTable
          * ROW2 = col1 | col2 (no value but appears) | col3 | metadata | idSubTable
          */
-        if (!($table instanceof Piwik_DataTable)) {
+        if (!($table instanceof DataTable)) {
             throw new Exception("HTML Renderer does not work with this combination of parameters");
         }
         foreach ($table->getRows() as $row) {
diff --git a/core/DataTable/Renderer/Json.php b/core/DataTable/Renderer/Json.php
index 92e0830316714a2d97d066be37919e63037682c6..f5f6fc12bbc1f3bfefb480b81944eaf7ab1feea7 100644
--- a/core/DataTable/Renderer/Json.php
+++ b/core/DataTable/Renderer/Json.php
@@ -8,17 +8,22 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Renderer;
+
+use Piwik\DataTable\Renderer;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\DataTable;
+use Piwik\DataTable\Renderer\Php;
 
 /**
  * JSON export.
  * Works with recursive DataTable (when a row can be associated with a subDataTable).
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Renderer_Json extends Piwik_DataTable_Renderer
+class Json extends Renderer
 {
     /**
      * Computes the dataTable output and returns the string/binary
@@ -50,7 +55,7 @@ class Piwik_DataTable_Renderer_Json extends Piwik_DataTable_Renderer
     /**
      * Computes the output for the given data table
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @return string
      */
     protected function renderTable($table)
@@ -61,7 +66,7 @@ class Piwik_DataTable_Renderer_Json extends Piwik_DataTable_Renderer
                 $array = array($array);
             }
         } else {
-            $renderer = new Piwik_DataTable_Renderer_Php();
+            $renderer = new Php();
             $renderer->setTable($table);
             $renderer->setRenderSubTables($this->isRenderSubtables());
             $renderer->setSerialize(false);
diff --git a/core/DataTable/Renderer/Php.php b/core/DataTable/Renderer/Php.php
index ec66701cbe192051360d750372a3e5f1f77fe514..6717746295c2a68169c5b95fcc74f1b2e7a5c371 100644
--- a/core/DataTable/Renderer/Php.php
+++ b/core/DataTable/Renderer/Php.php
@@ -8,7 +8,14 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Renderer;
+
+use Exception;
+use Piwik\DataTable\Manager;
+use Piwik\DataTable\Simple;
+use Piwik\DataTable\Renderer;
 use Piwik\Piwik;
+use Piwik\DataTable;
 
 /**
  * Returns the equivalent PHP array for a given DataTable.
@@ -19,9 +26,9 @@ use Piwik\Piwik;
  * Works with recursive DataTable (when a row can be associated with a subDataTable).
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer
+class Php extends Renderer
 {
     protected $prettyDisplay = false;
     protected $serialize = true;
@@ -63,7 +70,7 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer
     /**
      * Computes the dataTable output and returns the string/binary
      *
-     * @param null|Piwik_DataTable_Array|Piwik_DataTable_Simple $dataTable
+     * @param null|DataTable\Map|Simple $dataTable
      * @return string
      */
     public function render($dataTable = null)
@@ -116,7 +123,7 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer
      *            'col2_name' => value2,
      *            'metadata1_name' => value_metadata )
      *
-     * @param null|Piwik_DataTable_Array|Piwik_DataTable_Simple $dataTable
+     * @param null|DataTable\Map|Simple $dataTable
      * @return array  Php array representing the 'flat' version of the datatable
      */
     public function flatRender($dataTable = null)
@@ -130,7 +137,7 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer
             if (self::shouldWrapArrayBeforeRendering($flatArray)) {
                 $flatArray = array($flatArray);
             }
-        } else if ($dataTable instanceof Piwik_DataTable_Array) {
+        } else if ($dataTable instanceof DataTable\Map) {
             $flatArray = array();
             foreach ($dataTable->getArray() as $keyName => $table) {
                 $serializeSave = $this->serialize;
@@ -138,7 +145,7 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer
                 $flatArray[$keyName] = $this->flatRender($table);
                 $this->serialize = $serializeSave;
             }
-        } else if ($dataTable instanceof Piwik_DataTable_Simple) {
+        } else if ($dataTable instanceof Simple) {
             $flatArray = $this->renderSimpleTable($dataTable);
 
             // if we return only one numeric value then we print out the result in a simple <result> tag
@@ -146,7 +153,6 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer
             if (count($flatArray) == 1) {
                 $flatArray = current($flatArray);
             }
-
         } // A normal DataTable needs to be handled specifically
         else {
             $array = $this->renderTable($dataTable);
@@ -191,11 +197,11 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer
      */
     public function originalRender()
     {
-        Piwik::checkObjectTypeIs($this->table, array('Piwik_DataTable_Simple', 'Piwik_DataTable'));
+        Piwik::checkObjectTypeIs($this->table, array('Simple', 'DataTable'));
 
-        if ($this->table instanceof Piwik_DataTable_Simple) {
+        if ($this->table instanceof Simple) {
             $array = $this->renderSimpleTable($this->table);
-        } elseif ($this->table instanceof Piwik_DataTable) {
+        } elseif ($this->table instanceof DataTable) {
             $array = $this->renderTable($this->table);
         }
 
@@ -208,7 +214,7 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer
     /**
      * Converts the given data table to an array
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @return array
      */
     protected function renderTable($table)
@@ -222,14 +228,14 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer
                 'idsubdatatable' => $row->getIdSubDataTable(),
             );
 
-            if ($id == Piwik_DataTable::ID_SUMMARY_ROW) {
+            if ($id == DataTable::ID_SUMMARY_ROW) {
                 $newRow['issummaryrow'] = true;
             }
 
             if ($this->isRenderSubtables()
                 && $row->isSubtableLoaded()
             ) {
-                $subTable = $this->renderTable(Piwik_DataTable_Manager::getInstance()->getTable($row->getIdSubDataTable()));
+                $subTable = $this->renderTable(Manager::getInstance()->getTable($row->getIdSubDataTable()));
                 $newRow['subtable'] = $subTable;
                 if ($this->hideIdSubDatatable === false
                     && isset($newRow['metadata']['idsubdatatable_in_db'])
@@ -250,7 +256,7 @@ class Piwik_DataTable_Renderer_Php extends Piwik_DataTable_Renderer
     /**
      * Converts the simple data table to an array
      *
-     * @param Piwik_DataTable_Simple $table
+     * @param Simple $table
      * @return array
      */
     protected function renderSimpleTable($table)
diff --git a/core/DataTable/Renderer/Rss.php b/core/DataTable/Renderer/Rss.php
index 2c1fd0511445c3230b41b6105145cc1936e9eaac..2b131d25df39fb84a23fb878f500f20babfd0538 100644
--- a/core/DataTable/Renderer/Rss.php
+++ b/core/DataTable/Renderer/Rss.php
@@ -8,17 +8,24 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Renderer;
+
+use Exception;
 use Piwik\Common;
+use Piwik\DataTable\Renderer;
+use Piwik\Date;
+use Piwik\DataTable;
+use Piwik_Url;
 
 /**
  * RSS Feed.
- * The RSS renderer can be used only on Piwik_DataTable_Array that are arrays of Piwik_DataTable.
- * A RSS feed contains one dataTable per element in the Piwik_DataTable_Array.
+ * The RSS renderer can be used only on Set that are arrays of DataTable.
+ * A RSS feed contains one dataTable per element in the Set.
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Renderer_Rss extends Piwik_DataTable_Renderer
+class Rss extends Renderer
 {
     /**
      * Computes the dataTable output and returns the string/binary
@@ -46,13 +53,13 @@ class Piwik_DataTable_Renderer_Rss extends Piwik_DataTable_Renderer
     /**
      * Computes the output for the given data table
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @return string
      * @throws Exception
      */
     protected function renderTable($table)
     {
-        if (!($table instanceof Piwik_DataTable_Array)
+        if (!($table instanceof DataTable\Map)
             || $table->getKeyName() != 'date'
         ) {
             throw new Exception("RSS feeds can be generated for one specific website &idSite=X." .
@@ -72,7 +79,7 @@ class Piwik_DataTable_Renderer_Rss extends Piwik_DataTable_Renderer
 
             $pudDate = date('r', $timestamp);
 
-            $dateInSiteTimezone = Piwik_Date::factory($timestamp)->setTimezone($site->getTimezone())->toString('Y-m-d');
+            $dateInSiteTimezone = Date::factory($timestamp)->setTimezone($site->getTimezone())->toString('Y-m-d');
             $thisPiwikUrl = Common::sanitizeInputValue($piwikUrl . "&date=$dateInSiteTimezone");
             $siteName = $site->getName();
             $title = $siteName . " on " . $date;
@@ -189,7 +196,6 @@ class Piwik_DataTable_Renderer_Rss extends Piwik_DataTable_Renderer
                 }
             }
             $html .= "</tr>";
-
         }
         $html .= "\n\n</table>";
         return $html;
diff --git a/core/DataTable/Renderer/Tsv.php b/core/DataTable/Renderer/Tsv.php
index 4835853143eb2d7b79a306b8068a189c3d5c5669..3f6aea5b53c6af84be5205a60427bec80da0e19c 100644
--- a/core/DataTable/Renderer/Tsv.php
+++ b/core/DataTable/Renderer/Tsv.php
@@ -8,6 +8,9 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Renderer;
+
+use Piwik\DataTable\Renderer\Csv;
 
 /**
  * TSV export
@@ -16,9 +19,9 @@
  * TSV is therefore the 'CSV' that is Excel compatible
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Renderer_Tsv extends Piwik_DataTable_Renderer_Csv
+class Tsv extends Csv
 {
     /**
      * Constructor
diff --git a/core/DataTable/Renderer/Xml.php b/core/DataTable/Renderer/Xml.php
index ba00e6d39eae06c59dde1d007922d5f7375d623b..4a9fdbdec52207950e11d67d82d9ebd0ab75288a 100644
--- a/core/DataTable/Renderer/Xml.php
+++ b/core/DataTable/Renderer/Xml.php
@@ -8,7 +8,15 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Renderer;
+
+use Exception;
+use Piwik\DataTable\Renderer\Php;
+use Piwik\DataTable\Simple;
+use Piwik\DataTable\Renderer;
 use Piwik\Piwik;
+use Piwik\DataTable;
+use DataTable\Map;
 
 /**
  * XML export of a given DataTable.
@@ -18,9 +26,9 @@ use Piwik\Piwik;
  * Works with recursive DataTable (when a row can be associated with a subDataTable).
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer
+class Xml extends Renderer
 {
     /**
      * Computes the dataTable output and returns the string/binary
@@ -55,7 +63,7 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer
     /**
      * Converts the given data table to an array
      *
-     * @param Piwik_DataTable $table  data table to convert
+     * @param DataTable $table  data table to convert
      * @return array
      */
     protected function getArrayFromDataTable($table)
@@ -64,7 +72,7 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer
             return $table;
         }
 
-        $renderer = new Piwik_DataTable_Renderer_Php();
+        $renderer = new Php();
         $renderer->setRenderSubTables($this->isRenderSubtables());
         $renderer->setSerialize(false);
         $renderer->setTable($table);
@@ -75,7 +83,7 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer
     /**
      * Computes the output for the given data table
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param bool $returnOnlyDataTableXml
      * @param string $prefixLines
      * @return array|string
@@ -84,7 +92,7 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer
     protected function renderTable($table, $returnOnlyDataTableXml = false, $prefixLines = '')
     {
         $array = $this->getArrayFromDataTable($table);
-        if ($table instanceof Piwik_DataTable_Array) {
+        if ($table instanceof DataTable\Map) {
             $out = $this->renderDataTableArray($table, $array, $prefixLines);
 
             if ($returnOnlyDataTableXml) {
@@ -102,7 +110,7 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer
             $out = "<result />";
             return $out;
         }
-        if ($table instanceof Piwik_DataTable_Simple) {
+        if ($table instanceof Simple) {
             if (is_array($array)) {
                 $out = $this->renderDataTableSimple($array);
             } else {
@@ -125,7 +133,7 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer
             return $out;
         }
 
-        if ($table instanceof Piwik_DataTable) {
+        if ($table instanceof DataTable) {
             $out = $this->renderDataTable($array);
             if ($returnOnlyDataTableXml) {
                 return $out;
@@ -191,16 +199,16 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer
                 $result .= $prefixLines . $prefix . "\n";
                 $result .= $this->renderArray($value, $prefixLines . "\t");
                 $result .= $prefixLines . $suffix . "\n";
-            } else if ($value instanceof Piwik_DataTable
-                || $value instanceof Piwik_DataTable_Array
+            } else if ($value instanceof DataTable
+                || $value instanceof DataTable\Map
             ) {
                 if ($value->getRowsCount() == 0) {
                     $result .= $prefixLines . $emptyNode . "\n";
                 } else {
                     $result .= $prefixLines . $prefix . "\n";
-                    if ($value instanceof Piwik_DataTable_Array) {
+                    if ($value instanceof DataTable\Map) {
                         $result .= $this->renderDataTableArray($value, $this->getArrayFromDataTable($value), $prefixLines);
-                    } else if ($value instanceof Piwik_DataTable_Simple) {
+                    } else if ($value instanceof Simple) {
                         $result .= $this->renderDataTableSimple($this->getArrayFromDataTable($value), $prefixLines);
                     } else {
                         $result .= $this->renderDataTable($this->getArrayFromDataTable($value), $prefixLines);
@@ -225,7 +233,7 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer
     /**
      * Computes the output for the given data table array
      *
-     * @param Piwik_DataTable_Array $table
+     * @param DataTable\Map $table
      * @param array $array
      * @param string $prefixLines
      * @return string
@@ -243,7 +251,7 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer
             foreach ($array as $valueAttribute => $value) {
                 if (empty($value)) {
                     $xml .= $prefixLines . "\t<result $nameDescriptionAttribute=\"$valueAttribute\" />\n";
-                } elseif ($value instanceof Piwik_DataTable_Array) {
+                } elseif ($value instanceof DataTable\Map) {
                     $out = $this->renderTable($value, true);
                     //TODO somehow this code is not tested, cover this case
                     $xml .= "\t<result $nameDescriptionAttribute=\"$valueAttribute\">\n$out</result>\n";
@@ -267,7 +275,7 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer
         //    array
         //      'nb_uniq_visitors' => string '28'
         //      'nb_visits' => string '11'
-        if ($firstTable instanceof Piwik_DataTable_Simple) {
+        if ($firstTable instanceof Simple) {
             $xml = '';
             $nameDescriptionAttribute = $table->getKeyName();
             foreach ($array as $valueAttribute => $dataTableSimple) {
@@ -309,7 +317,7 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer
         //          'label' => string 'piwik bis'
         //          'nb_uniq_visitors' => int 20
         //          'nb_visits' => int 120
-        if ($firstTable instanceof Piwik_DataTable) {
+        if ($firstTable instanceof DataTable) {
             $xml = '';
             $nameDescriptionAttribute = $table->getKeyName();
             foreach ($array as $keyName => $arrayForSingleDate) {
@@ -325,14 +333,13 @@ class Piwik_DataTable_Renderer_Xml extends Piwik_DataTable_Renderer
             return $xml;
         }
 
-        if ($firstTable instanceof Piwik_DataTable_Array) {
+        if ($firstTable instanceof DataTable\Map) {
             $xml = '';
             $tables = $table->getArray();
             $nameDescriptionAttribute = $table->getKeyName();
             foreach ($tables as $valueAttribute => $tableInArray) {
                 $out = $this->renderTable($tableInArray, true, $prefixLines . "\t");
                 $xml .= $prefixLines . "\t<result $nameDescriptionAttribute=\"$valueAttribute\">\n" . $out . $prefixLines . "\t</result>\n";
-
             }
             return $xml;
         }
diff --git a/core/DataTable/Row.php b/core/DataTable/Row.php
index 4b2b42a695a0d083df4798cbe92ffb4f3dd4d464..841ff5f5d6781a61463b6ace42b4fb08428dfbd6 100644
--- a/core/DataTable/Row.php
+++ b/core/DataTable/Row.php
@@ -8,7 +8,12 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable;
+
+use Exception;
+use Piwik\DataTable\Manager;
 use Piwik\Metrics;
+use Piwik\DataTable;
 
 /**
  * A DataTable is composed of rows.
@@ -27,9 +32,9 @@ use Piwik\Metrics;
  *              serialized and recorded in the DB millions of times. This object size is critical and must be under control.
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Row
+class Row
 {
     /**
      * List of columns that cannot be summed. An associative array for speed.
@@ -45,7 +50,7 @@ class Piwik_DataTable_Row
      * This array contains the row information:
      * - array indexed by self::COLUMNS contains the columns, pairs of (column names, value)
      * - (optional) array indexed by self::METADATA contains the metadata,  pairs of (metadata name, value)
-     * - (optional) integer indexed by self::DATATABLE_ASSOCIATED contains the ID of the Piwik_DataTable associated to this row.
+     * - (optional) integer indexed by self::DATATABLE_ASSOCIATED contains the ID of the DataTable associated to this row.
      *   This ID can be used to read the DataTable from the DataTable_Manager.
      *
      * @var array
@@ -61,22 +66,21 @@ class Piwik_DataTable_Row
     const METADATA = 1;
     const DATATABLE_ASSOCIATED = 3;
 
-
     /**
      * Efficient load of the Row structure from a well structured php array
      *
      * @param array $row  The row array has the structure
      *                     array(
-     *                           Piwik_DataTable_Row::COLUMNS => array(
+     *                           Row::COLUMNS => array(
      *                                                                 'label' => 'Piwik',
      *                                                                 'column1' => 42,
      *                                                                 'visits' => 657,
      *                                                                 'time_spent' => 155744,
      *                                                                 ),
-     *                            Piwik_DataTable_Row::METADATA => array(
+     *                            Row::METADATA => array(
      *                                                                  'logo' => 'test.png'
      *                                                                  ),
-     *                            Piwik_DataTable_Row::DATATABLE_ASSOCIATED => #Piwik_DataTable object
+     *                            Row::DATATABLE_ASSOCIATED => #DataTable object
      *                                                                         (but in the row only the ID will be stored)
      *                           )
      */
@@ -93,7 +97,7 @@ class Piwik_DataTable_Row
             $this->c[self::METADATA] = $row[self::METADATA];
         }
         if (isset($row[self::DATATABLE_ASSOCIATED])
-            && $row[self::DATATABLE_ASSOCIATED] instanceof Piwik_DataTable
+            && $row[self::DATATABLE_ASSOCIATED] instanceof DataTable
         ) {
             $this->setSubtable($row[self::DATATABLE_ASSOCIATED]);
         }
@@ -134,7 +138,7 @@ class Piwik_DataTable_Row
     public function __destruct()
     {
         if ($this->isSubtableLoaded()) {
-            Piwik_DataTable_Manager::getInstance()->deleteTable($this->getIdSubDataTable());
+            Manager::getInstance()->deleteTable($this->getIdSubDataTable());
             $this->c[self::DATATABLE_ASSOCIATED] = null;
         }
     }
@@ -257,12 +261,12 @@ class Piwik_DataTable_Row
     /**
      * Returns the associated subtable, if one exists.
      *
-     * @return Piwik_DataTable|false
+     * @return DataTable|false
      */
     public function getSubtable()
     {
         if ($this->isSubtableLoaded()) {
-            return Piwik_DataTable_Manager::getInstance()->getTable($this->getIdSubDataTable());
+            return Manager::getInstance()->getTable($this->getIdSubDataTable());
         }
         return false;
     }
@@ -272,31 +276,30 @@ class Piwik_DataTable_Row
      * If this row doesn't have a SubDataTable yet, we create a new one.
      * Then we add the values of the given DataTable to this row's DataTable.
      *
-     * @param Piwik_DataTable $subTable  Table to sum to this row's subDatatable
+     * @param DataTable $subTable  Table to sum to this row's subDatatable
      * @see Piwik_DataTable::addDataTable() for the algorithm used for the sum
      */
-    public function sumSubtable(Piwik_DataTable $subTable)
+    public function sumSubtable(DataTable $subTable)
     {
         if ($this->isSubtableLoaded()) {
             $thisSubTable = $this->getSubtable();
         } else {
-            $thisSubTable = new Piwik_DataTable();
+            $thisSubTable = new DataTable();
             $this->addSubtable($thisSubTable);
         }
         $thisSubTable->setColumnAggregationOperations($subTable->getColumnAggregationOperations());
         $thisSubTable->addDataTable($subTable);
     }
 
-
     /**
      * Set a DataTable to be associated to this row.
      * If the row already has a DataTable associated to it, throws an Exception.
      *
-     * @param Piwik_DataTable $subTable  DataTable to associate to this row
-     * @return Piwik_DataTable Returns $subTable.
+     * @param DataTable $subTable  DataTable to associate to this row
+     * @return DataTable Returns $subTable.
      * @throws Exception
      */
-    public function addSubtable(Piwik_DataTable $subTable)
+    public function addSubtable(DataTable $subTable)
     {
         if (!is_null($this->c[self::DATATABLE_ASSOCIATED])) {
             throw new Exception("Adding a subtable to the row, but it already has a subtable associated.");
@@ -308,10 +311,10 @@ class Piwik_DataTable_Row
      * Set a DataTable to this row. If there is already
      * a DataTable associated, it is simply overwritten.
      *
-     * @param Piwik_DataTable $subTable  DataTable to associate to this row
-     * @return Piwik_DataTable Returns $subTable.
+     * @param DataTable $subTable  DataTable to associate to this row
+     * @return DataTable Returns $subTable.
      */
-    public function setSubtable(Piwik_DataTable $subTable)
+    public function setSubtable(DataTable $subTable)
     {
         // Hacking -1 to ensure value is negative, so we know the table was loaded
         // @see isSubtableLoaded()
@@ -456,22 +459,22 @@ class Piwik_DataTable_Row
      * If the column already exists in $this then we have
      *         this.columns[idThisCol] += $row.columns[idThisCol]
      *
-     * @param Piwik_DataTable_Row $rowToSum
-     * @param bool                $enableCopyMetadata
-     * @param array               $aggregationOperations  for columns that should not be summed, determine which
+     * @param \Piwik\DataTable\Row $rowToSum
+     * @param bool $enableCopyMetadata
+     * @param array $aggregationOperations  for columns that should not be summed, determine which
      *                                                    aggregation should be used (min, max).
      *                                                    format: column name => function name
      */
-    public function sumRow(Piwik_DataTable_Row $rowToSum, $enableCopyMetadata = true, $aggregationOperations = null)
+    public function sumRow(Row $rowToSum, $enableCopyMetadata = true, $aggregationOperations = null)
     {
         foreach ($rowToSum->getColumns() as $columnToSumName => $columnToSumValue) {
             if (!isset(self::$unsummableColumns[$columnToSumName])) // make sure we can add this column
             {
                 $thisColumnValue = $this->getColumn($columnToSumName);
 
-                $operation = (is_array($aggregationOperations) && isset($aggregationOperations[$columnToSumName]) ? 
+                $operation = (is_array($aggregationOperations) && isset($aggregationOperations[$columnToSumName]) ?
                     strtolower($aggregationOperations[$columnToSumName]) : 'sum');
-                
+
                 // max_actions is a core metric that is generated in ArchiveProcess_Day. Therefore, it can be
                 // present in any data table and is not part of the $aggregationOperations mechanism.
                 if ($columnToSumName == Metrics::INDEX_MAX_ACTIONS) {
@@ -536,13 +539,13 @@ class Piwik_DataTable_Row
 
     public function isSummaryRow()
     {
-        return $this->getColumn('label') === Piwik_DataTable::LABEL_SUMMARY_ROW;
+        return $this->getColumn('label') === DataTable::LABEL_SUMMARY_ROW;
     }
 
     /**
      * Helper function: sums 2 values
      *
-     * @param number|bool  $thisColumnValue
+     * @param number|bool $thisColumnValue
      * @param number|array $columnToSumValue
      *
      * @throws Exception
@@ -577,7 +580,7 @@ class Piwik_DataTable_Row
             } else if ($columnToSumValue === false) {
                 return $thisColumnValue;
             } else {
-                throw new Exception("Trying to add two strings values in DataTable_Row::sumRowArray: "
+                throw new Exception("Trying to add two strings values in DataTable\Row::sumRowArray: "
                     . "'$thisColumnValue' + '$columnToSumValue'");
             }
         }
@@ -616,11 +619,11 @@ class Piwik_DataTable_Row
      * - if they have exactly the same columns / metadata
      * - if they have a subDataTable associated, then we check that both of them are the same.
      *
-     * @param Piwik_DataTable_Row $row1  first to compare
-     * @param Piwik_DataTable_Row $row2  second to compare
+     * @param \Piwik\DataTable\Row $row1  first to compare
+     * @param \Piwik\DataTable\Row $row2  second to compare
      * @return bool
      */
-    static public function isEqual(Piwik_DataTable_Row $row1, Piwik_DataTable_Row $row2)
+    static public function isEqual(Row $row1, Row $row2)
     {
         //same columns
         $cols1 = $row1->getColumns();
@@ -651,7 +654,7 @@ class Piwik_DataTable_Row
         ) {
             $subtable1 = $row1->getSubtable();
             $subtable2 = $row2->getSubtable();
-            if (!Piwik_DataTable::isEqual($subtable1, $subtable2)) {
+            if (!DataTable::isEqual($subtable1, $subtable2)) {
                 return false;
             }
         }
diff --git a/core/DataTable/Row/DataTableSummary.php b/core/DataTable/Row/DataTableSummaryRow.php
similarity index 76%
rename from core/DataTable/Row/DataTableSummary.php
rename to core/DataTable/Row/DataTableSummaryRow.php
index c3acafdc665c9c72fb91e302af2056b81a780e70..f4203d9489c1592bd9b2f143b4ebe2fcfed75231 100644
--- a/core/DataTable/Row/DataTableSummary.php
+++ b/core/DataTable/Row/DataTableSummaryRow.php
@@ -8,6 +8,11 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable\Row;
+
+use Piwik\DataTable;
+use Piwik\DataTable\Manager;
+use Piwik\DataTable\Row;
 
 /**
  * This class creates a row from a given DataTable.
@@ -15,15 +20,15 @@
  * - for each numeric column, the returned "summary" column is the sum of all the subRows
  * - for every other column, it is ignored and will not be in the "summary row"
  *
- * @see Piwik_DataTable_Row::sumRow() for more information on the algorithm
+ * @see \DataTable\Row::sumRow() for more information on the algorithm
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Row_DataTableSummary extends Piwik_DataTable_Row
+class DataTableSummaryRow extends Row
 {
     /**
-     * @param Piwik_DataTable $subTable
+     * @param DataTable $subTable
      */
     function __construct($subTable = null)
     {
@@ -41,7 +46,7 @@ class Piwik_DataTable_Row_DataTableSummary extends Piwik_DataTable_Row
     {
         $id = $this->getIdSubDataTable();
         if ($id !== null) {
-            $subtable = Piwik_DataTable_Manager::getInstance()->getTable($id);
+            $subtable = Manager::getInstance()->getTable($id);
             $this->sumTable($subtable);
         }
     }
@@ -49,7 +54,7 @@ class Piwik_DataTable_Row_DataTableSummary extends Piwik_DataTable_Row
     /**
      * Sums a tables row with this one.
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      */
     private function sumTable($table)
     {
diff --git a/core/DataTable/Simple.php b/core/DataTable/Simple.php
index 7189fb0b2e9fce33724c25fc14907d31082c5bd9..d7f9c430ad8c0c5792ff7aae4d9ae33bdc25689f 100644
--- a/core/DataTable/Simple.php
+++ b/core/DataTable/Simple.php
@@ -8,21 +8,22 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\DataTable;
 
 /**
- * The DataTable_Simple is used to provide an easy way to create simple DataGrid.
- * A DataTable_Simple actually is a DataTable with 2 columns: 'label' and 'value'.
+ * The DataTable\Simple is used to provide an easy way to create simple DataGrid.
+ * A DataTable\Simple is a DataTable with 2 columns: 'label' and 'value'.
  *
- * It is usually best to return a DataTable_Simple instead of
+ * It is usually best to return a DataTable\Simple instead of
  * a PHP array (or other custom data structure) in API methods:
  * - the generic filters can be applied automatically (offset, limit, pattern search, sort, etc.)
  * - the renderer can be applied (XML, PHP, HTML, etc.)
  * So you don't have to write specific renderer for your data, it is already available in all the formats supported natively by Piwik.
  *
  * @package Piwik
- * @subpackage Piwik_DataTable
+ * @subpackage DataTable
  */
-class Piwik_DataTable_Simple extends Piwik_DataTable
+class Simple extends DataTable
 {
     /**
      * Loads (append) in the DataTable the array information
diff --git a/core/Date.php b/core/Date.php
index 0753514cf93bccafa4f59c93136cdef85f0261ed..3fb96665e0fddef808f0eb613432f1070cac5ada 100644
--- a/core/Date.php
+++ b/core/Date.php
@@ -9,12 +9,15 @@
  * @package Piwik
  */
 
+namespace Piwik;
+use Exception;
+
 /**
  * Date object widely used in Piwik.
  *
  * @package Piwik
  */
-class Piwik_Date
+class Date
 {
     /**
      * The stored timestamp is always UTC based.
@@ -33,7 +36,7 @@ class Piwik_Date
     const DATE_TIME_FORMAT = 'Y-m-d H:i:s';
 
     /**
-     * Builds a Piwik_Date object
+     * Builds a Date object
      *
      * @param int $timestamp
      * @param string $timezone
@@ -42,21 +45,21 @@ class Piwik_Date
     protected function __construct($timestamp, $timezone = 'UTC')
     {
         if (!is_int($timestamp)) {
-            throw new Exception("Piwik_Date is expecting a unix timestamp");
+            throw new Exception("Date is expecting a unix timestamp");
         }
         $this->timezone = $timezone;
         $this->timestamp = $timestamp;
     }
 
     /**
-     * Returns a Piwik_Date objects.
+     * Returns a Date objects.
      *
-     * @param string|self $dateString  'today' 'yesterday' or any YYYY-MM-DD or timestamp
+     * @param string|\Piwik\Date $dateString  'today' 'yesterday' or any YYYY-MM-DD or timestamp
      * @param string $timezone    if specified, the dateString will be relative to this $timezone.
      *                                  For example, today in UTC+12 will be a timestamp in the future for UTC.
      *                                  This is different from using ->setTimezone()
      * @throws Exception
-     * @return Piwik_Date
+     * @return \Piwik\Date
      */
     public static function factory($dateString, $timezone = null)
     {
@@ -83,7 +86,7 @@ class Piwik_Date
         ) {
             throw $invalidDateException;
         } else {
-            $date = new Piwik_Date($dateString);
+            $date = new Date($dateString);
         }
         $timestamp = $date->getTimestamp();
         // can't be doing web analytics before the 1st website
@@ -96,7 +99,7 @@ class Piwik_Date
         }
 
         $timestamp = self::adjustForTimezone($timestamp, $timezone);
-        return Piwik_Date::factory($timestamp);
+        return Date::factory($timestamp);
     }
 
     /**
@@ -117,7 +120,7 @@ class Piwik_Date
     public function getDateStartUTC()
     {
         $dateStartUTC = gmdate('Y-m-d', $this->timestamp);
-        $date = Piwik_Date::factory($dateStartUTC)->setTimezone($this->timezone);
+        $date = Date::factory($dateStartUTC)->setTimezone($this->timezone);
         return $date->toString(self::DATE_TIME_FORMAT);
     }
 
@@ -129,7 +132,7 @@ class Piwik_Date
     public function getDateEndUTC()
     {
         $dateEndUTC = gmdate('Y-m-d 23:59:59', $this->timestamp);
-        $date = Piwik_Date::factory($dateEndUTC)->setTimezone($this->timezone);
+        $date = Date::factory($dateEndUTC)->setTimezone($this->timezone);
         return $date->toString(self::DATE_TIME_FORMAT);
     }
 
@@ -139,11 +142,11 @@ class Piwik_Date
      * Doesn't modify $this
      *
      * @param string $timezone  'UTC', 'Europe/London', ...
-     * @return Piwik_Date
+     * @return \Piwik\Date
      */
     public function setTimezone($timezone)
     {
-        return new Piwik_Date($this->timestamp, $timezone);
+        return new Date($this->timestamp, $timezone);
     }
 
     /**
@@ -238,10 +241,10 @@ class Piwik_Date
     /**
      * Returns true if the current date is older than the given $date
      *
-     * @param Piwik_Date $date
+     * @param \Piwik\Date $date
      * @return bool
      */
-    public function isLater(Piwik_Date $date)
+    public function isLater(Date $date)
     {
         return $this->getTimestamp() > $date->getTimestamp();
     }
@@ -249,10 +252,10 @@ class Piwik_Date
     /**
      * Returns true if the current date is earlier than the given $date
      *
-     * @param Piwik_Date $date
+     * @param \Piwik\Date $date
      * @return bool
      */
-    public function isEarlier(Piwik_Date $date)
+    public function isEarlier(Date $date)
     {
         return $this->getTimestamp() < $date->getTimestamp();
     }
@@ -284,10 +287,10 @@ class Piwik_Date
      * Returns 0 if equal, -1 if current week is earlier or 1 if current week is later
      * Example: 09.Jan.2007 13:07:25 -> compareWeek(2); -> 0
      *
-     * @param Piwik_Date $date
+     * @param \Piwik\Date $date
      * @return int  0 = equal, 1 = later, -1 = earlier
      */
-    public function compareWeek(Piwik_Date $date)
+    public function compareWeek(Date $date)
     {
         $currentWeek = date('W', $this->getTimestamp());
         $toCompareWeek = date('W', $date->getTimestamp());
@@ -305,10 +308,10 @@ class Piwik_Date
      * Returns 0 if equal, -1 if current month is earlier or 1 if current month is later
      * For example: 10.03.2000 -> 15.03.1950 -> 0
      *
-     * @param Piwik_Date $date  Month to compare
+     * @param \Piwik\Date $date  Month to compare
      * @return int  0 = equal, 1 = later, -1 = earlier
      */
-    public function compareMonth(Piwik_Date $date)
+    public function compareMonth(Date $date)
     {
         $currentMonth = date('n', $this->getTimestamp());
         $toCompareMonth = date('n', $date->getTimestamp());
@@ -328,47 +331,47 @@ class Piwik_Date
      */
     public function isToday()
     {
-        return $this->toString('Y-m-d') === Piwik_Date::factory('today', $this->timezone)->toString('Y-m-d');
+        return $this->toString('Y-m-d') === Date::factory('today', $this->timezone)->toString('Y-m-d');
     }
 
     /**
      * Returns a date object set to now (same as today, except that the time is also set)
      *
-     * @return Piwik_Date
+     * @return \Piwik\Date
      */
     public static function now()
     {
-        return new Piwik_Date(time());
+        return new Date(time());
     }
 
     /**
      * Returns a date object set to today midnight
      *
-     * @return Piwik_Date
+     * @return \Piwik\Date
      */
     public static function today()
     {
-        return new Piwik_Date(strtotime(date("Y-m-d 00:00:00")));
+        return new Date(strtotime(date("Y-m-d 00:00:00")));
     }
 
     /**
      * Returns a date object set to yesterday midnight
      *
-     * @return Piwik_Date
+     * @return \Piwik\Date
      */
     public static function yesterday()
     {
-        return new Piwik_Date(strtotime("yesterday"));
+        return new Date(strtotime("yesterday"));
     }
 
     /**
      * Returns a date object set to yesterday same time of day
      *
-     * @return Piwik_Date
+     * @return \Piwik\Date
      */
     public static function yesterdaySameTime()
     {
-        return new Piwik_Date(strtotime("yesterday " . date('H:i:s')));
+        return new Date(strtotime("yesterday " . date('H:i:s')));
     }
 
     /**
@@ -376,11 +379,11 @@ class Piwik_Date
      * Doesn't modify $this
      *
      * @param string $time  HH:MM:SS
-     * @return Piwik_Date The new date with the time part set
+     * @return \Piwik\Date The new date with the time part set
      */
     public function setTime($time)
     {
-        return new Piwik_Date(strtotime(date("Y-m-d", $this->timestamp) . " $time"), $this->timezone);
+        return new Date(strtotime(date("Y-m-d", $this->timestamp) . " $time"), $this->timezone);
     }
 
     /**
@@ -389,7 +392,7 @@ class Piwik_Date
      * Doesn't modify $this
      *
      * @param int $day  Day eg. 31
-     * @return Piwik_Date  new date
+     * @return \Piwik\Date  new date
      */
     public function setDay($day)
     {
@@ -402,7 +405,7 @@ class Piwik_Date
             $day,
             date('Y', $ts)
         );
-        return new Piwik_Date($result, $this->timezone);
+        return new Date($result, $this->timezone);
     }
 
     /**
@@ -411,7 +414,7 @@ class Piwik_Date
      * Doesn't modify $this
      *
      * @param int $year  2010
-     * @return Piwik_Date  new date
+     * @return \Piwik\Date  new date
      */
     public function setYear($year)
     {
@@ -424,16 +427,16 @@ class Piwik_Date
             date('j', $ts),
             $year
         );
-        return new Piwik_Date($result, $this->timezone);
+        return new Date($result, $this->timezone);
     }
 
     /**
-     * Subtracts days from the existing date object and returns a new Piwik_Date object
+     * Subtracts days from the existing date object and returns a new Date object
      * Returned is the new date object
      * Doesn't modify $this
      *
      * @param int $n
-     * @return Piwik_Date  new date
+     * @return \Piwik\Date  new date
      */
     public function subDay($n)
     {
@@ -441,16 +444,16 @@ class Piwik_Date
             return clone $this;
         }
         $ts = strtotime("-$n day", $this->timestamp);
-        return new Piwik_Date($ts, $this->timezone);
+        return new Date($ts, $this->timezone);
     }
 
     /**
-     * Subtracts weeks from the existing date object and returns a new Piwik_Date object
+     * Subtracts weeks from the existing date object and returns a new Date object
      * Returned is the new date object
      * Doesn't modify $this
      *
      * @param int $n
-     * @return Piwik_Date  new date
+     * @return \Piwik\Date  new date
      */
     public function subWeek($n)
     {
@@ -463,7 +466,7 @@ class Piwik_Date
      * Doesn't modify $this
      *
      * @param int $n
-     * @return Piwik_Date  new date
+     * @return \Piwik\Date  new date
      */
     public function subMonth($n)
     {
@@ -479,7 +482,7 @@ class Piwik_Date
             1, // we set the day to 1
             date('Y', $ts)
         );
-        return new Piwik_Date($result, $this->timezone);
+        return new Date($result, $this->timezone);
     }
 
     /**
@@ -488,7 +491,7 @@ class Piwik_Date
      * Doesn't modify $this
      *
      * @param int $n
-     * @return Piwik_Date  new date
+     * @return \Piwik\Date  new date
      */
     public function subYear($n)
     {
@@ -504,7 +507,7 @@ class Piwik_Date
             1, // we set the day to 1
             date('Y', $ts) - $n
         );
-        return new Piwik_Date($result, $this->timezone);
+        return new Date($result, $this->timezone);
     }
 
     /**
@@ -539,12 +542,12 @@ class Piwik_Date
      * Doesn't modify $this
      *
      * @param int $n  Number of days to add
-     * @return Piwik_Date  new date
+     * @return \Piwik\Date  new date
      */
     public function addDay($n)
     {
         $ts = strtotime("+$n day", $this->timestamp);
-        return new Piwik_Date($ts, $this->timezone);
+        return new Date($ts, $this->timezone);
     }
 
     /**
@@ -553,12 +556,12 @@ class Piwik_Date
      * Doesn't modify $this
      *
      * @param int $n  Number of hours to add
-     * @return Piwik_Date new date
+     * @return \Piwik\Date new date
      */
     public function addHour($n)
     {
         $ts = self::addHourTo($this->timestamp, $n);
-        return new Piwik_Date($ts, $this->timezone);
+        return new Date($ts, $this->timezone);
     }
 
     /**
@@ -599,7 +602,7 @@ class Piwik_Date
      * Doesn't modify $this
      *
      * @param int $n  Number of hours to substract
-     * @return Piwik_Date  new date
+     * @return \Piwik\Date  new date
      */
     public function subHour($n)
     {
@@ -613,7 +616,7 @@ class Piwik_Date
      *
      * @param int $n
      * @param string $period  period to add (WEEK, DAY,...)
-     * @return Piwik_Date  new date
+     * @return \Piwik\Date  new date
      */
     public function addPeriod($n, $period)
     {
@@ -622,7 +625,7 @@ class Piwik_Date
         } else {
             $ts = strtotime("+$n $period", $this->timestamp);
         }
-        return new Piwik_Date($ts, $this->timezone);
+        return new Date($ts, $this->timezone);
     }
 
     /**
@@ -632,7 +635,7 @@ class Piwik_Date
      *
      * @param int $n
      * @param string $period  period to sub
-     * @return Piwik_Date  new date
+     * @return \Piwik\Date  new date
      */
     public function subPeriod($n, $period)
     {
diff --git a/core/Db/Adapter.php b/core/Db/Adapter.php
index de3412e9a60dd7e8878fcecd9866cae5a42b993a..db9214b82a77c14a5bbb91bdc676f063ae83c24e 100644
--- a/core/Db/Adapter.php
+++ b/core/Db/Adapter.php
@@ -8,6 +8,7 @@
  * @category Piwik
  * @package Piwik
  */
+use Piwik\Loader;
 
 /**
  * @package Piwik
@@ -39,7 +40,7 @@ class Piwik_Db_Adapter
         }
 
         $className = self::getAdapterClassName($adapterName);
-        Piwik_Loader::loadClass($className);
+        Loader::loadClass($className);
 
         /*
          * 5.2.1 fixes various bugs with references that caused PDO_MYSQL getConnection()
diff --git a/core/Db/Schema/Myisam.php b/core/Db/Schema/Myisam.php
index a0eb2a70384bedc10dedfc8e8df82d833367e255..274e6f82e0c041534382a618a3b5070eef38889e 100644
--- a/core/Db/Schema/Myisam.php
+++ b/core/Db/Schema/Myisam.php
@@ -11,6 +11,7 @@
 use Piwik\Config;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
 
 /**
  * MySQL schema
@@ -535,7 +536,7 @@ class Piwik_Db_Schema_Myisam implements Piwik_Db_Schema_Interface
         // note that the token_auth value is anonymous, which is assigned by default as well in the Login plugin
         $db = Zend_Registry::get('db');
         $db->query("INSERT INTO " . Common::prefixTable("user") . "
-					VALUES ( 'anonymous', '', 'anonymous', 'anonymous@example.org', 'anonymous', '" . Piwik_Date::factory('now')->getDatetime() . "' );");
+					VALUES ( 'anonymous', '', 'anonymous', 'anonymous@example.org', 'anonymous', '" . Date::factory('now')->getDatetime() . "' );");
     }
 
     /**
diff --git a/core/EventDispatcher.php b/core/EventDispatcher.php
index 8496013cabbd38c43b210acd5e56c54f128d0b8f..7c311e4dd44e691936f2a6b0c8f8f13a5715011a 100644
--- a/core/EventDispatcher.php
+++ b/core/EventDispatcher.php
@@ -9,11 +9,14 @@
  * @package Piwik
  */
 
+namespace Piwik;
+use Piwik\Plugin;
+
 /**
  * This class allows code to post events from anywhere in Piwik and for
  * plugins to associate callbacks to be executed when events are posted.
  */
-class Piwik_EventDispatcher
+class EventDispatcher
 {
     // implementation details for postEvent
     const EVENT_CALLBACK_GROUP_FIRST = 0;
@@ -31,7 +34,7 @@ class Piwik_EventDispatcher
     public static function getInstance()
     {
         if (self::$instance === null) {
-            self::$instance = new Piwik_EventDispatcher();
+            self::$instance = new EventDispatcher();
         }
         return self::$instance;
     }
@@ -66,7 +69,7 @@ class Piwik_EventDispatcher
      *                      loaded after the event is fired.
      * @param array|null $plugins The plugins to post events to. If null, the event
      *                            is posted to all plugins. The elements of this array
-     *                            can be either the Piwik_Plugin objects themselves
+     *                            can be either the Plugin objects themselves
      *                            or their string names.
      */
     public function postEvent($eventName, $params, $pending = false, $plugins = null)
@@ -76,7 +79,7 @@ class Piwik_EventDispatcher
         }
         
         if (empty($plugins)) {
-            $plugins = PluginsManager::getInstance()->getLoadedPlugins();
+            $plugins = \Piwik\PluginsManager::getInstance()->getLoadedPlugins();
         }
         
         $callbacks = array();
@@ -84,7 +87,7 @@ class Piwik_EventDispatcher
         // collect all callbacks to execute
         foreach ($plugins as $plugin) {
             if (is_string($plugin)) {
-                $plugin = PluginsManager::getInstance()->getLoadedPlugin($plugin);
+                $plugin = \Piwik\PluginsManager::getInstance()->getLoadedPlugin($plugin);
             }
             
             $hooks = $plugin->getListHooksRegistered();
@@ -150,7 +153,7 @@ class Piwik_EventDispatcher
     /**
      * Re-posts all pending events to the given plugin.
      * 
-     * @param Piwik_Plugin $plugin
+     * @param Plugin $plugin
      */
     public function postPendingEventsTo($plugin)
     {
@@ -182,27 +185,3 @@ class Piwik_EventDispatcher
     }
 }
 
-/**
- * Post an event to the dispatcher which will notice the observers.
- *
- * @param string $eventName  The event name.
- * @param array $params The parameter array to forward to observer callbacks.
- * @param bool $pending
- * @param null $plugins
- * @return void
- */
-function Piwik_PostEvent($eventName, $params = array(), $pending = false, $plugins = null)
-{
-    Piwik_EventDispatcher::getInstance()->postEvent($eventName, $params, $pending, $plugins);
-}
-
-/**
- * Register an action to execute for a given event
- *
- * @param string $eventName  Name of event
- * @param callable $function  Callback hook
- */
-function Piwik_AddAction($eventName, $function)
-{
-    Piwik_EventDispatcher::getInstance()->addObserver($eventName, $function);
-}
diff --git a/core/FrontController.php b/core/FrontController.php
index cda6d1dae2400415413ef8b8adf6332949f8263a..9d777ed4b6408d7151e739c9c5f097446fe59466 100644
--- a/core/FrontController.php
+++ b/core/FrontController.php
@@ -12,7 +12,7 @@ use Piwik\Config;
 use Piwik\Piwik;
 use Piwik\Common;
 use Piwik\Access;
-use Piwik\PluginsManager;
+use Piwik\Translate;
 
 /**
  * @see core/PluginsManager.php
@@ -97,7 +97,7 @@ class Piwik_FrontController
             throw new Exception("Invalid module name '$module'");
         }
 
-        if (!PluginsManager::getInstance()->isPluginActivated($module)) {
+        if (!\Piwik\PluginsManager::getInstance()->isPluginActivated($module)) {
             throw new Piwik_FrontController_PluginDeactivatedException($module);
         }
 
@@ -236,7 +236,7 @@ class Piwik_FrontController
             Piwik::dieIfDirectoriesNotWritable($directoriesToCheck);
             Common::assignCliParametersToRequest();
 
-            Piwik_Translate::getInstance()->loadEnglishTranslation();
+            Translate::getInstance()->loadEnglishTranslation();
 
             $exceptionToThrow = $this->createConfigObject();
 
@@ -247,7 +247,7 @@ class Piwik_FrontController
             $this->handleMaintenanceMode();
             $this->handleSSLRedirection();
 
-            $pluginsManager = PluginsManager::getInstance();
+            $pluginsManager = \Piwik\PluginsManager::getInstance();
             $pluginsToLoad = Config::getInstance()->Plugins['Plugins'];
 
             $pluginsManager->loadPlugins($pluginsToLoad);
@@ -274,7 +274,7 @@ class Piwik_FrontController
 
             Piwik_PostEvent('FrontController.dispatchCoreAndPluginUpdatesScreen');
 
-            PluginsManager::getInstance()->installLoadedPlugins();
+            \Piwik\PluginsManager::getInstance()->installLoadedPlugins();
 
             // ensure the current Piwik URL is known for later use
             if (method_exists('Piwik\Piwik', 'getPiwikUrl')) {
@@ -299,7 +299,7 @@ class Piwik_FrontController
             }
             Piwik::raiseMemoryLimitIfNecessary();
 
-            Piwik_Translate::getInstance()->reloadLanguage();
+            Translate::getInstance()->reloadLanguage();
             $pluginsManager->postLoadPlugins();
 
             Piwik_PostEvent('FrontController.checkForUpdates');
diff --git a/core/JqplotDataGenerator.php b/core/JqplotDataGenerator.php
index 3a1abd16b65d6d5d84fa6e17f878ee4b4c7b6505..4ae3c493b2d26f24b24c2528b2f788eda0749627 100644
--- a/core/JqplotDataGenerator.php
+++ b/core/JqplotDataGenerator.php
@@ -11,6 +11,7 @@
 
 use Piwik\Common;
 use Piwik\Metrics;
+use Piwik\DataTable;
 
 /**
  * Generates JSON data used to configure and populate JQPlot graphs.
@@ -71,7 +72,7 @@ class Piwik_JqplotDataGenerator
     /**
      * Generates JSON graph data and returns it.
      * 
-     * @param Piwik_DataTable|Piwik_DataTable_Array $dataTable
+     * @param DataTable|DataTable\Map $dataTable
      * @return string
      */
     public function generate($dataTable)
diff --git a/core/JqplotDataGenerator/Evolution.php b/core/JqplotDataGenerator/Evolution.php
index 50fd2a61a2b3f242554e017658f8ae075d4d162c..47c85f072425a042a3d91ebb5548b83fe81ef73e 100644
--- a/core/JqplotDataGenerator/Evolution.php
+++ b/core/JqplotDataGenerator/Evolution.php
@@ -10,6 +10,7 @@
  */
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\DataTable;
 
 /**
  * Generates JQPlot JSON data/config for evolution graphs.
@@ -29,8 +30,8 @@ class Piwik_JqplotDataGenerator_Evolution extends Piwik_JqplotDataGenerator
     protected function initChartObjectData($dataTable)
     {
         // if the loaded datatable is a simple DataTable, it is most likely a plugin plotting some custom data
-        // we don't expect plugin developers to return a well defined Piwik_DataTable_Array
-        if ($dataTable instanceof Piwik_DataTable) {
+        // we don't expect plugin developers to return a well defined Set
+        if ($dataTable instanceof DataTable) {
             return parent::initChartObjectData($dataTable);
         }
 
diff --git a/core/Loader.php b/core/Loader.php
index c0d2d1462234a1ef34b08dd4a06ab4e05e1e19e3..fc913112e931c541aceeba7e9e8cfe8d71e8e8d8 100644
--- a/core/Loader.php
+++ b/core/Loader.php
@@ -9,12 +9,16 @@
  * @package Piwik
  */
 
+namespace Piwik;
+
+use Exception;
+
 /**
  * Piwik auto loader
  *
  * @package Piwik
  */
-class Piwik_Loader
+class Loader
 {
     // our class search path; current directory is intentionally excluded
     protected static $dirs = array('/core/', '/plugins/');
@@ -42,8 +46,9 @@ class Piwik_Loader
             return $class;
         }
 
-        if (!strncmp($class, 'Piwik/', 6)) {
-            return substr($class, 6);
+        $vendorPrefixToRemove = 'Piwik/';
+        if (strpos($class, $vendorPrefixToRemove) === 0) {
+            return substr($class, strlen($vendorPrefixToRemove));
         }
 
         return $class;
@@ -58,8 +63,9 @@ class Piwik_Loader
     public static function loadClass($class)
     {
         $classPath = self::getClassFileName($class);
-        if ($class == 'Piwik'
-            || !strncmp($class, 'Piwik', 5) /* catches Piwik_ and Piwik\ */ ) {
+        if (strpos($class, '\Piwik') === 0
+            || strpos($class, 'Piwik') === 0)
+        {
             // Piwik classes are in core/ or plugins/
             do {
                 // auto-discover class location
@@ -107,7 +113,7 @@ class Piwik_Loader
 // Note: only one __autoload per PHP instance
 if (function_exists('spl_autoload_register')) {
     // use the SPL autoload stack
-    spl_autoload_register(array('Piwik_Loader', 'autoload'));
+    spl_autoload_register(array('Piwik\Loader', 'autoload'));
 
     // preserve any existing __autoload
     if (function_exists('__autoload')) {
@@ -116,6 +122,6 @@ if (function_exists('spl_autoload_register')) {
 } else {
     function __autoload($class)
     {
-        Piwik_Loader::autoload($class);
+        Loader::autoload($class);
     }
 }
diff --git a/core/Period.php b/core/Period.php
index f816b58c02fd59ff7752a0f4797ba4452cc432eb..7edf4ea81083ef7a121532746b4d4546c80f85a3 100644
--- a/core/Period.php
+++ b/core/Period.php
@@ -11,11 +11,11 @@
 namespace Piwik;
 use Exception;
 use Piwik\Piwik;
-use Piwik_Date;
-use Piwik_Period_Day;
-use Piwik_Period_Month;
-use Piwik\Period_Range;
-use Piwik_Period_Week;
+use Piwik\Date;
+use Piwik\Period\Day;
+use Piwik\Period\Month;
+use Piwik\Period\Range;
+use Piwik\Period\Week;
 use Piwik_Period_Year;
 
 /**
@@ -47,14 +47,14 @@ abstract class Period
     protected $label = null;
 
     /**
-     * @var Piwik_Date
+     * @var Date
      */
     protected $date = null;
     static protected $errorAvailablePeriods = 'day, week, month, year, range';
 
     /**
      * Constructor
-     * @param Piwik_Date $date
+     * @param Date $date
      */
     public function __construct($date)
     {
@@ -64,23 +64,23 @@ abstract class Period
 
     /**
      * @param string $strPeriod "day", "week", "month", "year"
-     * @param Piwik_Date $date Piwik_Date object
+     * @param Date $date Date object
      * @throws Exception
      * @return \Piwik\Period
      */
-    static public function factory($strPeriod, Piwik_Date $date)
+    static public function factory($strPeriod, Date $date)
     {
         switch ($strPeriod) {
             case 'day':
-                return new Piwik_Period_Day($date);
+                return new Day($date);
                 break;
 
             case 'week':
-                return new Piwik_Period_Week($date);
+                return new Week($date);
                 break;
 
             case 'month':
-                return new Piwik_Period_Month($date);
+                return new Month($date);
                 break;
 
             case 'year':
@@ -106,13 +106,13 @@ abstract class Period
         return
             is_string($dateString)
             && (preg_match('/^(last|previous){1}([0-9]*)$/D', $dateString, $regs)
-            || Period_Range::parseDateRange($dateString))
+            || Range::parseDateRange($dateString))
             && $period != 'range';
     }
 
     /**
      * The advanced factory method is easier to use from the API than the factory
-     * method above. It doesn't require an instance of Piwik_Date and works for
+     * method above. It doesn't require an instance of Date and works for
      * period=range. Generally speaking, anything that can be passed as period
      * and range to the API methods can directly be forwarded to this factory
      * method in order to get a suitable instance of Period.
@@ -124,9 +124,9 @@ abstract class Period
     static public function advancedFactory($strPeriod, $strDate)
     {
         if (Period::isMultiplePeriod($strDate, $strPeriod) || $strPeriod == 'range') {
-            return new Period_Range($strPeriod, $strDate);
+            return new Range($strPeriod, $strDate);
         }
-        return Period::factory($strPeriod, Piwik_Date::factory($strDate));
+        return Period::factory($strPeriod, Date::factory($strDate));
     }
 
     /**
@@ -145,15 +145,15 @@ abstract class Period
         }
 
         if ($period == 'range') {
-            $oPeriod = new Period_Range('range', $date, $timezone, Piwik_Date::factory('today', $timezone));
+            $oPeriod = new Period\Range('range', $date, $timezone, Date::factory('today', $timezone));
         } else {
-            if (!($date instanceof Piwik_Date)) {
+            if (!($date instanceof Date)) {
                 if ($date == 'now' || $date == 'today') {
-                    $date = date('Y-m-d', Piwik_Date::factory('now', $timezone)->getTimestamp());
+                    $date = date('Y-m-d', Date::factory('now', $timezone)->getTimestamp());
                 } elseif ($date == 'yesterday' || $date == 'yesterdaySameTime') {
-                    $date = date('Y-m-d', Piwik_Date::factory('now', $timezone)->subDay(1)->getTimestamp());
+                    $date = date('Y-m-d', Date::factory('now', $timezone)->subDay(1)->getTimestamp());
                 }
-                $date = Piwik_Date::factory($date);
+                $date = Date::factory($date);
             }
             $oPeriod = Period::factory($period, $date);
         }
@@ -163,7 +163,7 @@ abstract class Period
     /**
      * Returns the first day of the period
      *
-     * @return Piwik_Date First day of the period
+     * @return Date First day of the period
      */
     public function getDateStart()
     {
@@ -185,7 +185,7 @@ abstract class Period
     /**
      * Returns the last day of the period ; can be a date in the future
      *
-     * @return Piwik_Date Last day of the period
+     * @return Date Last day of the period
      */
     public function getDateEnd()
     {
@@ -219,7 +219,7 @@ abstract class Period
     }
 
     /**
-     * @return Piwik_Date
+     * @return Date
      */
     protected function getDate()
     {
@@ -227,16 +227,16 @@ abstract class Period
     }
 
     /**
-     * Checks if the given date is an instance of Piwik_Date
+     * Checks if the given date is an instance of Date
      *
-     * @param Piwik_Date $date
+     * @param Date $date
      *
      * @throws Exception
      */
     protected function checkInputDate($date)
     {
-        if (!($date instanceof Piwik_Date)) {
-            throw new Exception("The date must be a Piwik_Date object. " . var_export($date, true));
+        if (!($date instanceof Date)) {
+            throw new Exception("The date must be a Date object. " . var_export($date, true));
         }
     }
 
diff --git a/core/Period/Day.php b/core/Period/Day.php
index 198662dbe7a2c75d8310b072f8188144b8da91cc..a4ed18fbba1bc99b3a37fbbeb8eb9fef247488aa 100644
--- a/core/Period/Day.php
+++ b/core/Period/Day.php
@@ -8,13 +8,15 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\Period;
+use Exception;
 use Piwik\Period;
 
 /**
  * @package Piwik
  * @subpackage Period
  */
-class Piwik_Period_Day extends Period
+class Day extends Period
 {
     protected $label = 'day';
 
@@ -76,7 +78,7 @@ class Piwik_Period_Day extends Period
      */
     public function addSubperiod($date)
     {
-        throw new Exception("Adding a subperiod is not supported for Piwik_Period_Day");
+        throw new Exception("Adding a subperiod is not supported for Day");
     }
 
     /**
diff --git a/core/Period/Month.php b/core/Period/Month.php
index c65bc4179e086ae524995a20a0fbea61016f6a4a..5434bd6efe7da97c4c1dbbe1841ee0a77079f5c8 100644
--- a/core/Period/Month.php
+++ b/core/Period/Month.php
@@ -8,13 +8,15 @@
  * @category Piwik
  * @package Piwik
  */
-use Piwik\Period;
+namespace Piwik\Period;
+
+use Piwik\Period\Day;
 
 /**
  * @package Piwik
  * @subpackage Period
  */
-class Piwik_Period_Month extends Period
+class Month extends Period
 {
     protected $label = 'month';
 
@@ -68,7 +70,7 @@ class Piwik_Period_Month extends Period
         $startMonth = $date->setDay(1);
         $currentDay = clone $startMonth;
         while ($currentDay->compareMonth($startMonth) == 0) {
-            $this->addSubperiod(new Piwik_Period_Day($currentDay));
+            $this->addSubperiod(new Day($currentDay));
             $currentDay = $currentDay->addDay(1);
         }
     }
diff --git a/core/Period/Range.php b/core/Period/Range.php
index 8922adfa837c4af393e093e6d93a111b97493f24..65e4854de0b2533afe74daaf4101d46f40bc8ae6 100644
--- a/core/Period/Range.php
+++ b/core/Period/Range.php
@@ -8,13 +8,14 @@
  * @category Piwik
  * @package Piwik
  */
-namespace Piwik;
+namespace Piwik\Period;
+
 use Exception;
 use Piwik\Common;
 use Piwik\Period;
-use Piwik_Date;
-use Piwik_Period_Month;
-use Piwik_Period_Week;
+use Piwik\Date;
+use Piwik\Period\Month;
+use Piwik\Period\Week;
 
 /**
  * from a starting date to an ending date
@@ -22,7 +23,7 @@ use Piwik_Period_Week;
  * @package Piwik
  * @subpackage Period
  */
-class Period_Range extends Period
+class Range extends Period
 {
     protected $label = 'range';
 
@@ -30,7 +31,7 @@ class Period_Range extends Period
      * @param string $strPeriod
      * @param string $strDate
      * @param string $timezone
-     * @param bool|Piwik_Date $today
+     * @param bool|Date $today
      */
     public function __construct($strPeriod, $strDate, $timezone = 'UTC', $today = false)
     {
@@ -39,7 +40,7 @@ class Period_Range extends Period
         $this->defaultEndDate = null;
         $this->timezone = $timezone;
         if ($today === false) {
-            $today = Piwik_Date::factory('today', $this->timezone);
+            $today = Date::factory('today', $this->timezone);
         }
         $this->today = $today;
     }
@@ -74,7 +75,7 @@ class Period_Range extends Period
     /**
      * Returns the start date of the period
      *
-     * @return Piwik_Date
+     * @return Date
      * @throws Exception
      */
     public function getDateStart()
@@ -100,12 +101,12 @@ class Period_Range extends Period
     /**
      *
      * @param string $period
-     * @param Piwik_Date $date
+     * @param Date $date
      * @param int $n
      * @throws Exception
-     * @return Piwik_Date
+     * @return Date
      */
-    static public function removePeriod($period, Piwik_Date $date, $n)
+    static public function removePeriod($period, Date $date, $n)
     {
         switch ($period) {
             case 'day':
@@ -155,9 +156,9 @@ class Period_Range extends Period
     /**
      * Sets the default end date of the period
      *
-     * @param Piwik_Date $oDate
+     * @param Date $oDate
      */
-    public function setDefaultEndDate(Piwik_Date $oDate)
+    public function setDefaultEndDate(Date $oDate)
     {
         $this->defaultEndDate = $oDate;
     }
@@ -180,7 +181,7 @@ class Period_Range extends Period
             if (!is_null($this->defaultEndDate)) {
                 $defaultEndDate = $this->defaultEndDate;
             } else {
-                $defaultEndDate = Piwik_Date::factory('now', $this->timezone);
+                $defaultEndDate = Date::factory('now', $this->timezone);
             }
 
             $period = $this->strPeriod;
@@ -201,10 +202,10 @@ class Period_Range extends Period
             $lastN = abs($lastN);
 
             $startDate = self::removePeriod($period, $endDate, $lastN);
-        } elseif ($dateRange = Period_Range::parseDateRange($this->strDate)) {
+        } elseif ($dateRange = Range::parseDateRange($this->strDate)) {
             $strDateStart = $dateRange[1];
             $strDateEnd = $dateRange[2];
-            $startDate = Piwik_Date::factory($strDateStart);
+            $startDate = Date::factory($strDateStart);
 
             if ($strDateEnd == 'today') {
                 $strDateEnd = 'now';
@@ -216,7 +217,7 @@ class Period_Range extends Period
             if (strpos($strDateEnd, '-') === false) {
                 $timezone = $this->timezone;
             }
-            $endDate = Piwik_Date::factory($strDateEnd, $timezone);
+            $endDate = Date::factory($strDateEnd, $timezone);
         } else {
             throw new Exception(Piwik_TranslateException('General_ExceptionInvalidDateRange', array($this->strDate, ' \'lastN\', \'previousN\', \'YYYY-MM-DD,YYYY-MM-DD\'')));
         }
@@ -251,7 +252,7 @@ class Period_Range extends Period
     /**
      * Returns the end date of the period
      *
-     * @return null|Piwik_Date
+     * @return null|Date
      */
     public function getDateEnd()
     {
@@ -274,7 +275,7 @@ class Period_Range extends Period
             || $startDate == $endDate) {
             $endOfPeriod = null;
 
-            $month = new Piwik_Period_Month($startDate);
+            $month = new Month($startDate);
             $endOfMonth = $month->getDateEnd();
             $startOfMonth = $month->getDateStart();
             if ($startDate == $startOfMonth
@@ -293,7 +294,7 @@ class Period_Range extends Period
             } else {
                 // From start date,
                 //  Process end of week
-                $week = new Piwik_Period_Week($startDate);
+                $week = new Week($startDate);
                 $startOfWeek = $week->getDateStart();
                 $endOfWeek = $week->getDateEnd();
 
@@ -327,8 +328,8 @@ class Period_Range extends Period
     /**
      * Adds new subperiods
      *
-     * @param Piwik_Date $startDate
-     * @param Piwik_Date $endDate
+     * @param Date $startDate
+     * @param Date $endDate
      * @param string $period
      */
     protected function fillArraySubPeriods($startDate, $endDate, $period)
@@ -375,14 +376,14 @@ class Period_Range extends Period
         if ($period != 'range' && !preg_match('/(last|previous)([0-9]*)/', $date, $regs)) {
             if (strpos($date, ',')) // date in the form of 2011-01-01,2011-02-02
             {
-                $rangePeriod = new Period_Range($period, $date);
+                $rangePeriod = new Range($period, $date);
 
-                $lastStartDate = Period_Range::removePeriod($period, $rangePeriod->getDateStart(), $n = 1);
-                $lastEndDate = Period_Range::removePeriod($period, $rangePeriod->getDateEnd(), $n = 1);
+                $lastStartDate = Range::removePeriod($period, $rangePeriod->getDateStart(), $n = 1);
+                $lastEndDate = Range::removePeriod($period, $rangePeriod->getDateEnd(), $n = 1);
 
                 $strLastDate = "$lastStartDate,$lastEndDate";
             } else {
-                $lastPeriod = Period_Range::removePeriod($period, Piwik_Date::factory($date), $n = 1);
+                $lastPeriod = Range::removePeriod($period, Date::factory($date), $n = 1);
                 $strLastDate = $lastPeriod->toString();
             }
         }
diff --git a/core/Period/Week.php b/core/Period/Week.php
index 1933a0aa5ceae1d90177b6c8e92645642ebcfd31..370a05656bf19430dd64235ac78bc748c591d4d5 100644
--- a/core/Period/Week.php
+++ b/core/Period/Week.php
@@ -8,13 +8,15 @@
  * @category Piwik
  * @package Piwik
  */
-use Piwik\Period;
+namespace Piwik\Period;
+
+use Piwik\Period\Day;
 
 /**
  * @package Piwik
  * @subpackage Period
  */
-class Piwik_Period_Week extends Period
+class Week extends Period
 {
     protected $label = 'week';
 
@@ -88,7 +90,7 @@ class Piwik_Period_Week extends Period
 
         $currentDay = clone $startWeek;
         while ($currentDay->compareWeek($startWeek) == 0) {
-            $this->addSubperiod(new Piwik_Period_Day($currentDay));
+            $this->addSubperiod(new Day($currentDay));
             $currentDay = $currentDay->addDay(1);
         }
     }
diff --git a/core/Period/Year.php b/core/Period/Year.php
index d83e2ac84244bdbef4ba7d164a4aef515c3513d0..56cc52fa6b3d5bc27760f0c28b7eb56f6f6432da 100644
--- a/core/Period/Year.php
+++ b/core/Period/Year.php
@@ -9,6 +9,8 @@
  * @package Piwik
  */
 use Piwik\Period;
+use Piwik\Date;
+use Piwik\Period\Month;
 
 /**
  * @package Piwik
@@ -63,8 +65,8 @@ class Piwik_Period_Year extends Period
 
         $year = $this->date->toString("Y");
         for ($i = 1; $i <= 12; $i++) {
-            $this->addSubperiod(new Piwik_Period_Month(
-                    Piwik_Date::factory("$year-$i-01")
+            $this->addSubperiod(new Month(
+                    Date::factory("$year-$i-01")
                 )
             );
         }
diff --git a/core/Piwik.php b/core/Piwik.php
index 5f2c57e111168f7611ad02a166c1876740f9c1ad..5edff85b19151a5cba52c49071555aeca2864564 100644
--- a/core/Piwik.php
+++ b/core/Piwik.php
@@ -23,7 +23,7 @@ use Piwik_Log_Error;
 use Piwik_Log_Exception;
 use Piwik_Log_Formatter_ScreenFormatter;
 use Piwik_Log_Message;
-use Piwik_Plugin;
+use Piwik\Plugin;
 use Piwik_Session;
 use Piwik\Site;
 use Piwik_Tracker;
@@ -1250,7 +1250,7 @@ class Piwik
         return "$usage Mb";
     }
 
-    /*
+/*
  * Amounts, Percentages, Currency, Time, Math Operations, and Pretty Printing
  */
 
@@ -1842,11 +1842,11 @@ class Piwik
     /**
      * Returns the plugin currently being used to display the page
      *
-     * @return Piwik_Plugin
+     * @return Plugin
      */
     static public function getCurrentPlugin()
     {
-        return PluginsManager::getInstance()->getLoadedPlugin(Piwik::getModule());
+        return \Piwik\PluginsManager::getInstance()->getLoadedPlugin(Piwik::getModule());
     }
 
     /**
diff --git a/core/Plugin.php b/core/Plugin.php
index bec854cd9ed7bbd0273caca26158c7eab2ce5f54..06aa0534ecb781b74a6fbba39c551e621c188f91 100644
--- a/core/Plugin.php
+++ b/core/Plugin.php
@@ -8,7 +8,9 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik;
 use Piwik\Common;
+use Piwik\Plugin\MetadataLoader;
 
 /**
  * @see core/Plugin/MetadataLoader.php
@@ -16,30 +18,30 @@ use Piwik\Common;
 require_once PIWIK_INCLUDE_PATH . '/core/Plugin/MetadataLoader.php';
 
 /**
- * Abstract class to define a Piwik_Plugin.
+ * Abstract class to define a Plugin.
  * Any plugin has to at least implement the abstract methods of this class.
  *
  * @package Piwik
  */
-class Piwik_Plugin
+class Plugin
 {
     /**
      * Name of this plugin.
-     * 
+     *
      * @var string
      */
     protected $pluginName;
-    
+
     /**
      * Holds plugin metadata.
-     * 
+     *
      * @var array
      */
     private $pluginInformation;
-    
+
     /**
      * Constructor.
-     * 
+     *
      * @param string|bool $pluginName A plugin name to force. If not supplied, it is set
      *                                to last part of the class name.
      */
@@ -49,11 +51,11 @@ class Piwik_Plugin
             $pluginName = Common::unprefixClass(get_class($this));
         }
         $this->pluginName = $pluginName;
-        
-        $metadataLoader = new Piwik_Plugin_MetadataLoader($pluginName);
+
+        $metadataLoader = new MetadataLoader($pluginName);
         $this->pluginInformation = $metadataLoader->load();
     }
-    
+
     /**
      * Returns the plugin details
      * - 'description' => string        // 1-2 sentence description of the plugin
diff --git a/core/Plugin/MetadataLoader.php b/core/Plugin/MetadataLoader.php
index f2e6191dc24ce40b2cb41c7eb81d2eb50ec03f4f..335442f31cc605f10436c4b2a90319bfdb4d9f8f 100644
--- a/core/Plugin/MetadataLoader.php
+++ b/core/Plugin/MetadataLoader.php
@@ -8,8 +8,11 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik\Plugin;
+
+use Exception;
 use Piwik\Common;
-use Piwik\PluginsManager;
+use Piwik_Version;
 
 /**
  * @see core/Version.php
@@ -21,24 +24,24 @@ require_once PIWIK_INCLUDE_PATH . '/core/Version.php';
  * - plugin.piwik.json
  * - colors.piwik.json
  */
-class Piwik_Plugin_MetadataLoader
+class MetadataLoader
 {
     const PLUGIN_JSON_FILENAME = 'plugin.piwik.json';
     const COLORS_JSON_FILENAME = 'colors.piwik.json';
-    
+
     const SHORT_COLOR_LENGTH = 4;
     const LONG_COLOR_LENGTH = 7;
-    
+
     /**
      * The name of the plugin whose metadata will be loaded.
-     * 
+     *
      * @var string
      */
     private $pluginName;
-    
+
     /**
      * Constructor.
-     * 
+     *
      * @param string $pluginName Name of the plugin to load metadata.
      */
     public function __construct($pluginName)
@@ -48,7 +51,7 @@ class Piwik_Plugin_MetadataLoader
 
     /**
      * Loads plugin metadata. @see Piwik_Plugin::getInformation.
-     * 
+     *
      * @return array
      */
     public function load()
@@ -59,7 +62,7 @@ class Piwik_Plugin_MetadataLoader
             $this->loadPluginColorsJson()
         );
     }
-    
+
     private function getDefaultPluginInformation()
     {
         $descriptionKey = $this->pluginName . '_PluginDescription';
@@ -74,21 +77,21 @@ class Piwik_Plugin_MetadataLoader
             'theme'            => false,
         );
     }
-    
+
     private function loadPluginInfoJson()
     {
-        $path = PluginsManager::getPluginsDirectory() . $this->pluginName . '/' . self::PLUGIN_JSON_FILENAME;
+        $path = \Piwik\PluginsManager::getPluginsDirectory() . $this->pluginName . '/' . self::PLUGIN_JSON_FILENAME;
         return $this->loadJsonMetadata($path);
     }
-    
+
     private function loadPluginColorsJson()
     {
-        $path = PluginsManager::getPluginsDirectory() . $this->pluginName . '/' . self::COLORS_JSON_FILENAME;
+        $path = \Piwik\PluginsManager::getPluginsDirectory() . $this->pluginName . '/' . self::COLORS_JSON_FILENAME;
         $info = $this->loadJsonMetadata($path);
         $info = $this->cleanAndValidatePluginColorsJson($path, $info);
         return $info;
     }
-    
+
     private function cleanAndValidatePluginColorsJson($path, $info)
     {
         // check that if "colors" exists, it is an array
@@ -96,17 +99,17 @@ class Piwik_Plugin_MetadataLoader
         if (!is_array($colors)) {
             throw new Exception("The 'colors' value in '$path' must be an object mapping names with colors.");
         }
-        
+
         // validate each color
         foreach ($colors as $color) {
             if (!$this->isStringColorValid($color)) {
                 throw new Exception("Invalid color string '$color' in '$path'.");
             }
         }
-        
+
         return array("colors" => $colors); // make sure only 'colors' element is loaded
     }
-    
+
     private function isStringColorValid($color)
     {
         if (strlen($color) !== self::SHORT_COLOR_LENGTH
@@ -114,25 +117,25 @@ class Piwik_Plugin_MetadataLoader
         ) {
             return false;
         }
-        
+
         if ($color[0] !== '#') {
             return false;
         }
-        
+
         return ctype_xdigit(substr($color, 1)); // check if other digits are hex
     }
-    
+
     private function loadJsonMetadata($path)
     {
         if (!file_exists($path)) {
             return array();
         }
-        
+
         $json = file_get_contents($path);
         if (!$json) {
             return array();
         }
-        
+
         $info = Common::json_decode($json, $assoc = true);
         if (!is_array($info)
             || empty($info)
diff --git a/core/PluginsArchiver.php b/core/PluginsArchiver.php
index aac3b936da3c3f1970f8dc683eeb11417382d8ce..dd49ba37e7c2a1218348b17d4530aa9feef8a461 100644
--- a/core/PluginsArchiver.php
+++ b/core/PluginsArchiver.php
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Piwik - Open source web analytics
  *
@@ -9,17 +8,22 @@
  * @category Piwik
  * @package Piwik_PluginArchiver
  */
+
+namespace Piwik;
 use Piwik\Config;
 use Piwik\Common;
+use Piwik\ArchiveProcessor;
+use Piwik\ArchiveProcessor\Day;
+use Piwik\DataAccess\LogAggregator;
 
 /**
  * Plugins that archive metrics for websites can implement an Archiver that extends this class
  */
-abstract class Piwik_PluginsArchiver
+abstract class PluginsArchiver
 {
     protected $processor;
 
-    public function __construct(Piwik_ArchiveProcessor $processing)
+    public function __construct(ArchiveProcessor $processing)
     {
         $this->maximumRows = Config::getInstance()->General['datatable_archiving_maximum_rows_standard'];
         $this->processor = $processing;
@@ -38,7 +42,7 @@ abstract class Piwik_PluginsArchiver
     }
 
     /**
-     * @return Piwik_ArchiveProcessor_Day|Piwik_ArchiveProcessor_Period
+     * @return Day|Period
      */
     protected function getProcessor()
     {
@@ -46,7 +50,7 @@ abstract class Piwik_PluginsArchiver
     }
 
     /**
-     * @return Piwik_DataAccess_LogAggregator
+     * @return \Piwik\DataAccess\LogAggregator
      */
     protected function getLogAggregator()
     {
diff --git a/core/PluginsManager.php b/core/PluginsManager.php
index 4fb4c82f6833eef074635f4c170156f61bde8b08..4660a37cd20fd4a839b78f0fba59721075967652 100644
--- a/core/PluginsManager.php
+++ b/core/PluginsManager.php
@@ -14,6 +14,9 @@ namespace Piwik;
 use Piwik\Config;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\EventDispatcher;
+use Piwik\Translate;
+use Piwik\Plugin\MetadataLoader;
 
 /**
  * @see core/Menu/Abstract.php
@@ -337,7 +340,7 @@ class PluginsManager
     {
         $plugins = $this->getLoadedPlugins();
         foreach($plugins as $plugin) {
-            /* @var $plugin Piwik_Plugin */
+            /* @var $plugin Plugin */
             if($plugin->isTheme()
                 && $plugin->getPluginName() != self::DEFAULT_THEME) {
                 return $plugin->getPluginName();
@@ -385,7 +388,7 @@ class PluginsManager
     public function loadPluginTranslations($language = false)
     {
         if (empty($language)) {
-            $language = Piwik_Translate::getInstance()->getLanguageToLoad();
+            $language = Translate::getInstance()->getLanguageToLoad();
         }
         $plugins = $this->getLoadedPlugins();
 
@@ -419,11 +422,11 @@ class PluginsManager
 
     /**
      * Returns an array of key,value with the following format: array(
-     *        'UserCountry' => Piwik_Plugin $pluginObject,
-     *        'UserSettings' => Piwik_Plugin $pluginObject,
+     *        'UserCountry' => Plugin $pluginObject,
+     *        'UserSettings' => Plugin $pluginObject,
      *    );
      *
-     * @return array,Piwik_Plugin
+     * @return array,Plugin
      */
     public function getLoadedPlugins()
     {
@@ -431,7 +434,7 @@ class PluginsManager
     }
 
     /**
-     * Returns the given Piwik_Plugin object
+     * Returns the given Plugin object
      *
      * @param string $name
      * @throws Exception
@@ -484,7 +487,7 @@ class PluginsManager
 
         $this->addLoadedPlugin($pluginName, $newPlugin);
 
-        Piwik_EventDispatcher::getInstance()->postPendingEventsTo($newPlugin);
+        EventDispatcher::getInstance()->postPendingEventsTo($newPlugin);
 
         return $newPlugin;
     }
@@ -508,19 +511,18 @@ class PluginsManager
         if (!file_exists($path)) {
             // Create the smallest minimal Piwik Plugin
             // Eg. Used for Zeitgeist default theme which does not have a Zeitgeist.php file
-            return new Piwik_Plugin($pluginName);
+            return new Plugin($pluginName);
         }
 
         require_once $path;
 
         if (!class_exists($pluginClassName, false)) {
-            throw new Exception("The class $pluginClassName couldn't be found in the file '$path'");
+            throw new \Exception("The class $pluginClassName couldn't be found in the file '$path'");
         }
         $newPlugin = new $pluginClassName();
 
-        var_dump(get_class($newPlugin));
-        if (!($newPlugin instanceof Piwik_Plugin)) {
-            throw new \Exception("The plugin $pluginClassName in the file $path must inherit from Piwik_Plugin.");
+        if (!($newPlugin instanceof Plugin)) {
+            throw new \Exception("The plugin $pluginClassName in the file $path must inherit from Plugin.");
         }
         return $newPlugin;
     }
@@ -570,10 +572,10 @@ class PluginsManager
     /**
      * Install a specific plugin
      *
-     * @param Piwik_Plugin $plugin
+     * @param Plugin $plugin
      * @throws Piwik_PluginsManager_PluginException if installation fails
      */
-    private function installPlugin(Piwik_Plugin $plugin)
+    private function installPlugin(Plugin $plugin)
     {
         try {
             $plugin->install();
@@ -586,9 +588,9 @@ class PluginsManager
      * Add a plugin in the loaded plugins array
      *
      * @param string $pluginName  plugin name without prefix (eg. 'UserCountry')
-     * @param Piwik_Plugin $newPlugin
+     * @param Plugin $newPlugin
      */
-    private function addLoadedPlugin($pluginName, Piwik_Plugin $newPlugin)
+    private function addLoadedPlugin($pluginName, Plugin $newPlugin)
     {
         $this->loadedPlugins[$pluginName] = $newPlugin;
     }
@@ -596,15 +598,15 @@ class PluginsManager
     /**
      * Load translation
      *
-     * @param Piwik_Plugin $plugin
+     * @param Plugin $plugin
      * @param string $langCode
      * @throws Exception
      * @return bool whether the translation was found and loaded
      */
     private function loadTranslation($plugin, $langCode)
     {
-        // we are in Tracker mode if Piwik_Loader is not (yet) loaded
-        if (!class_exists('Piwik_Loader', false)) {
+        // we are in Tracker mode if Loader is not (yet) loaded
+        if (!class_exists('Piwik\Loader', false)) {
             return;
         }
 
@@ -624,7 +626,7 @@ class PluginsManager
         } else {
             return false;
         }
-        Piwik_Translate::getInstance()->mergeTranslationArray($translations);
+        Translate::getInstance()->mergeTranslationArray($translations);
         return true;
     }
 
@@ -652,7 +654,7 @@ class PluginsManager
             $plugins = Config::getInstance()->Plugins['Plugins'];
             foreach ($plugins as $pluginName) {
                 // if a plugin is listed in the config, but is not loaded, it does not exist in the folder
-                if (!PluginsManager::getInstance()->isPluginLoaded($pluginName)) {
+                if (!\Piwik\PluginsManager::getInstance()->isPluginLoaded($pluginName)) {
                     $missingPlugins[] = $pluginName;
                 }
             }
@@ -663,9 +665,9 @@ class PluginsManager
     /**
      * Install a plugin, if necessary
      *
-     * @param Piwik_Plugin $plugin
+     * @param Plugin $plugin
      */
-    private function installPluginIfNecessary(Piwik_Plugin $plugin)
+    private function installPluginIfNecessary(Plugin $plugin)
     {
         $pluginName = $plugin->getPluginName();
 
@@ -697,7 +699,7 @@ class PluginsManager
         }
     }
 
-    protected function isTrackerPlugin(Piwik_Plugin $plugin)
+    protected function isTrackerPlugin(Plugin $plugin)
     {
         $hooks = $plugin->getListHooksRegistered();
         $hookNames = array_keys($hooks);
@@ -713,7 +715,7 @@ class PluginsManager
     {
         $name = basename($path);
         return file_exists($path . "/" . $name . ".php")
-             || file_exists($path . "/" . Piwik_Plugin_MetadataLoader::PLUGIN_JSON_FILENAME);
+             || file_exists($path . "/" . MetadataLoader::PLUGIN_JSON_FILENAME);
     }
 }
 
diff --git a/core/ReportRenderer.php b/core/ReportRenderer.php
index e4125cf18f51f18767d98ca18100b10faf9e3391..7d43bf4856463da94f8e5dc95bfb2538ae333b16 100644
--- a/core/ReportRenderer.php
+++ b/core/ReportRenderer.php
@@ -8,7 +8,11 @@
  * @category Piwik
  * @package Piwik
  */
+use Piwik\DataTable\Simple;
+use Piwik\DataTable\Row;
 use Piwik\Piwik;
+use Piwik\DataTable;
+use Piwik\Loader;
 
 /**
  * A Report Renderer produces user friendly renderings of any given Piwik report.
@@ -48,7 +52,7 @@ abstract class Piwik_ReportRenderer
         $className = 'Piwik_ReportRenderer_' . $name;
 
         try {
-            Piwik_Loader::loadClass($className);
+            Loader::loadClass($className);
             return new $className;
         } catch (Exception $e) {
 
@@ -186,9 +190,9 @@ abstract class Piwik_ReportRenderer
      *
      * @static
      * @param  $reportMetadata array
-     * @param  $report Piwik_DataTable
+     * @param  $report DataTable
      * @param  $reportColumns array
-     * @return array Piwik_DataTable $report & array $columns
+     * @return array DataTable $report & array $columns
      */
     protected static function processTableFormat($reportMetadata, $report, $reportColumns)
     {
@@ -196,9 +200,9 @@ abstract class Piwik_ReportRenderer
         if (empty($reportMetadata['dimension'])) {
             $simpleReportMetrics = $report->getFirstRow();
             if ($simpleReportMetrics) {
-                $finalReport = new Piwik_DataTable_Simple();
+                $finalReport = new Simple();
                 foreach ($simpleReportMetrics->getColumns() as $metricId => $metric) {
-                    $newRow = new Piwik_DataTable_Row();
+                    $newRow = new Row();
                     $newRow->addColumn("label", $reportColumns[$metricId]);
                     $newRow->addColumn("value", $metric);
                     $finalReport->addRow($newRow);
diff --git a/core/Site.php b/core/Site.php
index da655b9a74f6c19db357d8dd400bc51beaefc3be..b0824e77eee9bac630fe809a64c99d6e52fd79f0 100644
--- a/core/Site.php
+++ b/core/Site.php
@@ -11,7 +11,7 @@
 
 namespace Piwik;
 use Exception;
-use Piwik_Date;
+use Piwik\Date;
 use Piwik_SitesManager_API;
 
 /**
@@ -127,12 +127,12 @@ class Site
     /**
      * Returns the creation date of the site
      *
-     * @return Piwik_Date
+     * @return Date
      */
     function getCreationDate()
     {
         $date = $this->get('ts_created');
-        return Piwik_Date::factory($date);
+        return Date::factory($date);
     }
 
     /**
diff --git a/core/Tracker.php b/core/Tracker.php
index a5d9bc0186214a75a9c6f4d4d36c1427f45df6d5..a5fb093b95633d3e608e438d4f6eff3c8a99aba4 100644
--- a/core/Tracker.php
+++ b/core/Tracker.php
@@ -12,6 +12,7 @@ use Piwik\Config;
 use Piwik\Piwik;
 use Piwik\Common;
 use Piwik\Access;
+use Piwik\Translate;
 
 /**
  * Class used by the logging script piwik.php called by the javascript tag.
@@ -313,7 +314,7 @@ class Piwik_Tracker
 
             // While each plugins should ensure that necessary languages are loaded,
             // we ensure English translations at least are loaded
-            Piwik_Translate::getInstance()->loadEnglishTranslation();
+            Translate::getInstance()->loadEnglishTranslation();
 
             $resultTasks = Piwik_TaskScheduler::runTasks();
 
@@ -352,7 +353,7 @@ class Piwik_Tracker
                 Piwik::createDatabaseObject();
             }
 
-            $pluginsManager = PluginsManager::getInstance();
+            $pluginsManager = \Piwik\PluginsManager::getInstance();
             $pluginsToLoad = Config::getInstance()->Plugins['Plugins'];
             $pluginsForcedNotToLoad = Piwik_Tracker::getPluginsNotToLoad();
             $pluginsToLoad = array_diff($pluginsToLoad, $pluginsForcedNotToLoad);
@@ -603,9 +604,9 @@ class Piwik_Tracker
             $pluginsTracker = Config::getInstance()->Plugins_Tracker['Plugins_Tracker'];
             if (count($pluginsTracker) > 0) {
                 $pluginsTracker = array_diff($pluginsTracker, self::getPluginsNotToLoad());
-                PluginsManager::getInstance()->doNotLoadAlwaysActivatedPlugins();
+                \Piwik\PluginsManager::getInstance()->doNotLoadAlwaysActivatedPlugins();
 
-                PluginsManager::getInstance()->loadPlugins($pluginsTracker);
+                \Piwik\PluginsManager::getInstance()->loadPlugins($pluginsTracker);
 
                 Common::printDebug("Loading plugins: { " . implode(",", $pluginsTracker) . " }");
             }
diff --git a/core/Tracker/Cache.php b/core/Tracker/Cache.php
index 4f7e5809f3e88c47607f0b4c4aa74f785d340b3c..72910c11e002a5641e4028b430331d79a32c8e04 100644
--- a/core/Tracker/Cache.php
+++ b/core/Tracker/Cache.php
@@ -8,6 +8,7 @@
  * @category Piwik
  * @package Piwik
  */
+use Piwik\ArchiveProcessor\Rules;
 use Piwik\Config;
 use Piwik\Piwik;
 
@@ -96,7 +97,7 @@ class Piwik_Tracker_Cache
 
         Piwik_Tracker::initCorePiwikInTrackerMode();
         $cacheContent = array(
-            'isBrowserTriggerEnabled' => Piwik_ArchiveProcessor_Rules::isBrowserTriggerEnabled(),
+            'isBrowserTriggerEnabled' => Rules::isBrowserTriggerEnabled(),
             'lastTrackerCronRun'               => Piwik_GetOption('lastTrackerCronRun'),
             'currentLocationProviderId'        => Piwik_UserCountry_LocationProvider::getCurrentProviderId(),
         );
diff --git a/core/Translate.php b/core/Translate.php
index fb2759b289705da141fd7503f1ff6e85a2c9654f..23b1e2637155c7eadb571b4cfa47e9c7d82b8990 100644
--- a/core/Translate.php
+++ b/core/Translate.php
@@ -8,20 +8,22 @@
  * @category Piwik
  * @package Piwik
  */
+namespace Piwik;
+use Exception;
 use Piwik\Config;
 use Piwik\Common;
 
 /**
  * @package Piwik
  */
-class Piwik_Translate
+class Translate
 {
     static private $instance = null;
     static private $languageToLoad = null;
     private $loadedLanguage = false;
 
     /**
-     * @return Piwik_Translate
+     * @return \Piwik\Translate
      */
     static public function getInstance()
     {
@@ -49,7 +51,7 @@ class Piwik_Translate
         $this->unloadEnglishTranslation();
         $this->loadEnglishTranslation();
         $this->loadCoreTranslation($language);
-        PluginsManager::getInstance()->loadPluginTranslations($language);
+        \Piwik\PluginsManager::getInstance()->loadPluginTranslations($language);
     }
 
     /**
@@ -180,40 +182,3 @@ class Piwik_Translate
     }
 }
 
-/**
- * Returns translated string or given message if translation is not found.
- *
- * @param string $string Translation string index
- * @param array|string|int $args sprintf arguments
- * @return string
- */
-function Piwik_Translate($string, $args = array())
-{
-    if (!is_array($args)) {
-        $args = array($args);
-    }
-    if (isset($GLOBALS['Piwik_translations'][$string])) {
-        $string = $GLOBALS['Piwik_translations'][$string];
-    }
-    if (count($args) == 0) {
-        return $string;
-    }
-    return vsprintf($string, $args);
-}
-
-/**
- * Returns translated string or given message if translation is not found.
- * This function does not throw any exception. Use it to translate exceptions.
- *
- * @param string $message Translation string index
- * @param array $args sprintf arguments
- * @return string
- */
-function Piwik_TranslateException($message, $args = array())
-{
-    try {
-        return Piwik_Translate($message, $args);
-    } catch (Exception $e) {
-        return $message;
-    }
-}
diff --git a/core/Twig.php b/core/Twig.php
index 58b1e0cef11aa4e8ca478763c1bfa7f005164755..124f018fb5b4eabb99e1fb2fc0d4dfebea30eaea 100644
--- a/core/Twig.php
+++ b/core/Twig.php
@@ -10,7 +10,7 @@
  */
 use Piwik\Piwik;
 use Piwik\Common;
-
+use Piwik\Translate;
 
 /**
  * Twig class
@@ -108,7 +108,7 @@ class Piwik_Twig
                 return;
             }
             $pluginTranslationsAlreadyLoaded[] = $plugins;
-            $jsTranslations = Piwik_Translate::getInstance()->getJavascriptTranslations($plugins);
+            $jsTranslations = Translate::getInstance()->getJavascriptTranslations($plugins);
             $jsCode = '';
             if ($disableScriptTag) {
                 $jsCode .= $jsTranslations;
@@ -136,7 +136,7 @@ class Piwik_Twig
     private function getDefaultThemeLoader()
     {
         $themeLoader = new Twig_Loader_Filesystem(array(
-            sprintf("%s/plugins/%s/templates/", PIWIK_INCLUDE_PATH, PluginsManager::DEFAULT_THEME)
+            sprintf("%s/plugins/%s/templates/", PIWIK_INCLUDE_PATH, \Piwik\PluginsManager::DEFAULT_THEME)
         ));
 
         return $themeLoader;
@@ -213,7 +213,7 @@ class Piwik_Twig
 
     private function addPluginNamespaces(Twig_Loader_Filesystem $loader)
     {
-        $plugins = PluginsManager::getInstance()->getLoadedPluginsName();
+        $plugins = \Piwik\PluginsManager::getInstance()->getLoadedPluginsName();
         foreach($plugins as $name) {
             $name = Common::unprefixClass($name);
             $path = sprintf("%s/plugins/%s/templates/", PIWIK_INCLUDE_PATH, $name);
diff --git a/core/Updates/0.6-rc1.php b/core/Updates/0.6-rc1.php
index 9f63064eacfcd6170b951c7cc670766666e70fde..f383115ae1789e3194d2087e7cdb3406f9401203 100644
--- a/core/Updates/0.6-rc1.php
+++ b/core/Updates/0.6-rc1.php
@@ -45,8 +45,8 @@ class Piwik_Updates_0_6_rc1 extends Piwik_Updates
         );
         $disabledPlugins = array();
         foreach ($pluginsToDisableMessage as $pluginToDisable => $warningMessage) {
-            if (PluginsManager::getInstance()->isPluginActivated($pluginToDisable)) {
-                PluginsManager::getInstance()->deactivatePlugin($pluginToDisable);
+            if (\Piwik\PluginsManager::getInstance()->isPluginActivated($pluginToDisable)) {
+                \Piwik\PluginsManager::getInstance()->deactivatePlugin($pluginToDisable);
                 $disabledPlugins[] = $warningMessage;
             }
         }
diff --git a/core/Updates/1.10-b4.php b/core/Updates/1.10-b4.php
index 5460b7f5406c8f98c425aae4082916816d8642e7..59ae4cda6801edc97fdb5ec2b8486365937fc3b9 100755
--- a/core/Updates/1.10-b4.php
+++ b/core/Updates/1.10-b4.php
@@ -22,7 +22,7 @@ class Piwik_Updates_1_10_b4 extends Piwik_Updates
     static function update()
     {
         try {
-            PluginsManager::getInstance()->activatePlugin('MobileMessaging');
+            \Piwik\PluginsManager::getInstance()->activatePlugin('MobileMessaging');
         } catch (Exception $e) {
             // pass
         }
diff --git a/core/Updates/1.10.1.php b/core/Updates/1.10.1.php
index 879a20de024653613b2f810e83c90c675d0fc2ca..38a2b53e7f4730dbfd7a927a9f5843687eecd7e8 100755
--- a/core/Updates/1.10.1.php
+++ b/core/Updates/1.10.1.php
@@ -22,7 +22,7 @@ class Piwik_Updates_1_10_1 extends Piwik_Updates
     static function update()
     {
         try {
-            PluginsManager::getInstance()->activatePlugin('Overlay');
+            \Piwik\PluginsManager::getInstance()->activatePlugin('Overlay');
         } catch (Exception $e) {
             // pass
         }
diff --git a/core/Updates/1.11-b1.php b/core/Updates/1.11-b1.php
index 9acfb359fa2c8b348604d6357b5a66f0e8d52659..3f7a31904edbe9d0b01cc80e9ead65d10ef22f4a 100644
--- a/core/Updates/1.11-b1.php
+++ b/core/Updates/1.11-b1.php
@@ -22,7 +22,7 @@ class Piwik_Updates_1_11_b1 extends Piwik_Updates
     static function update()
     {
         try {
-            PluginsManager::getInstance()->activatePlugin('UserCountryMap');
+            \Piwik\PluginsManager::getInstance()->activatePlugin('UserCountryMap');
         } catch (Exception $e) {
             // pass
         }
diff --git a/core/Updates/1.12-b15.php b/core/Updates/1.12-b15.php
index 49d72e21993df2d35a960a5110720277d1256c6c..ea66360caf3a85d41c8d8073681e11e7979a1c35 100644
--- a/core/Updates/1.12-b15.php
+++ b/core/Updates/1.12-b15.php
@@ -17,7 +17,7 @@ class Piwik_Updates_1_12_b15 extends Piwik_Updates
     static function update()
     {
         try {
-            PluginsManager::getInstance()->activatePlugin('SegmentEditor');
+            \Piwik\PluginsManager::getInstance()->activatePlugin('SegmentEditor');
         } catch (Exception $e) {
             // pass
         }
diff --git a/core/Updates/1.2-rc1.php b/core/Updates/1.2-rc1.php
index b7636a1225c085dfe7a67d16208dec7d5321d221..36c9e42899d0e3a291590c8603f7021d32704de3 100644
--- a/core/Updates/1.2-rc1.php
+++ b/core/Updates/1.2-rc1.php
@@ -122,8 +122,8 @@ class Piwik_Updates_1_2_rc1 extends Piwik_Updates
         );
         $disabledPlugins = array();
         foreach ($pluginsToDisableMessage as $pluginToDisable => $warningMessage) {
-            if (PluginsManager::getInstance()->isPluginActivated($pluginToDisable)) {
-                PluginsManager::getInstance()->deactivatePlugin($pluginToDisable);
+            if (\Piwik\PluginsManager::getInstance()->isPluginActivated($pluginToDisable)) {
+                \Piwik\PluginsManager::getInstance()->deactivatePlugin($pluginToDisable);
                 $disabledPlugins[] = $warningMessage;
             }
         }
diff --git a/core/Updates/1.2-rc2.php b/core/Updates/1.2-rc2.php
index 7f086ef56e65cbde97b4c8ee32de3478e1a64b44..0ab9c30bdc78a1d59e2cf643663a169ab3d028a3 100644
--- a/core/Updates/1.2-rc2.php
+++ b/core/Updates/1.2-rc2.php
@@ -17,7 +17,7 @@ class Piwik_Updates_1_2_rc2 extends Piwik_Updates
     static function update()
     {
         try {
-            PluginsManager::getInstance()->activatePlugin('CustomVariables');
+            \Piwik\PluginsManager::getInstance()->activatePlugin('CustomVariables');
         } catch (Exception $e) {
         }
     }
diff --git a/core/Updates/1.5-rc6.php b/core/Updates/1.5-rc6.php
index 289f44b32bc0a4061c0e6322d6812d5260aaef5a..1015ef63db833950c3613e963b67b41543882644 100644
--- a/core/Updates/1.5-rc6.php
+++ b/core/Updates/1.5-rc6.php
@@ -17,7 +17,7 @@ class Piwik_Updates_1_5_rc6 extends Piwik_Updates
     static function update()
     {
         try {
-            PluginsManager::getInstance()->activatePlugin('PrivacyManager');
+            \Piwik\PluginsManager::getInstance()->activatePlugin('PrivacyManager');
         } catch (Exception $e) {
         }
     }
diff --git a/core/Updates/1.6-rc1.php b/core/Updates/1.6-rc1.php
index 91909b980e75616541281b74b7cba665ef3cf6d3..b838a0372785398ba1b38199368daf19c5057786 100644
--- a/core/Updates/1.6-rc1.php
+++ b/core/Updates/1.6-rc1.php
@@ -17,7 +17,7 @@ class Piwik_Updates_1_6_rc1 extends Piwik_Updates
     static function update()
     {
         try {
-            PluginsManager::getInstance()->activatePlugin('ImageGraph');
+            \Piwik\PluginsManager::getInstance()->activatePlugin('ImageGraph');
         } catch (Exception $e) {
         }
     }
diff --git a/core/Updates/1.8.3-b1.php b/core/Updates/1.8.3-b1.php
index 334d1b9a0702c2a4d5aa76cee2ba90648eb1e8f3..99084a281416141bbb700eec8efc492cdf72be78 100644
--- a/core/Updates/1.8.3-b1.php
+++ b/core/Updates/1.8.3-b1.php
@@ -43,7 +43,7 @@ class Piwik_Updates_1_8_3_b1 extends Piwik_Updates
     static function update()
     {
         Piwik_Updater::updateDatabase(__FILE__, self::getSql());
-        if (!PluginsManager::getInstance()->isPluginLoaded('PDFReports')) {
+        if (!\Piwik\PluginsManager::getInstance()->isPluginLoaded('PDFReports')) {
             return;
         }
 
diff --git a/core/Updates/1.9-b19.php b/core/Updates/1.9-b19.php
index 771459b99909798d06e51e26cb24b0b8a404b129..03f142de0d3858c16296bc113c89d1f4f8793afb 100755
--- a/core/Updates/1.9-b19.php
+++ b/core/Updates/1.9-b19.php
@@ -33,7 +33,7 @@ class Piwik_Updates_1_9_b19 extends Piwik_Updates
 
 
         try {
-            PluginsManager::getInstance()->activatePlugin('Transitions');
+            \Piwik\PluginsManager::getInstance()->activatePlugin('Transitions');
         } catch (Exception $e) {
         }
     }
diff --git a/core/Updates/1.9.3-b10.php b/core/Updates/1.9.3-b10.php
index 0bdff3f7133a5ad558edcd9412388635aef74325..97e2cd5d5e385de0e92d080704e7366233f7892e 100755
--- a/core/Updates/1.9.3-b10.php
+++ b/core/Updates/1.9.3-b10.php
@@ -22,7 +22,7 @@ class Piwik_Updates_1_9_3_b10 extends Piwik_Updates
     static function update()
     {
         try {
-            PluginsManager::getInstance()->activatePlugin('Annotations');
+            \Piwik\PluginsManager::getInstance()->activatePlugin('Annotations');
         } catch (Exception $e) {
             // pass
         }
diff --git a/core/Updates/1.9.3-b3.php b/core/Updates/1.9.3-b3.php
index 67e84c635139358d8f3e2ef651e71ef5f544afad..60257c6884c7337d11559855889ac2f8c1cf100e 100644
--- a/core/Updates/1.9.3-b3.php
+++ b/core/Updates/1.9.3-b3.php
@@ -19,9 +19,9 @@ class Piwik_Updates_1_9_3_b3 extends Piwik_Updates
         // Insight was a temporary code name for Overlay
         $pluginToDelete = 'Insight';
         self::deletePluginFromConfigFile($pluginToDelete);
-        PluginsManager::getInstance()->deletePluginFromFilesystem($pluginToDelete);
+        \Piwik\PluginsManager::getInstance()->deletePluginFromFilesystem($pluginToDelete);
 
         // We also clean up 1.9.1 and delete Feedburner plugin
-        PluginsManager::getInstance()->deletePluginFromFilesystem('Feedburner');
+        \Piwik\PluginsManager::getInstance()->deletePluginFromFilesystem('Feedburner');
     }
 }
diff --git a/core/ViewDataTable.php b/core/ViewDataTable.php
index 5ad12b1aae64ebcd343eab8ffcb2c4713f96004c..decc8a0cd0698d3273e1594a273d7c80f8286cc5 100644
--- a/core/ViewDataTable.php
+++ b/core/ViewDataTable.php
@@ -11,9 +11,11 @@
 use Piwik\Config;
 use Piwik\Metrics;
 use Piwik\Period;
-use Piwik\Period_Range;
+use Piwik\Period\Range;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
+use Piwik\DataTable;
 use Piwik\Site;
 
 /**
@@ -82,7 +84,7 @@ abstract class Piwik_ViewDataTable
     /**
      * DataTable loaded from the API for this ViewDataTable.
      *
-     * @var Piwik_DataTable
+     * @var DataTable
      */
     protected $dataTable = null;
 
@@ -377,7 +379,7 @@ abstract class Piwik_ViewDataTable
         $this->viewProperties['report_id'] = $currentControllerName . '.' . $currentControllerAction;
         $this->viewProperties['self_url'] = $this->getBaseReportUrl($currentControllerName, $currentControllerAction);
         
-        if (!PluginsManager::getInstance()->isPluginActivated('Goals')) {
+        if (!\Piwik\PluginsManager::getInstance()->isPluginActivated('Goals')) {
             $this->viewProperties['show_goals'] = false;
         }
         
@@ -444,7 +446,7 @@ abstract class Piwik_ViewDataTable
     /**
      * Returns the DataTable loaded from the API
      *
-     * @return Piwik_DataTable
+     * @return DataTable
      * @throws exception if not yet defined
      */
     public function getDataTable()
@@ -460,7 +462,7 @@ abstract class Piwik_ViewDataTable
      * It won't be loaded again from the API in this case
      *
      * @param $dataTable
-     * @return void $dataTable Piwik_DataTable
+     * @return void $dataTable DataTable
      */
     public function setDataTable($dataTable)
     {
@@ -522,7 +524,7 @@ abstract class Piwik_ViewDataTable
      * Function called by the ViewDataTable objects in order to fetch data from the API.
      * The function init() must have been called before, so that the object knows which API module and action to call.
      * It builds the API request string and uses Piwik_API_Request to call the API.
-     * The requested Piwik_DataTable object is stored in $this->dataTable.
+     * The requested DataTable object is stored in $this->dataTable.
      */
     protected function loadDataTableFromAPI()
     {
@@ -551,7 +553,7 @@ abstract class Piwik_ViewDataTable
      */
     protected function checkStandardDataTable()
     {
-        Piwik::checkObjectTypeIs($this->dataTable, array('Piwik_DataTable'));
+        Piwik::checkObjectTypeIs($this->dataTable, array('\Piwik\DataTable'));
     }
 
     /**
@@ -567,11 +569,11 @@ abstract class Piwik_ViewDataTable
         }
 
         // deal w/ table metadata
-        if ($this->dataTable instanceof Piwik_DataTable) {
+        if ($this->dataTable instanceof DataTable) {
             $this->viewProperties['metadata'] = $this->dataTable->getAllTableMetadata();
 
-            if (isset($this->viewProperties['metadata'][Piwik_DataTable::ARCHIVED_DATE_METADATA_NAME])) {
-                $this->viewProperties['metadata'][Piwik_DataTable::ARCHIVED_DATE_METADATA_NAME] =
+            if (isset($this->viewProperties['metadata'][DataTable::ARCHIVED_DATE_METADATA_NAME])) {
+                $this->viewProperties['metadata'][DataTable::ARCHIVED_DATE_METADATA_NAME] =
                     $this->makePrettyArchivedOnText();
             }
         }
@@ -608,7 +610,7 @@ abstract class Piwik_ViewDataTable
         
         // default columns_to_display to label, nb_uniq_visitors/nb_visits if those columns exist in the
         // dataset
-        if ($this->dataTable instanceof Piwik_DataTable) {
+        if ($this->dataTable instanceof DataTable) {
             $columns = $this->dataTable->getColumns();
             if (empty($this->viewProperties['columns_to_display'])
                 && $this->dataTableColumnsContains($columns, array('nb_visits', 'nb_uniq_visitors'))
@@ -669,8 +671,8 @@ abstract class Piwik_ViewDataTable
      */
     private function makePrettyArchivedOnText()
     {
-        $dateText = $this->viewProperties['metadata'][Piwik_DataTable::ARCHIVED_DATE_METADATA_NAME];
-        $date = Piwik_Date::factory($dateText);
+        $dateText = $this->viewProperties['metadata'][DataTable::ARCHIVED_DATE_METADATA_NAME];
+        $date = Date::factory($dateText);
         $today = mktime(0, 0, 0);
         if ($date->getTimestamp() > $today) {
             $elapsedSeconds = time() - $date->getTimestamp();
@@ -835,7 +837,7 @@ abstract class Piwik_ViewDataTable
             }
         }
 
-        if ($this->dataTable instanceof Piwik_DataTable) {
+        if ($this->dataTable instanceof DataTable) {
             // we override the filter_sort_column with the column used for sorting,
             // which can be different from the one specified (eg. if the column doesn't exist)
             $javascriptVariablesToSet['filter_sort_column'] = $this->dataTable->getSortedByColumnName();
@@ -853,8 +855,8 @@ abstract class Piwik_ViewDataTable
         $javascriptVariablesToSet['controllerActionCalledWhenRequestSubTable'] = $this->controllerActionCalledWhenRequestSubTable;
 
         if ($this->dataTable &&
-            // Piwik_DataTable_Array doesn't have the method
-            !($this->dataTable instanceof Piwik_DataTable_Array)
+            // Set doesn't have the method
+            !($this->dataTable instanceof DataTable\Map)
             && empty($javascriptVariablesToSet['totalRows'])
         ) {
             $javascriptVariablesToSet['totalRows'] = $this->dataTable->getRowsCountBeforeLimitFilter();
@@ -1061,7 +1063,7 @@ abstract class Piwik_ViewDataTable
      */
     public function showAnnotationsView()
     {
-        if (!PluginsManager::getInstance()->isPluginLoaded('Annotations')) {
+        if (!\Piwik\PluginsManager::getInstance()->isPluginLoaded('Annotations')) {
             return;
         }
 
@@ -1113,7 +1115,7 @@ abstract class Piwik_ViewDataTable
      */
     public function enableShowGoals()
     {
-        if (PluginsManager::getInstance()->isPluginActivated('Goals')) {
+        if (\Piwik\PluginsManager::getInstance()->isPluginActivated('Goals')) {
             $this->viewProperties['show_goals'] = true;
         }
     }
@@ -1360,10 +1362,10 @@ abstract class Piwik_ViewDataTable
         if(empty($this->dataTable)) {
             return;
         }
-        if ($this->dataTable instanceof Piwik_DataTable_Array) {
-            $emptyColumns = $this->dataTable->getMetadataIntersectArray(Piwik_DataTable::EMPTY_COLUMNS_METADATA_NAME);
+        if ($this->dataTable instanceof DataTable\Map) {
+            $emptyColumns = $this->dataTable->getMetadataIntersectArray(DataTable::EMPTY_COLUMNS_METADATA_NAME);
         } else {
-            $emptyColumns = $this->dataTable->getMetadata(Piwik_DataTable::EMPTY_COLUMNS_METADATA_NAME);
+            $emptyColumns = $this->dataTable->getMetadata(DataTable::EMPTY_COLUMNS_METADATA_NAME);
         }
         if (is_array($emptyColumns)) {
             foreach ($emptyColumns as $emptyColumn) {
@@ -1537,14 +1539,14 @@ abstract class Piwik_ViewDataTable
                     $timezone = 'UTC';
                 }
 
-                $period = new Period_Range('range', $strDate, $timezone);
+                $period = new Range('range', $strDate, $timezone);
                 $reportDate = $period->getDateStart();
             } // if a multiple period, this function is irrelevant
             else if (Period::isMultiplePeriod($strDate, $strPeriod)) {
                 return false;
             } // otherwise, use the date as given
             else {
-                $reportDate = Piwik_Date::factory($strDate);
+                $reportDate = Date::factory($strDate);
             }
 
             $reportYear = $reportDate->toString('Y');
@@ -1619,7 +1621,7 @@ abstract class Piwik_ViewDataTable
      * Returns true if the first array contains one or more of the specified
      * column names or their associated integer INDEX_ value.
      * 
-     * @param array $columns Piwik_DataTable_Row columns.
+     * @param array $columns Row columns.
      * @param array|string $columnsToCheckFor eg, array('nb_visits', 'nb_uniq_visitors')
      * @return bool
      */
diff --git a/core/ViewDataTable/GenerateGraphHTML/ChartEvolution.php b/core/ViewDataTable/GenerateGraphHTML/ChartEvolution.php
index 38392bf71aefff24584e440ee0ef316d2ea48531..4ee089abd8fb4fe54b55179942f5bff5f7a8884e 100644
--- a/core/ViewDataTable/GenerateGraphHTML/ChartEvolution.php
+++ b/core/ViewDataTable/GenerateGraphHTML/ChartEvolution.php
@@ -10,7 +10,7 @@
  */
 
 use Piwik\Common;
-use Piwik\Period_Range;
+use Piwik\Period\Range;
 use Piwik\Site;
 
 /**
@@ -99,10 +99,10 @@ class Piwik_ViewDataTable_GenerateGraphHTML_ChartEvolution extends Piwik_ViewDat
             $this->alwaysShowLimitDropdown();
 
             // set the evolution_{$period}_last_n query param
-            if (Period_Range::parseDateRange($this->originalDate)) // if a multiple period
+            if (Range::parseDateRange($this->originalDate)) // if a multiple period
             {
                 // overwrite last_n param using the date range
-                $oPeriod = new Period_Range($period, $this->originalDate);
+                $oPeriod = new Range($period, $this->originalDate);
                 $lastN = count($oPeriod->getSubperiods());
             } else // if not a multiple period
             {
diff --git a/core/ViewDataTable/HtmlTable.php b/core/ViewDataTable/HtmlTable.php
index dc23e95d2b505cc5e9074c3710c3a3f4e3ad346b..05b99543fa222e41825b0796c2147c976101f30a 100644
--- a/core/ViewDataTable/HtmlTable.php
+++ b/core/ViewDataTable/HtmlTable.php
@@ -9,6 +9,7 @@
  * @package Piwik
  */
 use Piwik\Config;
+use Piwik\DataTable\Renderer;
 use Piwik\Piwik;
 use Piwik\Common;
 
@@ -23,7 +24,7 @@ use Piwik\Common;
 class Piwik_ViewDataTable_HtmlTable extends Piwik_ViewDataTable
 {
     /**
-     * PHP array conversion of the Piwik_DataTable
+     * PHP array conversion of the DataTable
      *
      * @var array
      */
@@ -168,13 +169,13 @@ class Piwik_ViewDataTable_HtmlTable extends Piwik_ViewDataTable
     }
 
     /**
-     * Returns friendly php array from the Piwik_DataTable
+     * Returns friendly php array from the DataTable
      * @see Piwik_DataTable_Renderer_Php
      * @return array
      */
     protected function getPHPArrayFromDataTable()
     {
-        $renderer = Piwik_DataTable_Renderer::factory('php');
+        $renderer = Renderer::factory('php');
         $renderer->setTable($this->dataTable);
         $renderer->setSerialize(false);
         // we get the php array from the datatable but conserving the original datatable format,
diff --git a/core/ViewDataTable/HtmlTable/AllColumns.php b/core/ViewDataTable/HtmlTable/AllColumns.php
index 9b1a1f77d31c57da0e309c24390bb8cab9e0663a..6b88cfeeb34970d421ed80545c604a7320c27661 100644
--- a/core/ViewDataTable/HtmlTable/AllColumns.php
+++ b/core/ViewDataTable/HtmlTable/AllColumns.php
@@ -59,7 +59,8 @@ class Piwik_ViewDataTable_HtmlTable_AllColumns extends Piwik_ViewDataTable_HtmlT
                                          'bounce_rate',
                                          $columnConversionRate
                                    ));
-        $this->dataTable->filter('ColumnCallbackReplace', array('avg_time_on_site', create_function('$averageTimeOnSite', 'return Piwik::getPrettyTimeFromSeconds($averageTimeOnSite);')));
+        $this->dataTable->filter('ColumnCallbackReplace', array('avg_time_on_site', create_function('$averageTimeOnSite',
+            'return \Piwik\Piwik::getPrettyTimeFromSeconds($averageTimeOnSite);')));
 
         return true;
     }
diff --git a/core/ViewDataTable/HtmlTable/Goals.php b/core/ViewDataTable/HtmlTable/Goals.php
index 4fa4980d7207a47c79d7cba103bae69023ffefb5..7714e7fd0691db003e6ccb1e8c12dc87ab90d7f4 100644
--- a/core/ViewDataTable/HtmlTable/Goals.php
+++ b/core/ViewDataTable/HtmlTable/Goals.php
@@ -8,6 +8,7 @@
  * @category Piwik
  * @package Piwik
  */
+use Piwik\DataTable\Filter\AddColumnsProcessedMetricsGoal;
 use Piwik\Piwik;
 use Piwik\Common;
 use Piwik\Site;
@@ -26,7 +27,7 @@ class Piwik_ViewDataTable_HtmlTable_Goals extends Piwik_ViewDataTable_HtmlTable
     public function main()
     {
         $this->idSite = Common::getRequestVar('idSite', null, 'int');
-        $this->processOnlyIdGoal = Common::getRequestVar('idGoal', Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal::GOALS_OVERVIEW, 'string');
+        $this->processOnlyIdGoal = Common::getRequestVar('idGoal', AddColumnsProcessedMetricsGoal::GOALS_OVERVIEW, 'string');
         $this->isEcommerce = $this->processOnlyIdGoal == Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_ORDER;
         $this->viewProperties['show_exclude_low_population'] = true;
         $this->viewProperties['show_goals'] = true;
@@ -143,7 +144,7 @@ class Piwik_ViewDataTable_HtmlTable_Goals extends Piwik_ViewDataTable_HtmlTable
 
                     $goal['name'] = Common::unsanitizeInputValue($goal['name']);
 
-                    if ($this->processOnlyIdGoal > Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal::GOALS_FULL_TABLE
+                    if ($this->processOnlyIdGoal > AddColumnsProcessedMetricsGoal::GOALS_FULL_TABLE
                         && $this->processOnlyIdGoal != $idgoal
                         && !$this->isEcommerce
                     ) {
@@ -155,7 +156,7 @@ class Piwik_ViewDataTable_HtmlTable_Goals extends Piwik_ViewDataTable_HtmlTable
                     $this->setDynamicMetricDocumentation($columnName, $columnNameGoal, $goal['name'], $goal['idgoal']);
                     if (strpos($columnNameGoal, '_rate') === false
                         // For the goal table (when the flag icon is clicked), we only display the per Goal Conversion rate
-                        && $this->processOnlyIdGoal == Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal::GOALS_OVERVIEW
+                        && $this->processOnlyIdGoal == AddColumnsProcessedMetricsGoal::GOALS_OVERVIEW
                     ) {
                         continue;
                     }
@@ -220,7 +221,7 @@ class Piwik_ViewDataTable_HtmlTable_Goals extends Piwik_ViewDataTable_HtmlTable
     protected function getRequestArray()
     {
         $requestArray = parent::getRequestArray();
-        if ($this->processOnlyIdGoal > Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal::GOALS_FULL_TABLE
+        if ($this->processOnlyIdGoal > AddColumnsProcessedMetricsGoal::GOALS_FULL_TABLE
             || $this->isEcommerce
         ) {
             $requestArray["idGoal"] = $this->processOnlyIdGoal;
@@ -251,7 +252,7 @@ class Piwik_ViewDataTable_HtmlTable_Goals extends Piwik_ViewDataTable_HtmlTable
         $this->columnsToRevenueFilter[] = 'revenue_per_visit';
         foreach ($this->columnsToRevenueFilter as $columnName) {
             $this->dataTable->filter('ColumnCallbackReplace', array($columnName, create_function('$value', 'return sprintf("%.1f",$value);')));
-            $this->dataTable->filter('ColumnCallbackReplace', array($columnName, array("Piwik", "getPrettyMoney"), array($this->getIdSite())));
+            $this->dataTable->filter('ColumnCallbackReplace', array($columnName, '\Piwik\Piwik::getPrettyMoney', array($this->getIdSite())));
         }
 
         foreach ($this->columnsToConversionFilter as $columnName) {
diff --git a/core/ViewDataTable/Sparkline.php b/core/ViewDataTable/Sparkline.php
index ae85101a7812b81016cea1c7d859ecf1e82c6e71..74e72f03c9042c32436fa66147659b7558ef0014 100644
--- a/core/ViewDataTable/Sparkline.php
+++ b/core/ViewDataTable/Sparkline.php
@@ -9,6 +9,7 @@
  * @package Piwik
  */
 use Piwik\Common;
+use Piwik\DataTable;
 
 /**
  * Reads the requested DataTable from the API and prepare data for the Sparkline view.
@@ -101,11 +102,11 @@ class Piwik_ViewDataTable_Sparkline extends Piwik_ViewDataTable
             $columnToPlot = $columns[0];
         }
         $values = false;
-        // a Piwik_DataTable_Array is returned when using the normal code path to request data from Archives, in all core plugins
+        // a Set is returned when using the normal code path to request data from Archives, in all core plugins
         // however plugins can also return simple datatable, hence why the sparkline can accept both data types
-        if ($this->dataTable instanceof Piwik_DataTable_Array) {
+        if ($this->dataTable instanceof DataTable\Map) {
             $values = $this->getValuesFromDataTableArray($dataTable, $columnToPlot);
-        } elseif ($this->dataTable instanceof Piwik_DataTable) {
+        } elseif ($this->dataTable instanceof DataTable) {
             $values = $this->dataTable->getColumn($columnToPlot);
         }
         return $values;
diff --git a/index.php b/index.php
index e3486c3e3fee63ad4ade27b77b4c0f600e6da72c..6c886d84a31ba5f3c135fc25596eac4d718ca14a 100644
--- a/index.php
+++ b/index.php
@@ -34,6 +34,7 @@ session_cache_limiter('nocache');
 @date_default_timezone_set('UTC');
 require_once PIWIK_INCLUDE_PATH . '/vendor/autoload.php';
 require_once PIWIK_INCLUDE_PATH . '/core/Loader.php';
+require_once PIWIK_INCLUDE_PATH . '/core/functions.php';
 
 if (!defined('PIWIK_ENABLE_ERROR_HANDLER') || PIWIK_ENABLE_ERROR_HANDLER) {
     require_once PIWIK_INCLUDE_PATH . '/core/ErrorHandler.php';
diff --git a/libs/HTML/QuickForm2/Renderer.php b/libs/HTML/QuickForm2/Renderer.php
index 8de745308de9f849c0c28fb26f08d9a118cd5076..f88b1523cf772af07bf1b467b46441d44c9a9f6f 100644
--- a/libs/HTML/QuickForm2/Renderer.php
+++ b/libs/HTML/QuickForm2/Renderer.php
@@ -42,6 +42,7 @@
  * @version    SVN: $Id: Renderer.php 299706 2010-05-24 18:32:37Z avb $
  * @link       http://pear.php.net/package/HTML_QuickForm2
  */
+use Piwik\Plugin;
 
 /**
  * Class with static methods for loading classes and files
diff --git a/misc/cron/archive.php b/misc/cron/archive.php
index 280574ac64fa0a3f293b138faa6e3767cbdb863c..45e8abe88a3008f023ad1f7ba6b9ccdde4b1b564 100644
--- a/misc/cron/archive.php
+++ b/misc/cron/archive.php
@@ -1,7 +1,9 @@
 <?php
+use Piwik\ArchiveProcessor\Rules;
 use Piwik\Config;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
 
 $USAGE = "
 Usage: 
@@ -131,7 +133,7 @@ class Archiving
 
         $this->log("Notes");
         // Information about timeout
-        $this->todayArchiveTimeToLive = Piwik_ArchiveProcessor_Rules::getTodayArchiveTimeToLive();
+        $this->todayArchiveTimeToLive = Rules::getTodayArchiveTimeToLive();
         $this->log("- Reports for today will be processed at most every " . $this->todayArchiveTimeToLive
             . " seconds. You can change this value in Piwik UI > Settings > General Settings.");
         $this->log("- Reports for the current week/month/year will be refreshed at most every "
@@ -669,7 +671,7 @@ class Archiving
         ) // in case --force-timeout-for-periods= without [seconds] specified
         {
             // Ensure the cache for periods is at least as high as cache for today
-            $todayTTL = Piwik_ArchiveProcessor_Rules::getTodayArchiveTimeToLive();
+            $todayTTL = Rules::getTodayArchiveTimeToLive();
             if ($forceTimeoutPeriod < $todayTTL) {
                 $this->log("WARNING: Automatically increasing --force-timeout-for-periods from $forceTimeoutPeriod to "
                     . $todayTTL
@@ -680,7 +682,7 @@ class Archiving
         }
 
         // Recommend to disable browser archiving when using this script
-        if (Piwik_ArchiveProcessor_Rules::isBrowserTriggerEnabled()) {
+        if (Rules::isBrowserTriggerEnabled()) {
             $this->log("NOTE: if you execute this script at least once per hour (or more often) in a crontab, you may disable 'Browser trigger archiving' in Piwik UI > Settings > General Settings. ");
             $this->log("      see doc at: http://piwik.org/docs/setup-auto-archiving/");
         }
@@ -752,8 +754,8 @@ class Archiving
             $uniqueTimezones = Piwik_SitesManager_API::getInstance()->getUniqueSiteTimezones();
             $timezoneToProcess = array();
             foreach ($uniqueTimezones as &$timezone) {
-                $processedDateInTz = Piwik_Date::factory((int)$timestampActiveTraffic, $timezone);
-                $currentDateInTz = Piwik_Date::factory('now', $timezone);
+                $processedDateInTz = Date::factory((int)$timestampActiveTraffic, $timezone);
+                $currentDateInTz = Date::factory('now', $timezone);
 
                 if ($processedDateInTz->toString() != $currentDateInTz->toString()) {
                     $timezoneToProcess[] = $timezone;
diff --git a/piwik.php b/piwik.php
index 65fcd550835aee299e318d85c064b1ea7f154302..bafd1afdc573aa147daed9b7ce9c9b4548e4311f 100644
--- a/piwik.php
+++ b/piwik.php
@@ -33,6 +33,7 @@ if (!defined('PIWIK_INCLUDE_PATH')) {
 @ignore_user_abort(true);
 
 require_once PIWIK_INCLUDE_PATH . '/libs/upgradephp/upgrade.php';
+require_once PIWIK_INCLUDE_PATH . '/core/functions.php';
 require_once PIWIK_INCLUDE_PATH . '/core/PluginsManager.php';
 require_once PIWIK_INCLUDE_PATH . '/core/Plugin.php';
 require_once PIWIK_INCLUDE_PATH . '/core/Common.php';
diff --git a/plugins/API/API.php b/plugins/API/API.php
index b93dae790256166c60d079e184353ed0b61df381..e85974fd8e4b3eff36449b394ed54c249607798d 100644
--- a/plugins/API/API.php
+++ b/plugins/API/API.php
@@ -8,17 +8,23 @@
  * @category Piwik_Plugins
  * @package Piwik_API
  */
+use Piwik\DataTable\Filter\ColumnDelete;
+use Piwik\DataTable\Row;
 use Piwik\Metrics;
 use Piwik\Piwik;
 use Piwik\Common;
 use Piwik\Config;
+use Piwik\Date;
+use Piwik\DataTable;
+use Piwik\Plugin;
+use Piwik\Translate;
 
 require_once PIWIK_INCLUDE_PATH . '/core/Config.php';
 
 /**
  * @package Piwik_API
  */
-class Piwik_API extends Piwik_Plugin
+class Piwik_API extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
@@ -385,7 +391,7 @@ class Piwik_API_API
     public function getMetadata($idSite, $apiModule, $apiAction, $apiParameters = array(), $language = false,
                                 $period = false, $date = false, $hideMetricsDoc = false, $showSubtableReports = false)
     {
-        Piwik_Translate::getInstance()->reloadLanguage($language);
+        Translate::getInstance()->reloadLanguage($language);
         $reporter = new Piwik_API_ProcessedReport();
         $metadata =  $reporter->getMetadata($idSite, $apiModule, $apiAction, $apiParameters, $language, $period, $date, $hideMetricsDoc, $showSubtableReports);
         return $metadata;
@@ -397,7 +403,7 @@ class Piwik_API_API
      *
      * @param string $idSites Comma separated list of website Ids
      * @param bool|string $period
-     * @param bool|Piwik_Date $date
+     * @param bool|Date $date
      * @param bool $hideMetricsDoc
      * @param bool $showSubtableReports
      * @return array
@@ -466,13 +472,13 @@ class Piwik_API_API
             $params['columns'] = implode(',', $columns);
             $dataTable = Piwik_API_Proxy::getInstance()->call($className, 'get', $params);
             // make sure the table has all columns
-            $array = ($dataTable instanceof Piwik_DataTable_Array ? $dataTable->getArray() : array($dataTable));
+            $array = ($dataTable instanceof DataTable\Map ? $dataTable->getArray() : array($dataTable));
             foreach ($array as $table) {
                 // we don't support idSites=all&date=DATE1,DATE2
-                if ($table instanceof Piwik_DataTable) {
+                if ($table instanceof DataTable) {
                     $firstRow = $table->getFirstRow();
                     if (!$firstRow) {
-                        $firstRow = new Piwik_DataTable_Row;
+                        $firstRow = new Row;
                         $table->addRow($firstRow);
                     }
                     foreach ($columns as $column) {
@@ -500,7 +506,7 @@ class Piwik_API_API
     private function mergeDataTables($table1, $table2)
     {
         // handle table arrays
-        if ($table1 instanceof Piwik_DataTable_Array && $table2 instanceof Piwik_DataTable_Array) {
+        if ($table1 instanceof DataTable\Map && $table2 instanceof DataTable\Map) {
             $subTables2 = $table2->getArray();
             foreach ($table1->getArray() as $index => $subTable1) {
                 $subTable2 = $subTables2[$index];
@@ -511,7 +517,7 @@ class Piwik_API_API
 
         $firstRow1 = $table1->getFirstRow();
         $firstRow2 = $table2->getFirstRow();
-        if ($firstRow2 instanceof Piwik_DataTable_Row) {
+        if ($firstRow2 instanceof Row) {
             foreach ($firstRow2->getColumns() as $metric => $value) {
                 $firstRow1->setColumn($metric, $value);
             }
@@ -525,7 +531,7 @@ class Piwik_API_API
      *
      * @param int $idSite
      * @param string $period
-     * @param Piwik_Date $date
+     * @param Date $date
      * @param string $apiModule
      * @param string $apiAction
      * @param bool|string $label
@@ -591,7 +597,7 @@ class Piwik_API_API
             throw new Exception("Requested segment not found.");
         }
 
-        $startDate = Piwik_Date::now()->subDay(60)->toString();
+        $startDate = Date::now()->subDay(60)->toString();
         $requestLastVisits = "method=Live.getLastVisitsDetails
             &idSite=$idSite
             &period=range
@@ -622,7 +628,7 @@ class Piwik_API_API
         $values = $table->getColumn($segmentName);
 
         // Select also flattened keys (custom variables "page" scope, page URLs for one visit, page titles for one visit)
-        $valuesBis = $table->getColumnsStartingWith($segmentName . Piwik_DataTable_Filter_ColumnDelete::APPEND_TO_COLUMN_NAME_TO_KEEP);
+        $valuesBis = $table->getColumnsStartingWith($segmentName . ColumnDelete::APPEND_TO_COLUMN_NAME_TO_KEEP);
         $values = array_merge($values, $valuesBis);
 
         // remove false values (while keeping zeros)
diff --git a/plugins/API/ProcessedReport.php b/plugins/API/ProcessedReport.php
index db30a136486c40b54127a2d9bef1cc63b78f06e7..a008c820251bdaebd84e0e11486740e5ea3c4863 100644
--- a/plugins/API/ProcessedReport.php
+++ b/plugins/API/ProcessedReport.php
@@ -1,8 +1,12 @@
 <?php
+use Piwik\DataTable\Simple;
+use Piwik\DataTable\Row;
 use Piwik\Metrics;
 use Piwik\Period;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
+use Piwik\DataTable;
 use Piwik\Site;
 
 /**
@@ -60,7 +64,7 @@ class Piwik_API_ProcessedReport
      *
      * @param string $idSites Comma separated list of website Ids
      * @param bool|string $period
-     * @param bool|Piwik_Date $date
+     * @param bool|Date $date
      * @param bool $hideMetricsDoc
      * @param bool $showSubtableReports
      * @return array
@@ -272,7 +276,7 @@ class Piwik_API_ProcessedReport
         $url = Piwik_Url::getQueryStringFromParameters($parameters);
         $request = new Piwik_API_Request($url);
         try {
-            /** @var Piwik_DataTable */
+            /** @var DataTable */
             $dataTable = $request->process();
         } catch (Exception $e) {
             throw new Exception("API returned an error: " . $e->getMessage() . " at " . basename($e->getFile()) . ":" . $e->getLine() . "\n");
@@ -307,14 +311,14 @@ class Piwik_API_ProcessedReport
      * - remove metrics based on $reportMetadata['metrics']
      * - add 0 valued metrics if $dataTable doesn't provide all $reportMetadata['metrics']
      * - format metric values to a 'human readable' format
-     * - extract row metadata to a separate Piwik_DataTable_Simple|Piwik_DataTable_Array : $rowsMetadata
+     * - extract row metadata to a separate Simple|Set : $rowsMetadata
      * - translate metric names to a separate array : $columns
      *
      * @param int $idSite enables monetary value formatting based on site currency
-     * @param Piwik_DataTable|Piwik_DataTable_Array $dataTable
+     * @param \Piwik\DataTable\Set $dataTable
      * @param array $reportMetadata
      * @param bool $showRawMetrics
-     * @return array Piwik_DataTable_Simple|Piwik_DataTable_Array $newReport with human readable format & array $columns list of translated column names & Piwik_DataTable_Simple|Piwik_DataTable_Array $rowsMetadata
+     * @return array Simple|Set $newReport with human readable format & array $columns list of translated column names & Simple|Set $rowsMetadata
      */
     private function handleTableReport($idSite, $dataTable, &$reportMetadata, $showRawMetrics = false)
     {
@@ -356,17 +360,17 @@ class Piwik_API_ProcessedReport
 
         $columns = $this->hideShowMetrics($columns);
 
-        // $dataTable is an instance of Piwik_DataTable_Array when multiple periods requested
-        if ($dataTable instanceof Piwik_DataTable_Array) {
-            // Need a new Piwik_DataTable_Array to store the 'human readable' values
-            $newReport = new Piwik_DataTable_Array();
+        // $dataTable is an instance of Set when multiple periods requested
+        if ($dataTable instanceof DataTable\Map) {
+            // Need a new Set to store the 'human readable' values
+            $newReport = new DataTable\Map();
             $newReport->setKeyName("prettyDate");
 
-            // Need a new Piwik_DataTable_Array to store report metadata
-            $rowsMetadata = new Piwik_DataTable_Array();
+            // Need a new Set to store report metadata
+            $rowsMetadata = new DataTable\Map();
             $rowsMetadata->setKeyName("prettyDate");
 
-            // Process each Piwik_DataTable_Simple entry
+            // Process each Simple entry
             foreach ($dataTable->getArray() as $label => $simpleDataTable) {
                 $this->removeEmptyColumns($columns, $reportMetadata, $simpleDataTable);
 
@@ -395,7 +399,7 @@ class Piwik_API_ProcessedReport
      */
     private function removeEmptyColumns(&$columns, &$reportMetadata, $dataTable)
     {
-        $emptyColumns = $dataTable->getMetadata(Piwik_DataTable::EMPTY_COLUMNS_METADATA_NAME);
+        $emptyColumns = $dataTable->getMetadata(DataTable::EMPTY_COLUMNS_METADATA_NAME);
 
         if (!is_array($emptyColumns)) {
             return;
@@ -473,26 +477,26 @@ class Piwik_API_ProcessedReport
      * - remove metrics based on $reportMetadata['metrics']
      * - add 0 valued metrics if $simpleDataTable doesn't provide all $reportMetadata['metrics']
      * - format metric values to a 'human readable' format
-     * - extract row metadata to a separate Piwik_DataTable_Simple $rowsMetadata
+     * - extract row metadata to a separate Simple $rowsMetadata
      *
      * @param int $idSite enables monetary value formatting based on site currency
-     * @param Piwik_DataTable_Simple $simpleDataTable
+     * @param Simple $simpleDataTable
      * @param array $metadataColumns
      * @param boolean $hasDimension
      * @param bool $returnRawMetrics If set to true, the original metrics will be returned
      *
-     * @return array Piwik_DataTable $enhancedDataTable filtered metrics with human readable format & Piwik_DataTable_Simple $rowsMetadata
+     * @return array DataTable $enhancedDataTable filtered metrics with human readable format & Simple $rowsMetadata
      */
     private function handleSimpleDataTable($idSite, $simpleDataTable, $metadataColumns, $hasDimension, $returnRawMetrics = false)
     {
         // new DataTable to store metadata
-        $rowsMetadata = new Piwik_DataTable();
+        $rowsMetadata = new DataTable();
 
         // new DataTable to store 'human readable' values
         if ($hasDimension) {
-            $enhancedDataTable = new Piwik_DataTable();
+            $enhancedDataTable = new DataTable();
         } else {
-            $enhancedDataTable = new Piwik_DataTable_Simple();
+            $enhancedDataTable = new Simple();
         }
 
         // add missing metrics
@@ -506,7 +510,7 @@ class Piwik_API_ProcessedReport
         }
 
         foreach ($simpleDataTable->getRows() as $row) {
-            $enhancedRow = new Piwik_DataTable_Row();
+            $enhancedRow = new Row();
             $enhancedDataTable->addRow($enhancedRow);
             $rowMetrics = $row->getColumns();
             foreach ($rowMetrics as $columnName => $columnValue) {
@@ -528,7 +532,7 @@ class Piwik_API_ProcessedReport
 
                 // Create a row metadata only if there are metadata to insert
                 if (count($rowMetadata) > 0 || !is_null($idSubDataTable)) {
-                    $metadataRow = new Piwik_DataTable_Row();
+                    $metadataRow = new Row();
                     $rowsMetadata->addRow($metadataRow);
 
                     foreach ($rowMetadata as $metadataKey => $metadataValue) {
diff --git a/plugins/API/RowEvolution.php b/plugins/API/RowEvolution.php
index 13b1250a1c8cc981216f68e30ffaf63a400cbe4b..ec6b3c06fc25f886b3f28cdc4de5d8e233ebed4d 100644
--- a/plugins/API/RowEvolution.php
+++ b/plugins/API/RowEvolution.php
@@ -8,9 +8,13 @@
  * @category Piwik_Plugins
  * @package Piwik_API
  */
+use Piwik\DataTable\Filter\CalculateEvolutionFilter;
+use Piwik\DataTable\Filter\SafeDecodeLabel;
+use Piwik\DataTable\Row;
 use Piwik\Period;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\DataTable;
 
 /**
  * This class generates a Row evolution dataset, from input request
@@ -104,7 +108,7 @@ class Piwik_API_RowEvolution
 
     /**
      * Get row evolution for a single label
-     * @param Piwik_DataTable $dataTable
+     * @param DataTable $dataTable
      * @param array $metadata
      * @param string $apiModule
      * @param string $apiAction
@@ -119,10 +123,10 @@ class Piwik_API_RowEvolution
         $logo = $actualLabel = false;
         $urlFound = false;
         foreach ($dataTable->getArray() as $date => $subTable) {
-            /** @var $subTable Piwik_DataTable */
+            /** @var $subTable DataTable */
             $subTable->applyQueuedFilters();
             if ($subTable->getRowsCount() > 0) {
-                /** @var $row Piwik_DataTable_Row */
+                /** @var $row Row */
                 $row = $subTable->getFirstRow();
 
                 if (!$actualLabel) {
@@ -155,7 +159,7 @@ class Piwik_API_RowEvolution
         }
 
         $return = array(
-            'label'      => Piwik_DataTable_Filter_SafeDecodeLabel::safeDecodeLabel($actualLabel),
+            'label'      => SafeDecodeLabel::safeDecodeLabel($actualLabel),
             'reportData' => $dataTable,
             'metadata'   => $metadata
         );
@@ -190,7 +194,7 @@ class Piwik_API_RowEvolution
      * @param $segment
      * @param $idGoal
      * @throws Exception
-     * @return Piwik_DataTable_Array|Piwik_DataTable
+     * @return DataTable\Map|DataTable
      */
     private function loadRowEvolutionDataFromAPI($idSite, $period, $date, $apiModule, $apiAction, $label = false, $segment = false, $idGoal = false)
     {
@@ -289,7 +293,7 @@ class Piwik_API_RowEvolution
      * Given the Row evolution dataTable, and the associated metadata,
      * enriches the metadata with min/max values, and % change between the first period and the last one
      * @param array $metadata
-     * @param Piwik_DataTable_Array $dataTable
+     * @param DataTable\Map $dataTable
      */
     private function enhanceRowEvolutionMetaData(&$metadata, $dataTable)
     {
@@ -345,8 +349,8 @@ class Piwik_API_RowEvolution
                 continue;
             }
 
-            $change = Piwik_DataTable_Filter_CalculateEvolutionFilter::calculate($last, $first, $quotientPrecision = 0);
-            $change = Piwik_DataTable_Filter_CalculateEvolutionFilter::prependPlusSignToNumber($change);
+            $change = CalculateEvolutionFilter::calculate($last, $first, $quotientPrecision = 0);
+            $change = CalculateEvolutionFilter::prependPlusSignToNumber($change);
             $metricsResult[$metric]['change'] = $change;
         }
 
@@ -391,7 +395,7 @@ class Piwik_API_RowEvolution
         // array('label' => $label, 'column' => $value).
         $dataTableMulti = $dataTable->getEmptyClone();
         foreach ($dataTable->getArray() as $tableLabel => $table) {
-            $newRow = new Piwik_DataTable_Row();
+            $newRow = new Row();
 
             foreach ($labels as $labelIdx => $label) {
                 $row = $this->getRowEvolutionRowFromLabelIdx($table, $labelIdx);
@@ -429,7 +433,7 @@ class Piwik_API_RowEvolution
                 $label .= ' (' . $metadata['columns'][$column] . ')';
             }
             $metricName = $column . '_' . $labelIndex;
-            $metadata['metrics'][$metricName] = Piwik_DataTable_Filter_SafeDecodeLabel::safeDecodeLabel($label);
+            $metadata['metrics'][$metricName] = SafeDecodeLabel::safeDecodeLabel($label);
 
             if (!empty($logos[$labelIndex])) {
                 $metadata['logos'][$metricName] = $logos[$labelIndex];
@@ -448,9 +452,9 @@ class Piwik_API_RowEvolution
     /**
      * Returns the row in a datatable by its Piwik_API_DataTableManipulator_LabelFilter::FLAG_IS_ROW_EVOLUTION metadata.
      *
-     * @param Piwik_DataTable $table
+     * @param DataTable $table
      * @param int $labelIdx
-     * @return Piwik_DataTable_Row|false
+     * @return Row|false
      */
     private function getRowEvolutionRowFromLabelIdx($table, $labelIdx)
     {
diff --git a/plugins/Actions/API.php b/plugins/Actions/API.php
index 0262f807e0df3bc674a8dc42899fe7f6d6cc675f..b40afb87e20e41f1983fc9db7bfafe5d8a438b2d 100644
--- a/plugins/Actions/API.php
+++ b/plugins/Actions/API.php
@@ -12,6 +12,8 @@ use Piwik\Archive;
 use Piwik\Metrics;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
+use Piwik\DataTable;
 
 /**
  * The Actions API lets you request reports for all your Visitor Actions: Page URLs, Page titles (Piwik Events),
@@ -50,7 +52,7 @@ class Piwik_Actions_API
      * @param string $date
      * @param bool|string $segment
      * @param bool|array $columns
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function get($idSite, $period, $date, $segment = false, $columns = false)
     {
@@ -112,12 +114,12 @@ class Piwik_Actions_API
     /**
      * @param int $idSite
      * @param string $period
-     * @param Piwik_Date $date
+     * @param Date $date
      * @param bool $segment
      * @param bool $expanded
      * @param bool $idSubtable
      *
-     * @return Piwik_DataTable|Piwik_DataTable_Array
+     * @return DataTable|DataTable\Map
      */
     public function getPageUrls($idSite, $period, $date, $segment = false, $expanded = false, $idSubtable = false)
     {
@@ -130,12 +132,12 @@ class Piwik_Actions_API
     /**
      * @param int $idSite
      * @param string $period
-     * @param Piwik_Date $date
+     * @param Date $date
      * @param bool $segment
      * @param bool $expanded
      * @param bool $idSubtable
      *
-     * @return Piwik_DataTable|Piwik_DataTable_Array
+     * @return DataTable|DataTable\Map
      */
     public function getPageUrlsFollowingSiteSearch($idSite, $period, $date, $segment = false, $expanded = false, $idSubtable = false)
     {
@@ -147,12 +149,12 @@ class Piwik_Actions_API
     /**
      * @param int $idSite
      * @param string $period
-     * @param Piwik_Date $date
+     * @param Date $date
      * @param bool $segment
      * @param bool $expanded
      * @param bool $idSubtable
      *
-     * @return Piwik_DataTable|Piwik_DataTable_Array
+     * @return DataTable|DataTable\Map
      */
     public function getPageTitlesFollowingSiteSearch($idSite, $period, $date, $segment = false, $expanded = false, $idSubtable = false)
     {
@@ -162,7 +164,7 @@ class Piwik_Actions_API
     }
 
     /**
-     * @param Piwik_DataTable $dataTable
+     * @param DataTable $dataTable
      */
     protected function keepPagesFollowingSearch($dataTable)
     {
@@ -213,7 +215,7 @@ class Piwik_Actions_API
     }
 
     /**
-     * Returns a Piwik_DataTable with analytics information for every unique entry page title
+     * Returns a DataTable with analytics information for every unique entry page title
      * for the given site, time period & segment.
      */
     public function getEntryPageTitles($idSite, $period, $date, $segment = false, $expanded = false,
@@ -225,7 +227,7 @@ class Piwik_Actions_API
     }
 
     /**
-     * Returns a Piwik_DataTable with analytics information for every unique exit page title
+     * Returns a DataTable with analytics information for every unique exit page title
      * for the given site, time period & segment.
      */
     public function getExitPageTitles($idSite, $period, $date, $segment = false, $expanded = false,
@@ -306,7 +308,7 @@ class Piwik_Actions_API
                  Metrics::INDEX_SITE_SEARCH_HAS_NO_RESULT,
                  create_function('$value', 'return $value >= 1;')
             ));
-        $dataTable->deleteRow(Piwik_DataTable::ID_SUMMARY_ROW);
+        $dataTable->deleteRow(DataTable::ID_SUMMARY_ROW);
         $dataTable->deleteColumn(Metrics::INDEX_SITE_SEARCH_HAS_NO_RESULT);
         $this->filterPageDatatable($dataTable);
         $this->filterActionsDataTable($dataTable);
@@ -317,10 +319,10 @@ class Piwik_Actions_API
     /**
      * @param int $idSite
      * @param string $period
-     * @param Piwik_Date $date
+     * @param Date $date
      * @param bool $segment
      *
-     * @return Piwik_DataTable|Piwik_DataTable_Array
+     * @return DataTable|DataTable\Map
      */
     public function getSiteSearchCategories($idSite, $period, $date, $segment = false)
     {
@@ -329,10 +331,10 @@ class Piwik_Actions_API
 
         $customVarNameToLookFor = Piwik_Tracker_Action::CVAR_KEY_SEARCH_CATEGORY;
 
-        $dataTable = new Piwik_DataTable();
+        $dataTable = new DataTable();
         // Handle case where date=last30&period=day
         // FIXMEA: this logic should really be refactored somewhere, this is ugly!
-        if ($customVariables instanceof Piwik_DataTable_Array) {
+        if ($customVariables instanceof DataTable\Map) {
             $dataTable = $customVariables->getEmptyClone();
 
             $customVariableDatatables = $customVariables->getArray();
@@ -349,7 +351,7 @@ class Piwik_Actions_API
                     }
                 }
             }
-        } elseif ($customVariables instanceof Piwik_DataTable) {
+        } elseif ($customVariables instanceof DataTable) {
             $row = $customVariables->getRowFromLabel($customVarNameToLookFor);
             if ($row) {
                 $idSubtable = $row->getIdSubDataTable();
@@ -388,7 +390,7 @@ class Piwik_Actions_API
             // fetch the data table
             $table = call_user_func_array(array('Piwik\Archive', 'getDataTableFromArchive'), $callBackParameters);
 
-            if ($table instanceof Piwik_DataTable_Array) {
+            if ($table instanceof DataTable\Map) {
                 // search an array of tables, e.g. when using date=last30
                 // note that if the root is an array, we filter all children
                 // if an array occurs inside the nested table, we only look for the first match (see below)
@@ -414,7 +416,7 @@ class Piwik_Actions_API
     protected function doFilterPageDatatableSearch($callBackParameters, $table, $searchTree)
     {
         // filter a data table array
-        if ($table instanceof Piwik_DataTable_Array) {
+        if ($table instanceof DataTable\Map) {
             foreach ($table->getArray() as $subTable) {
                 $filteredSubTable = $this->doFilterPageDatatableSearch($callBackParameters, $subTable, $searchTree);
 
@@ -425,24 +427,24 @@ class Piwik_Actions_API
             }
 
             // nothing found in all sub tables
-            return new Piwik_DataTable;
+            return new DataTable;
         }
 
         // filter regular data table
-        if ($table instanceof Piwik_DataTable) {
+        if ($table instanceof DataTable) {
             // search for the first part of the tree search
             $search = array_shift($searchTree);
             $row = $table->getRowFromLabel($search);
             if ($row === false) {
                 // not found
-                $result = new Piwik_DataTable;
+                $result = new DataTable;
                 $result->metadata = $table->metadata;
                 return $result;
             }
 
             // end of tree search reached
             if (count($searchTree) == 0) {
-                $result = new Piwik_DataTable();
+                $result = new DataTable();
                 $result->addRow($row);
                 $result->metadata = $table->metadata;
                 return $result;
@@ -489,8 +491,8 @@ class Piwik_Actions_API
                                                          Metrics::INDEX_PAGE_MAX_TIME_GENERATION
                                                      )));
 
-            if ($dataTable instanceof Piwik_DataTable) {
-                $emptyColumns = $dataTable->getMetadata(Piwik_DataTable::EMPTY_COLUMNS_METADATA_NAME);
+            if ($dataTable instanceof DataTable) {
+                $emptyColumns = $dataTable->getMetadata(DataTable::EMPTY_COLUMNS_METADATA_NAME);
                 if (!is_array($emptyColumns)) {
                     $emptyColumns = array();
                 }
@@ -498,7 +500,7 @@ class Piwik_Actions_API
                 $emptyColumns[] = 'avg_time_generation';
                 $emptyColumns[] = 'min_time_generation';
                 $emptyColumns[] = 'max_time_generation';
-                $dataTable->setMetadata(Piwik_DataTable::EMPTY_COLUMNS_METADATA_NAME, $emptyColumns);
+                $dataTable->setMetadata(DataTable::EMPTY_COLUMNS_METADATA_NAME, $emptyColumns);
             }
         }
     }
@@ -519,7 +521,7 @@ class Piwik_Actions_API
     /**
      * Removes DataTable rows referencing actions that were never the first action of a visit.
      *
-     * @param Piwik_DataTable $dataTable
+     * @param DataTable $dataTable
      */
     private function filterNonEntryActions($dataTable)
     {
@@ -529,7 +531,7 @@ class Piwik_Actions_API
     /**
      * Removes DataTable rows referencing actions that were never the last action of a visit.
      *
-     * @param Piwik_DataTable $dataTable
+     * @param DataTable $dataTable
      */
     private function filterNonExitActions($dataTable)
     {
diff --git a/plugins/Actions/Actions.php b/plugins/Actions/Actions.php
index 03109bfdb983c33e647f13790525359dec0bb825..0906c0cbd32c18eebd620c8313925717b27e44f8 100644
--- a/plugins/Actions/Actions.php
+++ b/plugins/Actions/Actions.php
@@ -8,8 +8,10 @@
  * @category Piwik_Plugins
  * @package Piwik_Actions
  */
+use Piwik\ArchiveProcessor;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Plugin;
 use Piwik\SegmentExpression;
 use Piwik\Site;
 
@@ -20,7 +22,7 @@ use Piwik\Site;
  *
  * @package Piwik_Actions
  */
-class Piwik_Actions extends Piwik_Plugin
+class Piwik_Actions extends Plugin
 {
     const ACTIONS_REPORT_ROWS_DISPLAY = 100;
     
@@ -572,7 +574,7 @@ class Piwik_Actions extends Piwik_Plugin
      * For each action we process the "interest statistics" :
      * visits, unique visitors, bounce count, sum visit length.
      */
-    public function archiveDay(Piwik_ArchiveProcessor_Day $archiveProcessor)
+    public function archiveDay(ArchiveProcessor\Day $archiveProcessor)
     {
         $archiving = new Piwik_Actions_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
@@ -580,7 +582,7 @@ class Piwik_Actions extends Piwik_Plugin
         }
     }
 
-    function archivePeriod(Piwik_ArchiveProcessor_Period $archiveProcessor)
+    function archivePeriod(ArchiveProcessor\Period $archiveProcessor)
     {
         $archiving = new Piwik_Actions_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
@@ -597,7 +599,7 @@ class Piwik_Actions extends Piwik_Plugin
 
     static protected function isCustomVariablesPluginsEnabled()
     {
-        return PluginsManager::getInstance()->isPluginActivated('CustomVariables');
+        return \Piwik\PluginsManager::getInstance()->isPluginActivated('CustomVariables');
     }
 
     /**
@@ -711,7 +713,7 @@ class Piwik_Actions extends Piwik_Plugin
         );
         
         // prettify avg_time_on_page column
-        $getPrettyTimeFromSeconds = array('Piwik', 'getPrettyTimeFromSeconds');
+        $getPrettyTimeFromSeconds = '\Piwik\Piwik::getPrettyTimeFromSeconds';
         $result['filters'][] = array('ColumnCallbackReplace', array('avg_time_on_page', $getPrettyTimeFromSeconds));
         
         // prettify avg_time_generation column
diff --git a/plugins/Actions/Archiver.php b/plugins/Actions/Archiver.php
index f512bd36eab435cd86b92bb61d58a47658e3ecee..987bf5104a6bb270efe8372da80a4f67c943bc79 100644
--- a/plugins/Actions/Archiver.php
+++ b/plugins/Actions/Archiver.php
@@ -9,14 +9,18 @@
  * @package Piwik_Actions
  */
 use Piwik\Config;
+use Piwik\DataTable\Manager;
+use Piwik\DataTable\Row\DataTableSummaryRow;
 use Piwik\Metrics;
+use Piwik\DataTable;
+use Piwik\PluginsArchiver;
 
 /**
  * Class encapsulating logic to process Day/Period Archiving for the Actions reports
  *
  * @package Piwik_Actions
  */
-class Piwik_Actions_Archiver extends Piwik_PluginsArchiver
+class Piwik_Actions_Archiver extends PluginsArchiver
 {
     const DOWNLOADS_RECORD_NAME = 'Actions_downloads';
     const OUTLINKS_RECORD_NAME = 'Actions_outlink';
@@ -152,7 +156,7 @@ class Piwik_Actions_Archiver extends Piwik_PluginsArchiver
     {
         $this->actionsTablesByType = array();
         foreach (self::$actionTypes as $type) {
-            $dataTable = new Piwik_DataTable();
+            $dataTable = new DataTable();
             $dataTable->setMaximumAllowedRows(Piwik_Actions_ArchivingHelper::$maximumRowsInDataTableLevelZero);
 
             if ($type == Piwik_Tracker_Action::TYPE_ACTION_URL
@@ -212,7 +216,7 @@ class Piwik_Actions_Archiver extends Piwik_PluginsArchiver
         $rankingQuery = false;
         if ($rankingQueryLimit > 0) {
             $rankingQuery = new Piwik_RankingQuery($rankingQueryLimit);
-            $rankingQuery->setOthersLabel(Piwik_DataTable::LABEL_SUMMARY_ROW);
+            $rankingQuery->setOthersLabel(DataTable::LABEL_SUMMARY_ROW);
             $rankingQuery->addLabelColumn(array('idaction', 'name'));
             $rankingQuery->addColumn(array('url_prefix', Metrics::INDEX_NB_UNIQ_VISITORS));
             $rankingQuery->addColumn(array(Metrics::INDEX_PAGE_NB_HITS, Metrics::INDEX_NB_VISITS), 'sum');
@@ -291,7 +295,7 @@ class Piwik_Actions_Archiver extends Piwik_PluginsArchiver
         $rankingQuery = false;
         if ($rankingQueryLimit > 0) {
             $rankingQuery = new Piwik_RankingQuery($rankingQueryLimit);
-            $rankingQuery->setOthersLabel(Piwik_DataTable::LABEL_SUMMARY_ROW);
+            $rankingQuery->setOthersLabel(DataTable::LABEL_SUMMARY_ROW);
             $rankingQuery->addLabelColumn('idaction');
             $rankingQuery->addColumn(Metrics::INDEX_PAGE_ENTRY_NB_UNIQ_VISITORS);
             $rankingQuery->addColumn(array(Metrics::INDEX_PAGE_ENTRY_NB_VISITS,
@@ -342,7 +346,7 @@ class Piwik_Actions_Archiver extends Piwik_PluginsArchiver
         $rankingQuery = false;
         if ($rankingQueryLimit > 0) {
             $rankingQuery = new Piwik_RankingQuery($rankingQueryLimit);
-            $rankingQuery->setOthersLabel(Piwik_DataTable::LABEL_SUMMARY_ROW);
+            $rankingQuery->setOthersLabel(DataTable::LABEL_SUMMARY_ROW);
             $rankingQuery->addLabelColumn('idaction');
             $rankingQuery->addColumn(Metrics::INDEX_PAGE_EXIT_NB_UNIQ_VISITORS);
             $rankingQuery->addColumn(Metrics::INDEX_PAGE_EXIT_NB_VISITS, 'sum');
@@ -388,7 +392,7 @@ class Piwik_Actions_Archiver extends Piwik_PluginsArchiver
         $rankingQuery = false;
         if ($rankingQueryLimit > 0) {
             $rankingQuery = new Piwik_RankingQuery($rankingQueryLimit);
-            $rankingQuery->setOthersLabel(Piwik_DataTable::LABEL_SUMMARY_ROW);
+            $rankingQuery->setOthersLabel(DataTable::LABEL_SUMMARY_ROW);
             $rankingQuery->addLabelColumn('idaction');
             $rankingQuery->addColumn(Metrics::INDEX_PAGE_SUM_TIME_SPENT, 'sum');
             $rankingQuery->partitionResultIntoMultipleGroups('type', array_keys($this->actionsTablesByType));
@@ -454,7 +458,7 @@ class Piwik_Actions_Archiver extends Piwik_PluginsArchiver
 
     /**
      * @param $typeId
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     protected function getDataTable($typeId)
     {
@@ -472,20 +476,20 @@ class Piwik_Actions_Archiver extends Piwik_PluginsArchiver
      * For rows which have subtables (eg. directories with sub pages),
      * deletes columns which don't make sense when all values of sub pages are summed.
      *
-     * @param $dataTable Piwik_DataTable
+     * @param $dataTable DataTable
      */
     static public function deleteInvalidSummedColumnsFromDataTable($dataTable)
     {
         foreach ($dataTable->getRows() as $id => $row) {
             if (($idSubtable = $row->getIdSubDataTable()) !== null
-                || $id === Piwik_DataTable::ID_SUMMARY_ROW
+                || $id === DataTable::ID_SUMMARY_ROW
             ) {
                 if ($idSubtable !== null) {
-                    $subtable = Piwik_DataTable_Manager::getInstance()->getTable($idSubtable);
+                    $subtable = Manager::getInstance()->getTable($idSubtable);
                     self::deleteInvalidSummedColumnsFromDataTable($subtable);
                 }
 
-                if ($row instanceof Piwik_DataTable_Row_DataTableSummary) {
+                if ($row instanceof DataTableSummaryRow) {
                     $row->recalculate();
                 }
 
diff --git a/plugins/Actions/ArchivingHelper.php b/plugins/Actions/ArchivingHelper.php
index 514b75116be3723c7ae059352a1743db894baa91..2e885a435e74ed8771452c84a91a848030727c99 100644
--- a/plugins/Actions/ArchivingHelper.php
+++ b/plugins/Actions/ArchivingHelper.php
@@ -9,7 +9,9 @@
  * @package Piwik_Actions
  */
 use Piwik\Config;
+use Piwik\DataTable\Row;
 use Piwik\Metrics;
+use Piwik\DataTable;
 
 /**
  * This static class provides:
@@ -55,7 +57,7 @@ class Piwik_Actions_ArchivingHelper
             ) {
                 $url = null;
             } elseif (!empty($row['name'])
-                && $row['name'] != Piwik_DataTable::LABEL_SUMMARY_ROW
+                && $row['name'] != DataTable::LABEL_SUMMARY_ROW
             ) {
                 $url = Piwik_Tracker_Action::reconstructNormalizedUrl((string)$row['name'], $row['url_prefix']);
             }
@@ -70,7 +72,7 @@ class Piwik_Actions_ArchivingHelper
 
                 // in some unknown case, the type field is NULL, as reported in #1082 - we ignore this page view
                 if (empty($actionType)) {
-                    if ($idaction != Piwik_DataTable::LABEL_SUMMARY_ROW) {
+                    if ($idaction != DataTable::LABEL_SUMMARY_ROW) {
                         self::setCachedActionRow($idaction, $actionType, false);
                     }
                     continue;
@@ -97,7 +99,7 @@ class Piwik_Actions_ArchivingHelper
             // This is to ensure that when, different URLs are loaded with the same page name.
             // For example http://piwik.org and http://id.piwik.org are reported in Piwik > Actions > Pages with /index
             // But, we must make sure http://piwik.org is used to link & for transitions
-            // Note: this code is partly duplicated from Piwik_DataTable_Row->sumRowMetadata()
+            // Note: this code is partly duplicated from Row->sumRowMetadata()
             if (!is_null($url)
                 && !$actionRow->isSummaryRow()
             ) {
@@ -220,7 +222,7 @@ class Piwik_Actions_ArchivingHelper
         self::$maximumRowsInDataTableLevelZero = Config::getInstance()->General['datatable_archiving_maximum_rows_actions'];
         self::$maximumRowsInSubDataTable = Config::getInstance()->General['datatable_archiving_maximum_rows_subtable_actions'];
 
-        Piwik_DataTable::setMaximumDepthLevelAllowedAtLeast(self::getSubCategoryLevelLimit() + 1);
+        DataTable::setMaximumDepthLevelAllowedAtLeast(self::getSubCategoryLevelLimit() + 1);
     }
 
 
@@ -229,7 +231,7 @@ class Piwik_Actions_ArchivingHelper
      * there could be pages that have exit/entry hits, but don't yet
      * have a record in the table (or the record was truncated).
      *
-     * @return Piwik_DataTable_Row
+     * @return Row
      */
     static private function getDefaultRow()
     {
@@ -238,8 +240,8 @@ class Piwik_Actions_ArchivingHelper
             // This row is used in the case where an action is know as an exit_action
             // but this action was not properly recorded when it was hit in the first place
             // so we add this fake row information to make sure there is a nb_hits, etc. column for every action
-            $row = new Piwik_DataTable_Row(array(
-                                                Piwik_DataTable_Row::COLUMNS => array(
+            $row = new Row(array(
+                                                Row::COLUMNS => array(
                                                     Metrics::INDEX_NB_VISITS        => 1,
                                                     Metrics::INDEX_NB_UNIQ_VISITORS => 1,
                                                     Metrics::INDEX_PAGE_NB_HITS     => 1,
@@ -256,17 +258,17 @@ class Piwik_Actions_ArchivingHelper
      * @param int $actionType
      * @param int $urlPrefix
      * @param array $actionsTablesByType
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     protected static function getActionRow($actionName, $actionType, $urlPrefix = null, &$actionsTablesByType)
     {
         // we work on the root table of the given TYPE (either ACTION_URL or DOWNLOAD or OUTLINK etc.)
-        /* @var Piwik_DataTable $currentTable */
+        /* @var DataTable $currentTable */
         $currentTable =& $actionsTablesByType[$actionType];
 
         // check for ranking query cut-off
-        if ($actionName == Piwik_DataTable::LABEL_SUMMARY_ROW) {
-            $summaryRow = $currentTable->getRowFromId(Piwik_DataTable::ID_SUMMARY_ROW);
+        if ($actionName == DataTable::LABEL_SUMMARY_ROW) {
+            $summaryRow = $currentTable->getRowFromId(DataTable::ID_SUMMARY_ROW);
             if ($summaryRow === false) {
                 $summaryRow = $currentTable->addSummaryRow(self::createSummaryRow());
             }
@@ -296,11 +298,11 @@ class Piwik_Actions_ArchivingHelper
      *  we explode link http://piwik.org/some/path into an array( 'some', 'path' );
      *
      * for action names:
-     *   we explode name 'Piwik / Category 1 / Category 2' into an array('Piwik', 'Category 1', 'Category 2');
+     *   we explode name 'Piwik / Category 1 / Category 2' into an array('\Piwik\Piwik', 'Category 1', 'Category 2');
      *
-     * @param string action name
-     * @param int action type
-     * @param int url prefix (only used for TYPE_ACTION_URL)
+     * @param string $name action name
+     * @param int $type action type
+     * @param int $urlPrefix url prefix (only used for TYPE_ACTION_URL)
      * @return array of exploded elements from $name
      */
     static public function getActionExplodedNames($name, $type, $urlPrefix = null)
@@ -402,7 +404,7 @@ class Piwik_Actions_ArchivingHelper
      */
     private static function getCachedActionRowKey($idAction, $actionType)
     {
-        return $idAction == Piwik_DataTable::LABEL_SUMMARY_ROW
+        return $idAction == DataTable::LABEL_SUMMARY_ROW
             ? $actionType . '_others'
             : $idAction;
     }
@@ -451,7 +453,7 @@ class Piwik_Actions_ArchivingHelper
      *
      * @param int $idAction
      * @param int $actionType
-     * @return Piwik_DataTable_Row|false
+     * @return Row|false
      */
     private static function getCachedActionRow($idAction, $actionType)
     {
@@ -472,7 +474,7 @@ class Piwik_Actions_ArchivingHelper
      *
      * @param int $idAction
      * @param int $actionType
-     * @param Piwik_DataTable_Row
+     * @param \DataTable\Row
      */
     private static function setCachedActionRow($idAction, $actionType, $actionRow)
     {
@@ -496,13 +498,13 @@ class Piwik_Actions_ArchivingHelper
     /**
      * Creates a summary row for an Actions DataTable.
      *
-     * @return Piwik_DataTable_Row
+     * @return Row
      */
     private static function createSummaryRow()
     {
-        return new Piwik_DataTable_Row(array(
-                                            Piwik_DataTable_Row::COLUMNS =>
-                                            array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW) + self::getDefaultRowColumns()
+        return new Row(array(
+                                            Row::COLUMNS =>
+                                            array('label' => DataTable::LABEL_SUMMARY_ROW) + self::getDefaultRowColumns()
                                        ));
     }
 }
diff --git a/plugins/Actions/Controller.php b/plugins/Actions/Controller.php
index 6044c225d893e0b6b6086b66d5033cbb72444c46..f90ad12f2863622d972130b6d56cb71f618a1a5c 100644
--- a/plugins/Actions/Controller.php
+++ b/plugins/Actions/Controller.php
@@ -49,7 +49,7 @@ class Piwik_Actions_Controller extends Piwik_Controller
         $view->noResultKeywords = $this->getSiteSearchNoResultKeywords(true);
         $view->pagesUrlsFollowingSiteSearch = $this->getPageUrlsFollowingSiteSearch(true);
 
-        $categoryTrackingEnabled = PluginsManager::getInstance()->isPluginActivated('CustomVariables');
+        $categoryTrackingEnabled = \Piwik\PluginsManager::getInstance()->isPluginActivated('CustomVariables');
         if ($categoryTrackingEnabled) {
             $view->categories = $this->getSiteSearchCategories(true);
         }
diff --git a/plugins/Annotations/API.php b/plugins/Annotations/API.php
index 603cce5431cdd0588eb798a09868a989c24a3e5b..8e2ec1c167d03e7eb46c8f50795ce70b7f7e0924 100755
--- a/plugins/Annotations/API.php
+++ b/plugins/Annotations/API.php
@@ -9,8 +9,9 @@
  * @package Piwik_Annotations
  */
 use Piwik\Period;
-use Piwik\Period_Range;
+use Piwik\Period\Range;
 use Piwik\Piwik;
+use Piwik\Date;
 
 /**
  * @see plugins/Annotations/AnnotationList.php
@@ -248,7 +249,7 @@ class Piwik_Annotations_API
                     && $result[$idSite][$strDate]['count'] == 1
                 ) {
                     $annotationsForSite = $annotations->search(
-                        $date, Piwik_Date::factory($nextDate->getTimestamp() - 1), $idSite);
+                        $date, Date::factory($nextDate->getTimestamp() - 1), $idSite);
                     $annotation = reset($annotationsForSite[$idSite]);
 
                     $result[$idSite][$strDate]['note'] = $annotation['note'];
@@ -318,9 +319,9 @@ class Piwik_Annotations_API
             || $period == 'range'
         ) {
             if ($period == 'range') {
-                $oPeriod = new Period_Range('day', $date);
+                $oPeriod = new Range('day', $date);
             } else {
-                $oPeriod = Period::factory($period, Piwik_Date::factory($date));
+                $oPeriod = Period::factory($period, Date::factory($date));
             }
 
             $startDate = $oPeriod->getDateStart();
@@ -331,8 +332,8 @@ class Piwik_Annotations_API
                 Piwik_ViewDataTable_GenerateGraphHTML_ChartEvolution::getDateRangeAndLastN($period, $date, $lastN);
             list($startDate, $endDate) = explode(',', $date);
 
-            $startDate = Piwik_Date::factory($startDate);
-            $endDate = Piwik_Date::factory($endDate);
+            $startDate = Date::factory($startDate);
+            $endDate = Date::factory($endDate);
         }
         return array($startDate, $endDate);
     }
@@ -361,6 +362,6 @@ class Piwik_Annotations_API
             return;
         }
 
-        Piwik_Date::factory($date);
+        Date::factory($date);
     }
 }
diff --git a/plugins/Annotations/AnnotationList.php b/plugins/Annotations/AnnotationList.php
index 4d15e91e50f3451bf69b56804423ae95ca6cb9bb..0f5ba42ae91ef665597137781c9134c748616bc8 100755
--- a/plugins/Annotations/AnnotationList.php
+++ b/plugins/Annotations/AnnotationList.php
@@ -9,6 +9,7 @@
  * @package Piwik_Annotations
  */
 use Piwik\Piwik;
+use Piwik\Date;
 use Piwik\Site;
 
 /**
@@ -172,7 +173,6 @@ class Piwik_Annotations_AnnotationList
      *
      * @param int $idSite The ID of the site to get an annotation for.
      * @param int $idNote The ID of the note to get.
-     * @param array The annotation.
      * @throws Exception if $idSite is not an ID that was supplied upon construction.
      * @throws Exception if $idNote does not refer to valid note for the site.
      */
@@ -194,8 +194,8 @@ class Piwik_Annotations_AnnotationList
      *
      * @see self::get for info on what attributes stored within annotations.
      *
-     * @param Piwik_Date|bool $startDate The start of the date range.
-     * @param Piwik_Date|bool $endDate The end of the date range.
+     * @param Date|bool $startDate The start of the date range.
+     * @param Date|bool $endDate The end of the date range.
      * @param array|bool|int|string $idSite IDs of the sites whose annotations to
      *                                       search through.
      * @return array Array mapping site IDs with arrays of annotations, eg:
@@ -230,7 +230,7 @@ class Piwik_Annotations_AnnotationList
 
             foreach ($this->annotations[$idSite] as $idNote => $annotation) {
                 if ($startDate !== false) {
-                    $annotationDate = Piwik_Date::factory($annotation['date']);
+                    $annotationDate = Date::factory($annotation['date']);
                     if ($annotationDate->getTimestamp() < $startDate->getTimestamp()
                         || $annotationDate->getTimestamp() > $endDate->getTimestamp()
                     ) {
@@ -266,7 +266,7 @@ class Piwik_Annotations_AnnotationList
         $this->checkIdSiteIsLoaded($idSite);
 
         // search includes end date, and count should not, so subtract one from the timestamp
-        $annotations = $this->search($startDate, Piwik_Date::factory($endDate->getTimestamp() - 1));
+        $annotations = $this->search($startDate, Date::factory($endDate->getTimestamp() - 1));
 
         // count the annotations
         $count = $starred = 0;
diff --git a/plugins/Annotations/Annotations.php b/plugins/Annotations/Annotations.php
index 1ef39eeee6175577991e7748d8236cdc176320dd..5b29ec48b5b339d1be4b6b898be4b0ff4f8b9d5c 100755
--- a/plugins/Annotations/Annotations.php
+++ b/plugins/Annotations/Annotations.php
@@ -8,6 +8,7 @@
  * @category Piwik_Plugins
  * @package Piwik_Annotations
  */
+use Piwik\Plugin;
 
 /**
  * Annotations plugins. Provides the ability to attach text notes to
@@ -15,7 +16,7 @@
  *
  * @package Piwik_Annotations
  */
-class Piwik_Annotations extends Piwik_Plugin
+class Piwik_Annotations extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
diff --git a/plugins/AnonymizeIP/AnonymizeIP.php b/plugins/AnonymizeIP/AnonymizeIP.php
index a835a91d8aa780f72cbe36f6e9515c2244cf07c8..7d6ce520a94ce1480d5b1f00acc6126ed5eacb1b 100644
--- a/plugins/AnonymizeIP/AnonymizeIP.php
+++ b/plugins/AnonymizeIP/AnonymizeIP.php
@@ -10,13 +10,14 @@
  */
 use Piwik\Config;
 use Piwik\Common;
+use Piwik\Plugin;
 
 /**
  * Anonymize visitor IP addresses to comply with the privacy laws/guidelines in countries, such as Germany.
  *
  * @package Piwik_AnonymizeIP
  */
-class Piwik_AnonymizeIP extends Piwik_Plugin
+class Piwik_AnonymizeIP extends Plugin
 {
     /**
      * @see Piwik_Plugin::getInformation
diff --git a/plugins/CoreAdminHome/API.php b/plugins/CoreAdminHome/API.php
index d9bf9b4cee65b1772a4a4cb4aa4d50288a8cf2c6..fe6772fe09226c95bac710d03e0e4eeb4896b05b 100644
--- a/plugins/CoreAdminHome/API.php
+++ b/plugins/CoreAdminHome/API.php
@@ -8,9 +8,13 @@
  * @category Piwik_Plugins
  * @package Piwik_CoreAdminHome
  */
+use Piwik\DataAccess\ArchiveTableCreator;
 use Piwik\Period;
+use Piwik\Period\Week;
 use Piwik\Piwik;
+use Piwik\Config;
 use Piwik\Common;
+use Piwik\Date;
 use Piwik\Site;
 
 /**
@@ -85,7 +89,7 @@ class Piwik_CoreAdminHome_API
         $dates = array_unique($dates);
         foreach ($dates as $theDate) {
             try {
-                $date = Piwik_Date::factory($theDate);
+                $date = Date::factory($theDate);
             } catch (Exception $e) {
                 $invalidDates[] = $theDate;
                 continue;
@@ -105,13 +109,13 @@ class Piwik_CoreAdminHome_API
         if ($logsDeleteEnabled
             && $logsAreDeletedBeforeThisDate
         ) {
-            $minimumDateWithLogs = Piwik_Date::factory('today')->subDay($logsAreDeletedBeforeThisDate);
+            $minimumDateWithLogs = Date::factory('today')->subDay($logsAreDeletedBeforeThisDate);
         }
 
         // Given the list of dates, process which tables they should be deleted from
         $minDate = false;
         $warningDates = $processedDates = array();
-        /* @var $date Piwik_Date */
+        /* @var $date Date */
         foreach ($toInvalidate as $date) {
             // we should only delete reports for dates that are more recent than N days
             if ($minimumDateWithLogs
@@ -131,7 +135,7 @@ class Piwik_CoreAdminHome_API
             $datesByMonth[$year][] = $date->toString();
 
             // but also weeks overlapping several months stored in the month where the week is starting
-            /* @var $week Piwik_Period_Week */
+            /* @var $week Week */
             $week = Period::factory('week', $date);
             $weekAsString = $week->getDateStart()->toString('Y_m');
             $datesByMonth[$weekAsString][] = $date->toString();
@@ -146,10 +150,10 @@ class Piwik_CoreAdminHome_API
 
         // In each table, invalidate day/week/month/year containing this date
         $sqlIdSites = implode(",", $idSites);
-        $archiveTables = Piwik_DataAccess_ArchiveTableCreator::getTablesArchivesInstalled();
+        $archiveTables = ArchiveTableCreator::getTablesArchivesInstalled();
         foreach ($archiveTables as $table) {
             // Extract Y_m from table name
-            $suffix = Piwik_DataAccess_ArchiveTableCreator::getDateFromTableName($table);
+            $suffix = ArchiveTableCreator::getDateFromTableName($table);
             if (!isset($datesByMonth[$suffix])) {
                 continue;
             }
diff --git a/plugins/CoreAdminHome/Controller.php b/plugins/CoreAdminHome/Controller.php
index 612a9e1c3e3f0e08577541637d563c401732a07f..5bae81c7568449b7a47ce2735d63915eac182566 100644
--- a/plugins/CoreAdminHome/Controller.php
+++ b/plugins/CoreAdminHome/Controller.php
@@ -8,6 +8,7 @@
  * @category Piwik_Plugins
  * @package Piwik_CoreAdminHome
  */
+use Piwik\ArchiveProcessor\Rules;
 use Piwik\Config;
 use Piwik\Piwik;
 use Piwik\Common;
@@ -33,8 +34,8 @@ class Piwik_CoreAdminHome_Controller extends Piwik_Controller_Admin
         $view = new Piwik_View('@CoreAdminHome/generalSettings');
 
         if (Piwik::isUserIsSuperUser()) {
-            $enableBrowserTriggerArchiving = Piwik_ArchiveProcessor_Rules::isBrowserTriggerEnabled();
-            $todayArchiveTimeToLive = Piwik_ArchiveProcessor_Rules::getTodayArchiveTimeToLive();
+            $enableBrowserTriggerArchiving = Rules::isBrowserTriggerEnabled();
+            $todayArchiveTimeToLive = Rules::getTodayArchiveTimeToLive();
             $showWarningCron = false;
             if (!$enableBrowserTriggerArchiving
                 && $todayArchiveTimeToLive < 3600
@@ -83,8 +84,8 @@ class Piwik_CoreAdminHome_Controller extends Piwik_Controller_Admin
             $enableBrowserTriggerArchiving = Common::getRequestVar('enableBrowserTriggerArchiving');
             $todayArchiveTimeToLive = Common::getRequestVar('todayArchiveTimeToLive');
 
-            Piwik_ArchiveProcessor_Rules::setBrowserTriggerArchiving((bool)$enableBrowserTriggerArchiving);
-            Piwik_ArchiveProcessor_Rules::setTodayArchiveTimeToLive($todayArchiveTimeToLive);
+            Rules::setBrowserTriggerArchiving((bool)$enableBrowserTriggerArchiving);
+            Rules::setTodayArchiveTimeToLive($todayArchiveTimeToLive);
 
             // Update email settings
             $mail = array();
diff --git a/plugins/CoreAdminHome/CoreAdminHome.php b/plugins/CoreAdminHome/CoreAdminHome.php
index 110feb03b64ea29fe67fe268777b40d0e04bd848..39a4f08199610ae26bef0e28647a8b76807754ce 100644
--- a/plugins/CoreAdminHome/CoreAdminHome.php
+++ b/plugins/CoreAdminHome/CoreAdminHome.php
@@ -8,13 +8,17 @@
  * @category Piwik_Plugins
  * @package Piwik_CoreAdminHome
  */
+use Piwik\DataAccess\ArchiveSelector;
+use Piwik\DataAccess\ArchiveTableCreator;
 use Piwik\Piwik;
+use Piwik\Date;
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_CoreAdminHome
  */
-class Piwik_CoreAdminHome extends Piwik_Plugin
+class Piwik_CoreAdminHome extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
@@ -72,10 +76,10 @@ class Piwik_CoreAdminHome extends Piwik_Plugin
 
     function addMenu()
     {
-        Piwik_AddAdminSubMenu('CoreAdminHome_MenuManage', NULL, "", Piwik::isUserHasSomeAdminAccess(), $order = 1);
-        Piwik_AddAdminSubMenu('CoreAdminHome_MenuCommunity', NULL, "", Piwik::isUserHasSomeAdminAccess(), $order = 3);
-        Piwik_AddAdminSubMenu('CoreAdminHome_MenuDiagnostic', NULL, "", Piwik::isUserHasSomeAdminAccess(), $order = 20);
-        Piwik_AddAdminSubMenu('General_Settings', NULL, "", Piwik::isUserHasSomeAdminAccess(), $order = 5);
+        Piwik_AddAdminSubMenu('CoreAdminHome_MenuManage', null, "", Piwik::isUserHasSomeAdminAccess(), $order = 1);
+        Piwik_AddAdminSubMenu('CoreAdminHome_MenuCommunity', null, "", Piwik::isUserHasSomeAdminAccess(), $order = 3);
+        Piwik_AddAdminSubMenu('CoreAdminHome_MenuDiagnostic', null, "", Piwik::isUserHasSomeAdminAccess(), $order = 20);
+        Piwik_AddAdminSubMenu('General_Settings', null, "", Piwik::isUserHasSomeAdminAccess(), $order = 5);
         Piwik_AddAdminSubMenu('General_Settings', 'CoreAdminHome_MenuGeneralSettings',
             array('module' => 'CoreAdminHome', 'action' => 'generalSettings'),
             Piwik::isUserHasSomeAdminAccess(),
@@ -89,17 +93,17 @@ class Piwik_CoreAdminHome extends Piwik_Plugin
 
     function purgeOutdatedArchives()
     {
-        $archiveTables = Piwik_DataAccess_ArchiveTableCreator::getTablesArchivesInstalled();
+        $archiveTables = ArchiveTableCreator::getTablesArchivesInstalled();
         foreach ($archiveTables as $table) {
-            $date = Piwik_DataAccess_ArchiveTableCreator::getDateFromTableName($table);
+            $date = ArchiveTableCreator::getDateFromTableName($table);
             list($month, $year) = explode('_', $date);
-            Piwik_DataAccess_ArchiveSelector::purgeOutdatedArchives(Piwik_Date::factory("$year-$month-15"));
+            ArchiveSelector::purgeOutdatedArchives(Date::factory("$year-$month-15"));
         }
     }
 
     function optimizeArchiveTable()
     {
-        $archiveTables = Piwik_DataAccess_ArchiveTableCreator::getTablesArchivesInstalled();
+        $archiveTables = ArchiveTableCreator::getTablesArchivesInstalled();
         Piwik_OptimizeTables($archiveTables);
     }
 }
diff --git a/plugins/CoreHome/Controller.php b/plugins/CoreHome/Controller.php
index 08eabcbf82f62a4df41b84bfee07a88e04a48073..c95b5d61ce7fa35bf21fe8c66a0d53c850391e8b 100644
--- a/plugins/CoreHome/Controller.php
+++ b/plugins/CoreHome/Controller.php
@@ -10,6 +10,7 @@
  */
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
 use Piwik\Site;
 
 /**
@@ -31,7 +32,7 @@ class Piwik_CoreHome_Controller extends Piwik_Controller
 
         // User preference: default report to load is the All Websites dashboard
         if ($defaultReport == 'MultiSites'
-            && PluginsManager::getInstance()->isPluginActivated('MultiSites')
+            && \Piwik\PluginsManager::getInstance()->isPluginActivated('MultiSites')
         ) {
             $module = 'MultiSites';
         }
@@ -76,8 +77,8 @@ class Piwik_CoreHome_Controller extends Piwik_Controller
         if ($websiteId) {
             $website = new Site($websiteId);
             $datetimeCreationDate = $this->site->getCreationDate()->getDatetime();
-            $creationDateLocalTimezone = Piwik_Date::factory($datetimeCreationDate, $website->getTimezone())->toString('Y-m-d');
-            $todayLocalTimezone = Piwik_Date::factory('now', $website->getTimezone())->toString('Y-m-d');
+            $creationDateLocalTimezone = Date::factory($datetimeCreationDate, $website->getTimezone())->toString('Y-m-d');
+            $todayLocalTimezone = Date::factory('now', $website->getTimezone())->toString('Y-m-d');
             if ($creationDateLocalTimezone == $todayLocalTimezone) {
                 Piwik::redirectToModule('CoreHome', 'index',
                     array('date'   => 'today',
diff --git a/plugins/CoreHome/CoreHome.php b/plugins/CoreHome/CoreHome.php
index 07820ffe01971adc45aa9bbe8bba6dbf4008a07b..56c4dbbfd291fd14acef0067986ce62da431b01e 100644
--- a/plugins/CoreHome/CoreHome.php
+++ b/plugins/CoreHome/CoreHome.php
@@ -8,12 +8,13 @@
  * @category Piwik_Plugins
  * @package Piwik_CoreHome
  */
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_CoreHome
  */
-class Piwik_CoreHome extends Piwik_Plugin
+class Piwik_CoreHome extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
diff --git a/plugins/CoreHome/DataTableRowAction/RowEvolution.php b/plugins/CoreHome/DataTableRowAction/RowEvolution.php
index 4d16253e6bbddbe77ae2910aaa46f99a8ea47f06..3b3bea686c7c7a557f7333b602fcd7ae40a6a2e6 100644
--- a/plugins/CoreHome/DataTableRowAction/RowEvolution.php
+++ b/plugins/CoreHome/DataTableRowAction/RowEvolution.php
@@ -10,6 +10,7 @@
  */
 use Piwik\Common;
 use Piwik\Metrics;
+use Piwik\Date;
 
 /**
  * ROW EVOLUTION
@@ -45,7 +46,7 @@ class Piwik_CoreHome_DataTableRowAction_RowEvolution
 
     /**
      * The data
-     * @var Piwik_DataTable_Array
+     * @var DataTable
      */
     protected $dataTable;
 
@@ -68,7 +69,7 @@ class Piwik_CoreHome_DataTableRowAction_RowEvolution
      * The constructor
      * Initialize some local variables from the request
      * @param int $idSite
-     * @param Piwik_Date $date ($this->date from controller)
+     * @param Date $date ($this->date from controller)
      * @param null|string $graphType
      * @throws Exception
      */
diff --git a/plugins/CoreHome/templates/_dataTable.twig b/plugins/CoreHome/templates/_dataTable.twig
index d6b51d34f15aa56aca927a89aca2f7ad7d38969e..73eb6f1143eb715967c598b90de83ab84f37a7b7 100644
--- a/plugins/CoreHome/templates/_dataTable.twig
+++ b/plugins/CoreHome/templates/_dataTable.twig
@@ -1,3 +1,4 @@
+{% set summaryRowId = -1 %}{# ID_SUMMARY_ROW #}
 {% set isSubtable = javascriptVariablesToSet.idSubtable is defined and javascriptVariablesToSet.idSubtable != 0 %}
 <div class="dataTable {{ properties.datatable_css_class }} {% if isSubtable %}subDataTable{% endif %}"
      data-table-type="{{ properties.datatable_js_type|default('dataTable') }}"
@@ -26,7 +27,7 @@
                     <tbody>
                     {% for rowId, row in dataTable.getRows() %}
                         {%- set rowHasSubtable = row.getIdSubDataTable() and javascriptVariablesToSet.controllerActionCalledWhenRequestSubTable is not null -%}
-                        {%- set shouldHighlightRow = rowId == constant("Piwik_DataTable::ID_SUMMARY_ROW") and properties.highlight_summary_row -%}
+                        {%- set shouldHighlightRow = rowId == summaryRowId and properties.highlight_summary_row -%}
                         
                         {# display this row if it doesn't have a subtable or if we don't replace the row with the subtable #}
                         {% if not rowHasSubtable or not properties.show_expanded|default(false) or not properties.replace_row_with_subtable|default(false) %}
diff --git a/plugins/CorePluginsAdmin/Controller.php b/plugins/CorePluginsAdmin/Controller.php
index 64f7be4bb3a3129980db62b9dc943aee0b0f41a0..ff0900073e24a45f4c08267be43dc23d52e26f44 100644
--- a/plugins/CorePluginsAdmin/Controller.php
+++ b/plugins/CorePluginsAdmin/Controller.php
@@ -10,6 +10,7 @@
  */
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Config;
 
 /**
  *
@@ -51,21 +52,21 @@ class Piwik_CorePluginsAdmin_Controller extends Piwik_Controller_Admin
         $plugins = array();
 
         $listPlugins = array_merge(
-            PluginsManager::getInstance()->readPluginsDirectory(),
+            \Piwik\PluginsManager::getInstance()->readPluginsDirectory(),
             Config::getInstance()->Plugins['Plugins']
         );
         $listPlugins = array_unique($listPlugins);
         foreach ($listPlugins as $pluginName) {
-            PluginsManager::getInstance()->loadPlugin($pluginName);
+            \Piwik\PluginsManager::getInstance()->loadPlugin($pluginName);
             $plugins[$pluginName] = array(
-                'activated'       => PluginsManager::getInstance()->isPluginActivated($pluginName),
-                'alwaysActivated' => PluginsManager::getInstance()->isPluginAlwaysActivated($pluginName),
-                'uninstallable'   => PluginsManager::getInstance()->isPluginUninstallable($pluginName),
+                'activated'       => \Piwik\PluginsManager::getInstance()->isPluginActivated($pluginName),
+                'alwaysActivated' => \Piwik\PluginsManager::getInstance()->isPluginAlwaysActivated($pluginName),
+                'uninstallable'   => \Piwik\PluginsManager::getInstance()->isPluginUninstallable($pluginName),
             );
         }
-        PluginsManager::getInstance()->loadPluginTranslations();
+        \Piwik\PluginsManager::getInstance()->loadPluginTranslations();
 
-        $loadedPlugins = PluginsManager::getInstance()->getLoadedPlugins();
+        $loadedPlugins = \Piwik\PluginsManager::getInstance()->getLoadedPlugins();
         foreach ($loadedPlugins as $oPlugin) {
             $pluginName = $oPlugin->getPluginName();
             $plugins[$pluginName]['info'] = $oPlugin->getInformation();
@@ -107,7 +108,7 @@ class Piwik_CorePluginsAdmin_Controller extends Piwik_Controller_Admin
     public function deactivate($redirectAfter = true)
     {
         $pluginName = $this->initPluginModification();
-        PluginsManager::getInstance()->deactivatePlugin($pluginName);
+        \Piwik\PluginsManager::getInstance()->deactivatePlugin($pluginName);
         $this->redirectAfterModification($redirectAfter);
     }
 
@@ -129,14 +130,14 @@ class Piwik_CorePluginsAdmin_Controller extends Piwik_Controller_Admin
     public function activate($redirectAfter = true)
     {
         $pluginName = $this->initPluginModification();
-        PluginsManager::getInstance()->activatePlugin($pluginName);
+        \Piwik\PluginsManager::getInstance()->activatePlugin($pluginName);
         $this->redirectAfterModification($redirectAfter);
     }
 
     public function uninstall($redirectAfter = true)
     {
         $pluginName = $this->initPluginModification();
-        $uninstalled = PluginsManager::getInstance()->uninstallPlugin($pluginName);
+        $uninstalled = \Piwik\PluginsManager::getInstance()->uninstallPlugin($pluginName);
         if(!$uninstalled) {
             $path = Common::getPathToPiwikRoot() . '/plugins/' . $pluginName . '/';
             $messagePermissions = Piwik::getErrorMessageMissingPermissions($path);
diff --git a/plugins/CorePluginsAdmin/CorePluginsAdmin.php b/plugins/CorePluginsAdmin/CorePluginsAdmin.php
index c7e856b91e4389652cddb42fbf515653dafa93c4..fe4e9d8780769314472cc0521817f61b5bcf1198 100644
--- a/plugins/CorePluginsAdmin/CorePluginsAdmin.php
+++ b/plugins/CorePluginsAdmin/CorePluginsAdmin.php
@@ -9,12 +9,13 @@
  * @package Piwik_CorePluginsAdmin
  */
 use Piwik\Piwik;
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_CorePluginsAdmin
  */
-class Piwik_CorePluginsAdmin extends Piwik_Plugin
+class Piwik_CorePluginsAdmin extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
diff --git a/plugins/CoreUpdater/Controller.php b/plugins/CoreUpdater/Controller.php
index 87f1beb6345ec02e05cd9a013468197fe40efc1c..11e0c9c7d1d7b95d28d39dd8bd312cca7626477b 100644
--- a/plugins/CoreUpdater/Controller.php
+++ b/plugins/CoreUpdater/Controller.php
@@ -8,6 +8,7 @@
  * @category Piwik_Plugins
  * @package Piwik_CoreUpdater
  */
+use Piwik\ArchiveProcessor\Rules;
 use Piwik\Config;
 use Piwik\Piwik;
 use Piwik\Common;
@@ -166,7 +167,7 @@ class Piwik_CoreUpdater_Controller extends Piwik_Controller
         /*
          * Make sure the execute bit is set for this shell script
          */
-        if (!Piwik_ArchiveProcessor_Rules::isBrowserTriggerEnabled()) {
+        if (!Rules::isBrowserTriggerEnabled()) {
             @chmod($this->pathRootExtractedPiwik . '/misc/cron/archive.sh', 0755);
         }
 
@@ -345,7 +346,7 @@ class Piwik_CoreUpdater_Controller extends Piwik_Controller
                     $this->coreError = true;
                     break;
                 } else {
-                    PluginsManager::getInstance()->deactivatePlugin($name);
+                    \Piwik\PluginsManager::getInstance()->deactivatePlugin($name);
                     $this->deactivatedPlugins[] = $name;
                 }
             }
diff --git a/plugins/CoreUpdater/CoreUpdater.php b/plugins/CoreUpdater/CoreUpdater.php
index 4c35b42029ca4543a0a6f75b22678848b69116d4..99c7e4029de174b897cb258b5557dd18de925161 100644
--- a/plugins/CoreUpdater/CoreUpdater.php
+++ b/plugins/CoreUpdater/CoreUpdater.php
@@ -10,12 +10,13 @@
  */
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_CoreUpdater
  */
-class Piwik_CoreUpdater extends Piwik_Plugin
+class Piwik_CoreUpdater extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
@@ -32,7 +33,7 @@ class Piwik_CoreUpdater extends Piwik_Plugin
     public static function getComponentUpdates(Piwik_Updater $updater)
     {
         $updater->addComponentToCheck('core', Piwik_Version::VERSION);
-        $plugins = PluginsManager::getInstance()->getLoadedPlugins();
+        $plugins = \Piwik\PluginsManager::getInstance()->getLoadedPlugins();
         foreach ($plugins as $pluginName => $plugin) {
             $updater->addComponentToCheck($pluginName, $plugin->getVersion());
         }
diff --git a/plugins/CustomVariables/API.php b/plugins/CustomVariables/API.php
index 800b916886957109e8eeae558a408a178cd6b34f..bfe38b72405d12592178ccfc5f8d2ecfa65b3767 100644
--- a/plugins/CustomVariables/API.php
+++ b/plugins/CustomVariables/API.php
@@ -10,6 +10,8 @@
  */
 use Piwik\Archive;
 use Piwik\Metrics;
+use Piwik\Date;
+use Piwik\DataTable;
 
 /**
  * The Custom Variables API lets you access reports for your <a href='http://piwik.org/docs/custom-variables/' target='_blank'>Custom Variables</a> names and values.
@@ -34,12 +36,12 @@ class Piwik_CustomVariables_API
     /**
      * @param int $idSite
      * @param string $period
-     * @param Piwik_Date $date
+     * @param Date $date
      * @param string $segment
      * @param bool $expanded
      * @param int $idSubtable
      *
-     * @return Piwik_DataTable|Piwik_DataTable_Array
+     * @return DataTable|DataTable\Map
      */
     protected function getDataTable($idSite, $period, $date, $segment, $expanded, $idSubtable)
     {
@@ -53,18 +55,18 @@ class Piwik_CustomVariables_API
     /**
      * @param int $idSite
      * @param string $period
-     * @param Piwik_Date $date
+     * @param Date $date
      * @param string|bool $segment
      * @param bool $expanded
      * @param bool $_leavePiwikCoreVariables
      *
-     * @return Piwik_DataTable|Piwik_DataTable_Array
+     * @return DataTable|DataTable\Map
      */
     public function getCustomVariables($idSite, $period, $date, $segment = false, $expanded = false, $_leavePiwikCoreVariables = false)
     {
         $dataTable = $this->getDataTable($idSite, $period, $date, $segment, $expanded, $idSubtable = null);
 
-        if ($dataTable instanceof Piwik_DataTable
+        if ($dataTable instanceof DataTable
             && !$_leavePiwikCoreVariables
         ) {
             $mapping = self::getReservedCustomVariableKeys();
@@ -90,12 +92,12 @@ class Piwik_CustomVariables_API
     /**
      * @param int $idSite
      * @param string $period
-     * @param Piwik_Date $date
+     * @param Date $date
      * @param int $idSubtable
      * @param string|bool $segment
      * @param bool $_leavePriceViewedColumn
      *
-     * @return Piwik_DataTable|Piwik_DataTable_Array
+     * @return DataTable|DataTable\Map
      */
     public function getCustomVariablesValuesFromNameId($idSite, $period, $date, $idSubtable, $segment = false, $_leavePriceViewedColumn = false)
     {
diff --git a/plugins/CustomVariables/Archiver.php b/plugins/CustomVariables/Archiver.php
index 08b15ec865783edc50477b024465bd17e71d1ede..654cf228354d4a79a91ccd82e8c5533e4c55ce39 100644
--- a/plugins/CustomVariables/Archiver.php
+++ b/plugins/CustomVariables/Archiver.php
@@ -1,7 +1,9 @@
 <?php
 use Piwik\Common;
 use Piwik\Config;
+use Piwik\DataAccess\LogAggregator;
 use Piwik\Metrics;
+use Piwik\PluginsArchiver;
 
 /**
  * Piwik - Open source web analytics
@@ -13,7 +15,7 @@ use Piwik\Metrics;
  * @package Piwik_CustomVariables
  */
 
-class Piwik_CustomVariables_Archiver extends Piwik_PluginsArchiver
+class Piwik_CustomVariables_Archiver extends PluginsArchiver
 {
     const LABEL_CUSTOM_VALUE_NOT_DEFINED = "Value not defined";
     const CUSTOM_VARIABLE_RECORD_NAME = 'CustomVariables_valueByName';
@@ -78,7 +80,7 @@ class Piwik_CustomVariables_Archiver extends Piwik_PluginsArchiver
 
     protected function getSelectAveragePrice()
     {
-        return Piwik_DataAccess_LogAggregator::getSqlRevenue("AVG(log_link_visit_action.custom_var_v2)")
+        return LogAggregator::getSqlRevenue("AVG(log_link_visit_action.custom_var_v2)")
             . " as `" . Metrics::INDEX_ECOMMERCE_ITEM_PRICE_VIEWED . "`";
     }
 
diff --git a/plugins/CustomVariables/CustomVariables.php b/plugins/CustomVariables/CustomVariables.php
index 9a402c192fbe87b581ccc01e13b97f88334326d0..971a967b8ea78696ab963fbc5d4e9d417e136485 100644
--- a/plugins/CustomVariables/CustomVariables.php
+++ b/plugins/CustomVariables/CustomVariables.php
@@ -8,11 +8,13 @@
  * @category Piwik_Plugins
  * @package Piwik_CustomVariables
  */
+use Piwik\ArchiveProcessor;
+use Piwik\Plugin;
 
 /**
  * @package Piwik_CustomVariables
  */
-class Piwik_CustomVariables extends Piwik_Plugin
+class Piwik_CustomVariables extends Plugin
 {
     public function getInformation()
     {
@@ -130,7 +132,7 @@ class Piwik_CustomVariables extends Piwik_Plugin
     /**
      * Hooks on daily archive to trigger various log processing
      */
-    public function archiveDay(Piwik_ArchiveProcessor_Day $archiveProcessor)
+    public function archiveDay(ArchiveProcessor\Day $archiveProcessor)
     {
         $archiving = new Piwik_CustomVariables_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
@@ -138,7 +140,7 @@ class Piwik_CustomVariables extends Piwik_Plugin
         }
     }
 
-    public function archivePeriod(Piwik_ArchiveProcessor_Period $archiveProcessor)
+    public function archivePeriod(ArchiveProcessor\Period $archiveProcessor)
     {
         $archiving = new Piwik_CustomVariables_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
diff --git a/plugins/DBStats/API.php b/plugins/DBStats/API.php
index 0c4a4d1e537910081added2249e638f1797ad25a..46b3666c02508f09e7ea7e7b1366c7303877a896 100644
--- a/plugins/DBStats/API.php
+++ b/plugins/DBStats/API.php
@@ -10,6 +10,7 @@
  */
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\DataTable;
 
 /**
  * @see plugins/DBStats/MySQLMetadataProvider.php
@@ -100,7 +101,7 @@ class Piwik_DBStats_API
      * This function will group tracker tables, numeric archive tables, blob archive tables
      * and other tables together so only four rows are shown.
      *
-     * @return Piwik_DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
+     * @return DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
      */
     public function getDatabaseUsageSummary()
     {
@@ -130,13 +131,13 @@ class Piwik_DBStats_API
             $rowToAddTo['row_count'] += $status['Rows'];
         }
 
-        return Piwik_DataTable::makeFromIndexedArray($rows);
+        return DataTable::makeFromIndexedArray($rows);
     }
 
     /**
      * Returns a datatable describing how much space is taken up by each log table.
      *
-     * @return Piwik_DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
+     * @return DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
      */
     public function getTrackerDataSummary()
     {
@@ -148,7 +149,7 @@ class Piwik_DBStats_API
      * Returns a datatable describing how much space is taken up by each numeric
      * archive table.
      *
-     * @return Piwik_DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
+     * @return DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
      */
     public function getMetricDataSummary()
     {
@@ -160,7 +161,7 @@ class Piwik_DBStats_API
      * Returns a datatable describing how much space is taken up by each numeric
      * archive table, grouped by year.
      *
-     * @return Piwik_DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
+     * @return DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
      */
     public function getMetricDataSummaryByYear()
     {
@@ -178,7 +179,7 @@ class Piwik_DBStats_API
      * Returns a datatable describing how much space is taken up by each blob
      * archive table.
      *
-     * @return Piwik_DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
+     * @return DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
      */
     public function getReportDataSummary()
     {
@@ -190,7 +191,7 @@ class Piwik_DBStats_API
      * Returns a datatable describing how much space is taken up by each blob
      * archive table, grouped by year.
      *
-     * @return Piwik_DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
+     * @return DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
      */
     public function getReportDataSummaryByYear()
     {
@@ -210,7 +211,7 @@ class Piwik_DBStats_API
      * An 'admin' table is a table that is not central to analytics functionality.
      * So any table that isn't an archive table or a log table is an 'admin' table.
      *
-     * @return Piwik_DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
+     * @return DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
      */
     public function getAdminDataSummary()
     {
@@ -226,7 +227,7 @@ class Piwik_DBStats_API
      *
      * @param bool $forceCache false to use the cached result, true to run the queries again and
      *                         cache the result.
-     * @return Piwik_DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
+     * @return DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
      */
     public function getIndividualReportsSummary($forceCache = false)
     {
@@ -242,7 +243,7 @@ class Piwik_DBStats_API
      *
      * @param bool $forceCache false to use the cached result, true to run the queries again and
      *                         cache the result.
-     * @return Piwik_DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
+     * @return DataTable A datatable with three columns: 'data_size', 'index_size', 'row_count'.
      */
     public function getIndividualMetricsSummary($forceCache = false)
     {
@@ -254,11 +255,11 @@ class Piwik_DBStats_API
      * Returns a datatable representation of a set of table statuses.
      *
      * @param array $statuses The table statuses to summarize.
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     private function getTablesSummary($statuses)
     {
-        $dataTable = new Piwik_DataTable();
+        $dataTable = new DataTable();
         foreach ($statuses as $status) {
             $dataTable->addRowFromSimpleArray(array(
                                                    'label'      => $status['Name'],
diff --git a/plugins/DBStats/Controller.php b/plugins/DBStats/Controller.php
index caf2241e14500e7ee21a4fa70e1574d8148e0373..7596dc4106d6e66e74f9de25a1caa681d7faa286 100644
--- a/plugins/DBStats/Controller.php
+++ b/plugins/DBStats/Controller.php
@@ -313,7 +313,7 @@ class Piwik_DBStats_Controller extends Piwik_Controller_Admin
             }
         }
 
-        $getPrettySize = array('Piwik', 'getPrettySizeFromBytes');
+        $getPrettySize = '\Piwik\Piwik::getPrettySizeFromBytes';
         $params = $fixedMemoryUnit === false ? array() : array($fixedMemoryUnit);
         $view->queueFilter(
             'ColumnCallbackReplace', array($sizeColumns, $getPrettySize, $params), $runPrettySizeFilterBeforeGeneric);
@@ -324,8 +324,7 @@ class Piwik_DBStats_Controller extends Piwik_Controller_Admin
             $view->queueFilter('ColumnCallbackReplace', array($sizeColumns, $replaceSpaces));
         }
 
-        $getPrettyNumber = array('Piwik', 'getPrettyNumber');
-        $view->queueFilter('ColumnCallbackReplace', array(array('row_count'), $getPrettyNumber));
+        $view->queueFilter('ColumnCallbackReplace', array(array('row_count'), '\Piwik\Piwik::getPrettyNumber'));
 
         return $view;
     }
diff --git a/plugins/DBStats/DBStats.php b/plugins/DBStats/DBStats.php
index fd649d5b1e4ef4fcc0f84289369dd337cea2df56..770e00f0ed66763de574786a890ef4d8be824a24 100644
--- a/plugins/DBStats/DBStats.php
+++ b/plugins/DBStats/DBStats.php
@@ -9,12 +9,14 @@
  * @package Piwik_DBStats
  */
 use Piwik\Piwik;
+use Piwik\Date;
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_DBStats
  */
-class Piwik_DBStats extends Piwik_Plugin
+class Piwik_DBStats extends Plugin
 {
     const TIME_OF_LAST_TASK_RUN_OPTION = 'dbstats_time_of_last_cache_task_run';
 
@@ -63,7 +65,7 @@ class Piwik_DBStats extends Piwik_Plugin
         $api->getIndividualReportsSummary(true);
         $api->getIndividualMetricsSummary(true);
 
-        $now = Piwik_Date::now()->getLocalized("%longYear%, %shortMonth% %day%");
+        $now = Date::now()->getLocalized("%longYear%, %shortMonth% %day%");
         Piwik_SetOption(self::TIME_OF_LAST_TASK_RUN_OPTION, $now);
     }
 
diff --git a/plugins/DBStats/MySQLMetadataProvider.php b/plugins/DBStats/MySQLMetadataProvider.php
index 9641d2d7887063fcbc014cde6c4e5308503f266b..c7701e6023438e3f7eec53449850735c2563e755 100755
--- a/plugins/DBStats/MySQLMetadataProvider.php
+++ b/plugins/DBStats/MySQLMetadataProvider.php
@@ -10,6 +10,8 @@
  */
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Config;
+use Piwik\DataTable;
 
 /**
  * Utility class that provides general information about databases, including the size of
@@ -175,7 +177,7 @@ class Piwik_DBStats_MySQLMetadataProvider
      *
      * @param bool $forceCache false to use the cached result, true to run the queries again and
      *                         cache the result.
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getRowCountsAndSizeByBlobName($forceCache = false)
     {
@@ -194,7 +196,7 @@ class Piwik_DBStats_MySQLMetadataProvider
      *
      * @param bool $forceCache false to use the cached result, true to run the queries again and
      *                         cache the result.
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getRowCountsAndSizeByMetricName($forceCache = false)
     {
@@ -216,20 +218,20 @@ class Piwik_DBStats_MySQLMetadataProvider
 
         $cols = array_merge(array('row_count'), $otherDataTableColumns);
 
-        $dataTable = new Piwik_DataTable();
+        $dataTable = new DataTable();
         foreach ($statuses as $status) {
             $dataTableOptionName = $this->getCachedOptionName($status['Name'], 'byArchiveName');
 
             // if option exists && !$forceCache, use the cached data, otherwise create the
             $cachedData = Piwik_GetOption($dataTableOptionName);
             if ($cachedData !== false && !$forceCache) {
-                $table = new Piwik_DataTable();
+                $table = new DataTable();
                 $table->addRowsFromSerializedArray($cachedData);
             } else {
                 // otherwise, create data table & cache it
                 $sql = "SELECT name as 'label', COUNT(*) as 'row_count'$extraCols FROM {$status['Name']} GROUP BY name";
 
-                $table = new Piwik_DataTable();
+                $table = new DataTable();
                 $table->addRowsFromSimpleArray(Piwik_FetchAll($sql));
 
                 $reduceArchiveRowName = array($this, 'reduceArchiveRowName');
diff --git a/plugins/Dashboard/Controller.php b/plugins/Dashboard/Controller.php
index f91718d097884624fefa0deb05dd80e2a5329ee5..0f6cca6d001487d77064910aee1717789510470b 100644
--- a/plugins/Dashboard/Controller.php
+++ b/plugins/Dashboard/Controller.php
@@ -7,6 +7,7 @@
  * @category Piwik_Plugins
  * @package  Piwik_Dashboard
  */
+use Piwik\DataTable\Renderer\Json;
 use Piwik\Piwik;
 use Piwik\Common;
 
@@ -66,7 +67,7 @@ class Piwik_Dashboard_Controller extends Piwik_Controller
     {
         $this->checkTokenInUrl();
 
-        Piwik_DataTable_Renderer_Json::sendHeaderJSON();
+        Json::sendHeaderJSON();
         echo Common::json_encode(Piwik_GetWidgetsList());
     }
 
@@ -157,7 +158,7 @@ class Piwik_Dashboard_Controller extends Piwik_Controller
         $this->checkTokenInUrl();
         
         if (Piwik::isUserIsAnonymous()) {
-            Piwik_DataTable_Renderer_Json::sendHeaderJSON();
+            Json::sendHeaderJSON();
             echo '[]';
             
             return;
@@ -166,7 +167,7 @@ class Piwik_Dashboard_Controller extends Piwik_Controller
         $login      = Piwik::getCurrentUserLogin();
         $dashboards = $this->dashboard->getAllDashboards($login);
 
-        Piwik_DataTable_Renderer_Json::sendHeaderJSON();
+        Json::sendHeaderJSON();
         echo Common::json_encode($dashboards);
     }
 
@@ -197,7 +198,7 @@ class Piwik_Dashboard_Controller extends Piwik_Controller
             Common::prefixTable('user_dashboard'));
         Piwik_Query($query, array($user, $nextId, $name, $layout));
 
-        Piwik_DataTable_Renderer_Json::sendHeaderJSON();
+        Json::sendHeaderJSON();
         echo Common::json_encode($nextId);
     }
 
@@ -235,7 +236,7 @@ class Piwik_Dashboard_Controller extends Piwik_Controller
                 Common::prefixTable('user_dashboard'));
             Piwik_Query($query, array($user, $nextId, $name, $layout));
 
-            Piwik_DataTable_Renderer_Json::sendHeaderJSON();
+            Json::sendHeaderJSON();
             echo Common::json_encode($nextId);
             return;
         }
diff --git a/plugins/Dashboard/Dashboard.php b/plugins/Dashboard/Dashboard.php
index 7548104be9d310433032dae8cb3037fde0474fc5..25fb766226ec8bcea9366bf6b6551f8b31dbc161 100644
--- a/plugins/Dashboard/Dashboard.php
+++ b/plugins/Dashboard/Dashboard.php
@@ -10,12 +10,13 @@
  */
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Plugin;
 use Piwik\Site;
 
 /**
  * @package Piwik_Dashboard
  */
-class Piwik_Dashboard extends Piwik_Plugin
+class Piwik_Dashboard extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
diff --git a/plugins/DevicesDetection/API.php b/plugins/DevicesDetection/API.php
index 3117122c96c2719016121e5f1bfe92c34666b1ff..1800849fcf645de46a668691cbccacec69dba9c1 100644
--- a/plugins/DevicesDetection/API.php
+++ b/plugins/DevicesDetection/API.php
@@ -12,6 +12,7 @@
 use Piwik\Archive;
 use Piwik\Metrics;
 use Piwik\Piwik;
+use Piwik\DataTable;
 
 /**
  * The DevicesDetection API lets you access reports on your visitors devices, brands, models, Operating system, Browsers.
@@ -58,7 +59,7 @@ class Piwik_DevicesDetection_API
      * @param string $period
      * @param string $date
      * @param bool|string $segment
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getType($idSite, $period, $date, $segment = false)
     {
@@ -75,7 +76,7 @@ class Piwik_DevicesDetection_API
      * @param string $period
      * @param string $date
      * @param bool|string $segment
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getBrand($idSite, $period, $date, $segment = false)
     {
@@ -91,7 +92,7 @@ class Piwik_DevicesDetection_API
      * @param string $period
      * @param string $date
      * @param bool|string $segment
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getModel($idSite, $period, $date, $segment = false)
     {
@@ -106,7 +107,7 @@ class Piwik_DevicesDetection_API
      * @param string $period
      * @param string $date
      * @param bool|string $segment
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getOsFamilies($idSite, $period, $date, $segment = false)
     {
@@ -122,7 +123,7 @@ class Piwik_DevicesDetection_API
      * @param string $period
      * @param string $date
      * @param bool|string $segment
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getOsVersions($idSite, $period, $date, $segment = false)
     {
@@ -139,7 +140,7 @@ class Piwik_DevicesDetection_API
      * @param string $period
      * @param string $date
      * @param bool|string $segment
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getBrowserFamilies($idSite, $period, $date, $segment = false)
     {
@@ -155,7 +156,7 @@ class Piwik_DevicesDetection_API
      * @param string $period
      * @param string $date
      * @param bool|string $segment
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getBrowserVersions($idSite, $period, $date, $segment = false)
     {
diff --git a/plugins/DevicesDetection/Archiver.php b/plugins/DevicesDetection/Archiver.php
index 6bf0288894558c352afa72e2cc56b49d2d8890ba..73a66fb67d3c46da6d3ea690445e30dcc5eafb48 100644
--- a/plugins/DevicesDetection/Archiver.php
+++ b/plugins/DevicesDetection/Archiver.php
@@ -10,8 +10,9 @@
  */
 
 use Piwik\Metrics;
+use Piwik\PluginsArchiver;
 
-class Piwik_DevicesDetection_Archiver extends Piwik_PluginsArchiver
+class Piwik_DevicesDetection_Archiver extends PluginsArchiver
 {
     const DEVICE_TYPE_RECORD_NAME = 'DevicesDetection_types';
     const DEVICE_BRAND_RECORD_NAME = 'DevicesDetection_brands';
diff --git a/plugins/DevicesDetection/DevicesDetection.php b/plugins/DevicesDetection/DevicesDetection.php
index 2a734b24e452cc32ef3b541b2839fae615851b72..7129ee581be384bf7c6d093660047b4f5542d571 100644
--- a/plugins/DevicesDetection/DevicesDetection.php
+++ b/plugins/DevicesDetection/DevicesDetection.php
@@ -9,13 +9,15 @@
  * @category Piwik_Plugins
  * @package Piwik_DevicesDetection
  */
+use Piwik\ArchiveProcessor;
 use Piwik\Config;
 use Piwik\Common;
+use Piwik\Plugin;
 
 require_once PIWIK_INCLUDE_PATH . "/plugins/DevicesDetection/UserAgentParserEnhanced/UserAgentParserEnhanced.php";
 require_once PIWIK_INCLUDE_PATH . '/plugins/DevicesDetection/functions.php';
 
-class Piwik_DevicesDetection extends Piwik_Plugin
+class Piwik_DevicesDetection extends Plugin
 {
     /**
      * @see Piwik_Plugin::getInformation
@@ -229,7 +231,7 @@ class Piwik_DevicesDetection extends Piwik_Plugin
         Common::printDebug($deviceInfo);
     }
 
-    public function archiveDay(Piwik_ArchiveProcessor_Day $archiveProcessor)
+    public function archiveDay(ArchiveProcessor\Day $archiveProcessor)
     {
         $archiving = new Piwik_DevicesDetection_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
@@ -237,7 +239,7 @@ class Piwik_DevicesDetection extends Piwik_Plugin
         }
     }
 
-    public function archivePeriod(Piwik_ArchiveProcessor_Period $archiveProcessor)
+    public function archivePeriod(ArchiveProcessor\Period $archiveProcessor)
     {
         $archiving = new Piwik_DevicesDetection_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
diff --git a/plugins/DoNotTrack/DoNotTrack.php b/plugins/DoNotTrack/DoNotTrack.php
index 2b8409d394a183680df4679bcf604a58093dd61d..2ea56e3d0f93901f1abf17704d2b43fdd4325995 100644
--- a/plugins/DoNotTrack/DoNotTrack.php
+++ b/plugins/DoNotTrack/DoNotTrack.php
@@ -8,6 +8,8 @@
  * @category Piwik_Plugins
  * @package Piwik_DoNotTrack
  */
+use Piwik\Plugin;
+use Piwik\Common;
 
 /**
  * Ignore visits where user agent's request contains either:
@@ -16,7 +18,7 @@
  *
  * @package Piwik_DoNotTrack
  */
-class Piwik_DoNotTrack extends Piwik_Plugin
+class Piwik_DoNotTrack extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
diff --git a/plugins/ExampleAPI/API.php b/plugins/ExampleAPI/API.php
index 163d265c272022660948aea36306720289409864..d4a0febccfb5dbf3cf9621f76e8f345a6c8c8ec0 100644
--- a/plugins/ExampleAPI/API.php
+++ b/plugins/ExampleAPI/API.php
@@ -8,7 +8,9 @@
  * @category Piwik_Plugins
  * @package Piwik_ExampleAPI
  */
+use Piwik\DataTable\Row;
 use Piwik\Piwik;
+use Piwik\DataTable;
 
 /**
  * The ExampleAPI is useful to developers building a custom Piwik plugin.
@@ -126,13 +128,13 @@ class Piwik_ExampleAPI_API
      * This data table will be converted to all available formats
      * when requested in the API request.
      *
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getCompetitionDatatable()
     {
-        $dataTable = new Piwik_DataTable();
+        $dataTable = new DataTable();
 
-        $row1 = new Piwik_DataTable_Row();
+        $row1 = new Row();
         $row1->setColumns(array('name' => 'piwik', 'license' => 'GPL'));
 
         // Rows Metadata is useful to store non stats data for example (logos, urls, etc.)
diff --git a/plugins/ExampleAPI/ExampleAPI.php b/plugins/ExampleAPI/ExampleAPI.php
index 7c96f96c19e08515a7437b5d6a61bca00f5de175..da1c3f4c52734855efcecf370b922edca7d7b19b 100644
--- a/plugins/ExampleAPI/ExampleAPI.php
+++ b/plugins/ExampleAPI/ExampleAPI.php
@@ -8,12 +8,13 @@
  * @category Piwik_Plugins
  * @package Piwik_ExampleAPI
  */
+use Piwik\Plugin;
 
 /**
  * ExampleAPI plugin
  *
  * @package Piwik_ExampleAPI
  */
-class Piwik_ExampleAPI extends Piwik_Plugin
+class Piwik_ExampleAPI extends Plugin
 {
 }
diff --git a/plugins/ExamplePlugin/Controller.php b/plugins/ExamplePlugin/Controller.php
index 7ff7a79042840655f9e8516174c6139272a3f658..3e6c55713052365f7bd9e65398deb5f23bf0bc14 100644
--- a/plugins/ExamplePlugin/Controller.php
+++ b/plugins/ExamplePlugin/Controller.php
@@ -73,7 +73,7 @@ class Piwik_ExamplePlugin_Controller extends Piwik_Controller
         $out .= '<h2>General</h2>';
         $out .= '<h3>Accessible from your plugin controller</h3>';
 
-        $out .= '<code>$this->date</code> = current selected <b>Piwik_Date</b> object (<a href="https://github.com/piwik/piwik/blob/master/core/Date.php">class</a>)<br />';
+        $out .= '<code>$this->date</code> = current selected <b>Date</b> object (<a href="https://github.com/piwik/piwik/blob/master/core/Date.php">class</a>)<br />';
         $out .= '<code>$period = Common::getRequestVar("period");</code> - Get the current selected period<br />';
         $out .= '<code>$idSite = Common::getRequestVar("idSite");</code> - Get the selected idSite<br />';
         $out .= '<code>$site = new Site($idSite);</code> - Build the Site object (<a href="https://github.com/piwik/piwik/tree/master/core/Site.php">class</a>)<br />';
diff --git a/plugins/ExamplePlugin/ExamplePlugin.php b/plugins/ExamplePlugin/ExamplePlugin.php
index a3143b34bb2a873c0a0a06e659754c1597cb5436..7fc7a2cc09371de909bd76f76fe49650c7403603 100644
--- a/plugins/ExamplePlugin/ExamplePlugin.php
+++ b/plugins/ExamplePlugin/ExamplePlugin.php
@@ -8,12 +8,13 @@
  * @category Piwik_Plugins
  * @package Piwik_ExamplePlugin
  */
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_ExamplePlugin
  */
-class Piwik_ExamplePlugin extends Piwik_Plugin
+class Piwik_ExamplePlugin extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
diff --git a/plugins/ExampleRssWidget/ExampleRssWidget.php b/plugins/ExampleRssWidget/ExampleRssWidget.php
index eeb4d78157ea8fd588e1e1c821f779980ac744ea..72831e6d0b72493df9219bcf86367f9ed9653b3f 100644
--- a/plugins/ExampleRssWidget/ExampleRssWidget.php
+++ b/plugins/ExampleRssWidget/ExampleRssWidget.php
@@ -8,12 +8,13 @@
  * @category Piwik_Plugins
  * @package Piwik_ExampleRssWidget
  */
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_ExampleRssWidget
  */
-class Piwik_ExampleRssWidget extends Piwik_Plugin
+class Piwik_ExampleRssWidget extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
diff --git a/plugins/ExampleUI/API.php b/plugins/ExampleUI/API.php
index 87bc64a88cd6b2a5cde3351a77ba5655c9e334f7..5857ef112be2aaaa7c2473e530c96be0f16cfb63 100644
--- a/plugins/ExampleUI/API.php
+++ b/plugins/ExampleUI/API.php
@@ -8,7 +8,8 @@
  * @category Piwik_Plugins
  * @package Piwik_ExampleUI
  */
-use Piwik\Period_Range;
+use Piwik\Period\Range;
+use Piwik\DataTable;
 
 /**
  * ExampleUI API is also an example API useful if you are developing a Piwik plugin.
@@ -32,7 +33,7 @@ class Piwik_ExampleUI_API
 
     public function getTemperaturesEvolution($date, $period)
     {
-        $period = new Period_Range($period, 'last30');
+        $period = new Range($period, 'last30');
         $dateStart = $period->getDateStart()->toString('Y-m-d'); // eg. "2009-04-01"
         $dateEnd = $period->getDateEnd()->toString('Y-m-d'); // eg. "2009-04-30"
 
@@ -51,7 +52,7 @@ class Piwik_ExampleUI_API
             $value = array('server1' => $server1, 'server2' => $server2);
             $temperatures[$subPeriod->getLocalizedShortString()] = $value;
         }
-        return Piwik_DataTable::makeFromIndexedArray($temperatures);
+        return DataTable::makeFromIndexedArray($temperatures);
     }
 
     // we generate an array of random server temperatures
@@ -68,7 +69,7 @@ class Piwik_ExampleUI_API
             $temperatures[$xAxisLabel] = $temperatureValues[$i];
         }
 
-        return Piwik_DataTable::makeFromIndexedArray($temperatures);
+        return DataTable::makeFromIndexedArray($temperatures);
     }
 
     public function getPlanetRatios()
@@ -84,7 +85,7 @@ class Piwik_ExampleUI_API
             'Neptune' => 3.883,
         );
         // convert this array to a DataTable object
-        return Piwik_DataTable::makeFromIndexedArray($planetRatios);
+        return DataTable::makeFromIndexedArray($planetRatios);
     }
 
     public function getPlanetRatiosWithLogos()
diff --git a/plugins/ExampleUI/ExampleUI.php b/plugins/ExampleUI/ExampleUI.php
index 6808be9109c46626bb2521cb33464448bcdd793a..4e1210cf14b8f69cd64fd90aaef6f2855dfecf09 100644
--- a/plugins/ExampleUI/ExampleUI.php
+++ b/plugins/ExampleUI/ExampleUI.php
@@ -18,12 +18,13 @@
 - without all columns icon
 + update http://piwik.org/participate/user-interface
 */
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_ExampleUI
  */
-class Piwik_ExampleUI extends Piwik_Plugin
+class Piwik_ExampleUI extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
diff --git a/plugins/Feedback/Feedback.php b/plugins/Feedback/Feedback.php
index 5217def3d4e52ddbbb9e31500199f46cefd063f8..522c09fe96d8811da6a42a65e7193226cc91e9ee 100644
--- a/plugins/Feedback/Feedback.php
+++ b/plugins/Feedback/Feedback.php
@@ -8,12 +8,13 @@
  * @category Piwik_Plugins
  * @package Piwik_Feedback
  */
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_Feedback
  */
-class Piwik_Feedback extends Piwik_Plugin
+class Piwik_Feedback extends Plugin
 {
 
     /**
diff --git a/plugins/Goals/API.php b/plugins/Goals/API.php
index 5d0d0eab5c1d3662956641f553707c0f43c0db62..db754b3bb3c085a60cab5310ee4ba69f503e54aa 100644
--- a/plugins/Goals/API.php
+++ b/plugins/Goals/API.php
@@ -12,6 +12,7 @@ use Piwik\Archive;
 use Piwik\Metrics;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\DataTable;
 use Piwik\Site;
 
 /**
@@ -249,11 +250,11 @@ class Piwik_Goals_API
         $customVarNameToLookFor = $mapping[$recordName];
 
         // Handle case where date=last30&period=day
-        if ($customVariables instanceof Piwik_DataTable_Array) {
+        if ($customVariables instanceof DataTable\Map) {
             $customVariableDatatables = $customVariables->getArray();
             $dataTables = $dataTable->getArray();
             foreach ($customVariableDatatables as $key => $customVariableTableForDate) {
-                $dataTableForDate = isset($dataTables[$key]) ? $dataTables[$key] : new Piwik_DataTable();
+                $dataTableForDate = isset($dataTables[$key]) ? $dataTables[$key] : new DataTable();
 
                 // we do not enter the IF
                 // if case idSite=1,3 AND period=day&date=datefrom,dateto,
@@ -268,7 +269,7 @@ class Piwik_Goals_API
                 }
                 $this->renameNotDefinedRow($dataTableForDate, $notDefinedStringPretty);
             }
-        } elseif ($customVariables instanceof Piwik_DataTable) {
+        } elseif ($customVariables instanceof DataTable) {
             $row = $customVariables->getRowFromLabel($customVarNameToLookFor);
             if ($row) {
                 $idSubtable = $row->getIdSubDataTable();
@@ -285,7 +286,7 @@ class Piwik_Goals_API
 
     protected function renameNotDefinedRow($dataTable, $notDefinedStringPretty)
     {
-        if ($dataTable instanceof Piwik_DataTable_Array) {
+        if ($dataTable instanceof DataTable\Map) {
             foreach ($dataTable->getArray() as $table) {
                 $this->renameNotDefinedRow($table, $notDefinedStringPretty);
             }
@@ -369,7 +370,7 @@ class Piwik_Goals_API
      * @param bool $segment
      * @param bool|int $idGoal
      * @param array $columns Array of metrics to fetch: nb_conversions, conversion_rate, revenue
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function get($idSite, $period, $date, $segment = false, $idGoal = false, $columns = array())
     {
@@ -404,7 +405,7 @@ class Piwik_Goals_API
             $dataTable->renameColumn($oldName, $columns[$id]);
         }
         if ($idGoal == Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_ORDER) {
-            if ($dataTable instanceof Piwik_DataTable_Array) {
+            if ($dataTable instanceof DataTable\Map) {
                 foreach ($dataTable->getArray() as $row) {
                     $this->enrichTable($row);
                 }
@@ -482,7 +483,7 @@ class Piwik_Goals_API
      * @param string $segment The segment.
      * @param int|bool $idGoal The id of the goal to get data for. If this is set to false,
      *                         data for every goal that belongs to $idSite is returned.
-     * @return false|Piwik_DataTable
+     * @return false|DataTable
      */
     protected function getGoalSpecificDataTable($recordName, $idSite, $period, $date, $segment, $idGoal)
     {
@@ -510,7 +511,7 @@ class Piwik_Goals_API
      * @param string|bool $segment The segment.
      * @param int|bool $idGoal The id of the goal to get data for. If this is set to false,
      *                         data for every goal that belongs to $idSite is returned.
-     * @return false|Piwik_DataTable
+     * @return false|DataTable
      */
     public function getDaysToConversion($idSite, $period, $date, $segment = false, $idGoal = false)
     {
@@ -534,7 +535,7 @@ class Piwik_Goals_API
      * @param string|bool $segment The segment.
      * @param int|bool $idGoal The id of the goal to get data for. If this is set to false,
      *                         data for every goal that belongs to $idSite is returned.
-     * @return bool|Piwik_DataTable
+     * @return bool|DataTable
      */
     public function getVisitsUntilConversion($idSite, $period, $date, $segment = false, $idGoal = false)
     {
diff --git a/plugins/Goals/Archiver.php b/plugins/Goals/Archiver.php
index a22cc9ef98627d9fee4767f2c477d109d710ea51..96792174c13eac34234a79209431cf7483f5cf92 100644
--- a/plugins/Goals/Archiver.php
+++ b/plugins/Goals/Archiver.php
@@ -9,9 +9,12 @@
  * @package Piwik_Goals
  */
 
+use Piwik\DataAccess\LogAggregator;
 use Piwik\Metrics;
+use Piwik\DataTable;
+use Piwik\PluginsArchiver;
 
-class Piwik_Goals_Archiver extends Piwik_PluginsArchiver
+class Piwik_Goals_Archiver extends PluginsArchiver
 {
     const VISITS_UNTIL_RECORD_NAME = 'visits_until_conv';
     const DAYS_UNTIL_CONV_RECORD_NAME = 'days_until_conv';
@@ -96,7 +99,7 @@ class Piwik_Goals_Archiver extends Piwik_PluginsArchiver
         );
         $selects = array();
         foreach ($aggregatesMetadata as $aggregateMetadata) {
-            $selects = array_merge($selects, Piwik_DataAccess_LogAggregator::getSelectsFromRangedColumn($aggregateMetadata));
+            $selects = array_merge($selects, LogAggregator::getSelectsFromRangedColumn($aggregateMetadata));
         }
 
         $query = $this->getLogAggregator()->queryConversionsByDimension(array(), false, $selects);
@@ -121,16 +124,16 @@ class Piwik_Goals_Archiver extends Piwik_PluginsArchiver
             $goals->sumMetrics($idGoal, $values);
 
             if (empty($visitsToConversions[$idGoal])) {
-                $visitsToConversions[$idGoal] = new Piwik_DataTable();
+                $visitsToConversions[$idGoal] = new DataTable();
             }
-            $array = Piwik_DataAccess_LogAggregator::makeArrayOneColumn($row, Metrics::INDEX_NB_CONVERSIONS, $prefixes[self::VISITS_UNTIL_RECORD_NAME]);
-            $visitsToConversions[$idGoal]->addDataTable(Piwik_DataTable::makeFromIndexedArray($array));
+            $array = LogAggregator::makeArrayOneColumn($row, Metrics::INDEX_NB_CONVERSIONS, $prefixes[self::VISITS_UNTIL_RECORD_NAME]);
+            $visitsToConversions[$idGoal]->addDataTable(DataTable::makeFromIndexedArray($array));
 
             if (empty($daysToConversions[$idGoal])) {
-                $daysToConversions[$idGoal] = new Piwik_DataTable();
+                $daysToConversions[$idGoal] = new DataTable();
             }
-            $array = Piwik_DataAccess_LogAggregator::makeArrayOneColumn($row, Metrics::INDEX_NB_CONVERSIONS, $prefixes[self::DAYS_UNTIL_CONV_RECORD_NAME]);
-            $daysToConversions[$idGoal]->addDataTable(Piwik_DataTable::makeFromIndexedArray($array));
+            $array = LogAggregator::makeArrayOneColumn($row, Metrics::INDEX_NB_CONVERSIONS, $prefixes[self::DAYS_UNTIL_CONV_RECORD_NAME]);
+            $daysToConversions[$idGoal]->addDataTable(DataTable::makeFromIndexedArray($array));
 
             // We don't want to sum Abandoned cart metrics in the overall revenue/conversions/converted visits
             // since it is a "negative conversion"
@@ -209,7 +212,7 @@ class Piwik_Goals_Archiver extends Piwik_PluginsArchiver
 
     protected function getOverviewFromGoalTables($tableByGoal)
     {
-        $overview = new Piwik_DataTable();
+        $overview = new DataTable();
         foreach ($tableByGoal as $idGoal => $table) {
             if ($this->isStandardGoal($idGoal)) {
                 $overview->addDataTable($table);
diff --git a/plugins/Goals/Controller.php b/plugins/Goals/Controller.php
index d659959ab3cf71fb7adbfc5829678bf92acf7d6d..64ab750b6bda29c0e76138965364c4cf198ff002 100644
--- a/plugins/Goals/Controller.php
+++ b/plugins/Goals/Controller.php
@@ -8,8 +8,10 @@
  * @category Piwik_Plugins
  * @package Piwik_Goals
  */
+use Piwik\DataTable\Filter\AddColumnsProcessedMetricsGoal;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\DataTable;
 
 /**
  *
@@ -35,7 +37,7 @@ class Piwik_Goals_Controller extends Piwik_Controller
 
     private function formatConversionRate($conversionRate)
     {
-        if ($conversionRate instanceof Piwik_DataTable) {
+        if ($conversionRate instanceof DataTable) {
             if ($conversionRate->getRowsCount() == 0) {
                 $conversionRate = 0;
             } else {
@@ -75,7 +77,7 @@ class Piwik_Goals_Controller extends Piwik_Controller
 
     public function ecommerceReport()
     {
-        if (!PluginsManager::getInstance()->isPluginActivated('CustomVariables')) {
+        if (!\Piwik\PluginsManager::getInstance()->isPluginActivated('CustomVariables')) {
             throw new Exception("Ecommerce Tracking requires that the plugin Custom Variables is enabled. Please enable the plugin CustomVariables (or ask your admin).");
         }
 
@@ -294,14 +296,14 @@ class Piwik_Goals_Controller extends Piwik_Controller
 
         $topDimensionsToLoad = array();
 
-        if (PluginsManager::getInstance()->isPluginActivated('UserCountry')) {
+        if (\Piwik\PluginsManager::getInstance()->isPluginActivated('UserCountry')) {
             $topDimensionsToLoad += array(
                 'country' => 'UserCountry.getCountry',
             );
         }
 
         $keywordNotDefinedString = '';
-        if (PluginsManager::getInstance()->isPluginActivated('Referers')) {
+        if (\Piwik\PluginsManager::getInstance()->isPluginActivated('Referers')) {
             $keywordNotDefinedString = Piwik_Referers_API::getKeywordNotDefinedString();
             $topDimensionsToLoad += array(
                 'keyword' => 'Referers.getKeywords',
@@ -313,7 +315,7 @@ class Piwik_Goals_Controller extends Piwik_Controller
             $request = new Piwik_API_Request("method=$apiMethod
 								&format=original
 								&filter_update_columns_when_show_all_goals=1
-								&idGoal=" . Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal::GOALS_FULL_TABLE . "
+								&idGoal=" . AddColumnsProcessedMetricsGoal::GOALS_FULL_TABLE . "
 								&filter_sort_order=desc
 								&filter_sort_column=$columnNbConversions" .
                 // select a couple more in case some are not valid (ie. conversions==0 or they are "Keyword not defined")
diff --git a/plugins/Goals/Goals.php b/plugins/Goals/Goals.php
index dc3445cb882e18c2e505cc4f2bb1fc1d7fce8c8e..cd9857e3fd70277d298cb7553696ebd412b9c5aa 100644
--- a/plugins/Goals/Goals.php
+++ b/plugins/Goals/Goals.php
@@ -8,15 +8,17 @@
  * @category Piwik_Plugins
  * @package Piwik_Goals
  */
+use Piwik\ArchiveProcessor;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Plugin;
 use Piwik\Site;
 
 /**
  *
  * @package Piwik_Goals
  */
-class Piwik_Goals extends Piwik_Plugin
+class Piwik_Goals extends Plugin
 {
     protected $ecommerceReports = array(
         array('Goals_ProductSKU', 'Goals', 'getItemsSku'),
@@ -479,7 +481,7 @@ class Piwik_Goals extends Piwik_Plugin
      * Will process Goal stats overall and for each Goal.
      * Also processes the New VS Returning visitors conversion stats.
      */
-    public function archiveDay(Piwik_ArchiveProcessor_Day $archiveProcessor)
+    public function archiveDay(ArchiveProcessor\Day $archiveProcessor)
     {
         $archiving = new Piwik_Goals_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
@@ -491,7 +493,7 @@ class Piwik_Goals extends Piwik_Plugin
      * Hooks on Period archiving.
      * Sums up Goal conversions stats, and processes overall conversion rate
      */
-    public function archivePeriod(Piwik_ArchiveProcessor_Period $archiveProcessor)
+    public function archivePeriod(ArchiveProcessor\Period $archiveProcessor)
     {
         $archiving = new Piwik_Goals_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
@@ -575,7 +577,7 @@ class Piwik_Goals extends Piwik_Plugin
         
         $moneyColumns = array('revenue', 'avg_price');
         $prettifyMoneyColumns = array(
-            'ColumnCallbackReplace', array($moneyColumns, array("Piwik", "getPrettyMoney"), array($idSite)));
+            'ColumnCallbackReplace', array($moneyColumns, '\Piwik\Piwik::getPrettyMoney', array($idSite)));
         
         $result = array(
             'show_ecommerce' => true,
diff --git a/plugins/ImageGraph/API.php b/plugins/ImageGraph/API.php
index dd6967b56b9eec4aabcdf61b4cb524fdfa0ac899..b2811772f07da047803e4dd0b070ab0d4621bfa8 100644
--- a/plugins/ImageGraph/API.php
+++ b/plugins/ImageGraph/API.php
@@ -11,6 +11,7 @@
 use Piwik\Period;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Translate;
 
 /**
  * The ImageGraph.get API call lets you generate beautiful static PNG Graphs for any existing Piwik report.
@@ -145,7 +146,7 @@ class Piwik_ImageGraph_API
         $useUnicodeFont = array(
             'am', 'ar', 'el', 'fa', 'fi', 'he', 'ja', 'ka', 'ko', 'te', 'th', 'zh-cn', 'zh-tw',
         );
-        $languageLoaded = Piwik_Translate::getInstance()->getLanguageLoaded();
+        $languageLoaded = Translate::getInstance()->getLanguageLoaded();
         $font = self::getFontPath(self::DEFAULT_FONT);
         if (in_array($languageLoaded, $useUnicodeFont)) {
             $unicodeFontPath = self::getFontPath(self::UNICODE_FONT);
@@ -378,10 +379,10 @@ class Piwik_ImageGraph_API
                 $reportMetadata = $processedReport['reportMetadata']->getRows();
 
                 $i = 0;
-                // $reportData instanceof Piwik_DataTable
-                foreach ($reportData->getRows() as $row) // Piwik_DataTable_Row[]
+                // $reportData instanceof DataTable
+                foreach ($reportData->getRows() as $row) // Row[]
                 {
-                    // $row instanceof Piwik_DataTable_Row
+                    // $row instanceof Row
                     $rowData = $row->getColumns(); // Associative Array
                     $abscissaSeries[] = Common::unsanitizeInputValue($rowData['label']);
 
@@ -408,13 +409,13 @@ class Piwik_ImageGraph_API
                 }
             } else // if the report has no dimension we have multiple reports each with only one row within the reportData
             {
-                // $periodsData instanceof Piwik_DataTable_Simple[]
+                // $periodsData instanceof Simple[]
                 $periodsData = array_values($reportData->getArray());
                 $periodsCount = count($periodsData);
 
                 for ($i = 0; $i < $periodsCount; $i++) {
-                    // $periodsData[$i] instanceof Piwik_DataTable_Simple
-                    // $rows instanceof Piwik_DataTable_Row[]
+                    // $periodsData[$i] instanceof Simple
+                    // $rows instanceof Row[]
                     if (empty($periodsData[$i])) {
                         continue;
                     }
diff --git a/plugins/ImageGraph/ImageGraph.php b/plugins/ImageGraph/ImageGraph.php
index 73743ccbba582d3aacb40a2a06590ecc410eea6b..3a2f56bb58a3c17d70a8b0b7e65d284a19df6271 100644
--- a/plugins/ImageGraph/ImageGraph.php
+++ b/plugins/ImageGraph/ImageGraph.php
@@ -1,7 +1,9 @@
 <?php
 use Piwik\Common;
 use Piwik\Period;
+use Piwik\Plugin;
 use Piwik\Site;
+use Piwik\Config;
 
 /**
  * Piwik - Open source web analytics
@@ -13,7 +15,7 @@ use Piwik\Site;
  * @package Piwik_ImageGraph
  */
 
-class Piwik_ImageGraph extends Piwik_Plugin
+class Piwik_ImageGraph extends Plugin
 {
     static private $CONSTANT_ROW_COUNT_REPORT_EXCEPTIONS = array(
         'Referers_getRefererType',
diff --git a/plugins/ImageGraph/StaticGraph.php b/plugins/ImageGraph/StaticGraph.php
index 4fe0523e2a4d1c0b2817d8518bc5af5f63154af2..85778163e0cd7d6172cc235d08465d8bd704b8cb 100644
--- a/plugins/ImageGraph/StaticGraph.php
+++ b/plugins/ImageGraph/StaticGraph.php
@@ -9,6 +9,8 @@
  * @package Piwik_ImageGraph
  */
 
+use Piwik\Loader;
+
 require_once PIWIK_INCLUDE_PATH . "/libs/pChart2.1.3/class/pDraw.class.php";
 require_once PIWIK_INCLUDE_PATH . "/libs/pChart2.1.3/class/pImage.class.php";
 require_once PIWIK_INCLUDE_PATH . "/libs/pChart2.1.3/class/pData.class.php";
@@ -77,7 +79,7 @@ abstract class Piwik_ImageGraph_StaticGraph
         if (isset(self::$availableStaticGraphTypes[$graphType])) {
 
             $className = self::$availableStaticGraphTypes[$graphType];
-            Piwik_Loader::loadClass($className);
+            Loader::loadClass($className);
             return new $className;
         } else {
             throw new Exception(
@@ -108,7 +110,7 @@ abstract class Piwik_ImageGraph_StaticGraph
     }
 
     /**
-     * @return rendered static graph
+     * @return Image rendered static graph
      */
     public function getRenderedImage()
     {
diff --git a/plugins/Installation/Controller.php b/plugins/Installation/Controller.php
index 05d3913043bf653aab94c96864555378aec52c2c..5fcfcbe39ae13a3de94fa890c327777d54f7921f 100644
--- a/plugins/Installation/Controller.php
+++ b/plugins/Installation/Controller.php
@@ -8,7 +8,9 @@
  * @category Piwik_Plugins
  * @package Piwik_Installation
  */
+use Piwik\DataAccess\ArchiveTableCreator;
 use Piwik\Piwik;
+use Piwik\Config;
 use Piwik\Common;
 use Piwik\Access;
 
@@ -261,7 +263,7 @@ class Piwik_Installation_Controller extends Piwik_Controller_Admin
             $view->someTablesInstalled = true;
 
             // remove monthly archive tables
-            $archiveTables = Piwik_DataAccess_ArchiveTableCreator::getTablesArchivesInstalled();
+            $archiveTables = ArchiveTableCreator::getTablesArchivesInstalled();
             $baseTablesInstalled = count($tablesInstalled) - count($archiveTables);
             $minimumCountPiwikTables = 17;
 
diff --git a/plugins/Installation/Installation.php b/plugins/Installation/Installation.php
index 1d81de1393d8184845a9261f70537d6740800313..8017e4e535264548fa1dd320a8647e27eae3c496 100644
--- a/plugins/Installation/Installation.php
+++ b/plugins/Installation/Installation.php
@@ -10,12 +10,14 @@
  */
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Plugin;
+use Piwik\Translate;
 
 /**
  *
  * @package Piwik_Installation
  */
-class Piwik_Installation extends Piwik_Plugin
+class Piwik_Installation extends Plugin
 {
     protected $installationControllerName = 'Piwik_Installation_Controller';
 
@@ -51,7 +53,7 @@ class Piwik_Installation extends Piwik_Plugin
             $message = '';
         }
 
-        Piwik_Translate::getInstance()->loadCoreTranslation();
+        Translate::getInstance()->loadCoreTranslation();
 
         Piwik_PostEvent('Installation.startInstallation', array($this));
 
diff --git a/plugins/LanguagesManager/LanguagesManager.php b/plugins/LanguagesManager/LanguagesManager.php
index da096266b5984e888ce35ea67d0bed6f46b54a88..1d0bc24ed99203c4f04b4a5c167825fd03c81dda 100644
--- a/plugins/LanguagesManager/LanguagesManager.php
+++ b/plugins/LanguagesManager/LanguagesManager.php
@@ -12,12 +12,14 @@
 use Piwik\Config;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Plugin;
+use Piwik\Translate;
 
 /**
  *
  * @package Piwik_LanguagesManager
  */
-class Piwik_LanguagesManager extends Piwik_Plugin
+class Piwik_LanguagesManager extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
@@ -82,7 +84,7 @@ class Piwik_LanguagesManager extends Piwik_Plugin
             $language = self::getLanguageCodeForCurrentUser();
         }
         if (!Piwik_LanguagesManager_API::getInstance()->isLanguageAvailable($language)) {
-            $language = Piwik_Translate::getInstance()->getLanguageDefault();
+            $language = Translate::getInstance()->getLanguageDefault();
         }
     }
 
@@ -131,7 +133,7 @@ class Piwik_LanguagesManager extends Piwik_Plugin
             $languageCode = Common::extractLanguageCodeFromBrowserLanguage(Common::getBrowserLanguage(), Piwik_LanguagesManager_API::getInstance()->getAvailableLanguages());
         }
         if (!Piwik_LanguagesManager_API::getInstance()->isLanguageAvailable($languageCode)) {
-            $languageCode = Piwik_Translate::getInstance()->getLanguageDefault();
+            $languageCode = Translate::getInstance()->getLanguageDefault();
         }
         return $languageCode;
     }
diff --git a/plugins/Live/API.php b/plugins/Live/API.php
index a9fd58a6f66e65da20c3b5a3ae2998292b2806e7..8a739a0b170dfb79749930dae23ad8723cf8b8cb 100644
--- a/plugins/Live/API.php
+++ b/plugins/Live/API.php
@@ -9,10 +9,15 @@
  * @package Piwik_Live
  */
 use Piwik\Config;
+use Piwik\DataAccess\LogAggregator;
+use Piwik\DataTable\Filter\ColumnDelete;
+use Piwik\DataTable\Row;
 use Piwik\Period;
-use Piwik\Period_Range;
+use Piwik\Period\Range;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
+use Piwik\DataTable;
 use Piwik\Segment;
 use Piwik\Site;
 
@@ -82,7 +87,7 @@ class Piwik_Live_API
 
         $bind = array(
             $idSite,
-            Piwik_Date::factory(time() - $lastMinutes * 60)->toString('Y-m-d H:i:s')
+            Date::factory(time() - $lastMinutes * 60)->toString('Y-m-d H:i:s')
         );
 
         $segment = new Segment($segment, $idSite);
@@ -110,7 +115,7 @@ class Piwik_Live_API
      * @param int $filter_limit
      * @param bool $flat Whether to flatten the visitor details array
      *
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getLastVisitsForVisitor($visitorId, $idSite, $filter_limit = 10, $flat = false)
     {
@@ -133,7 +138,7 @@ class Piwik_Live_API
      * @param bool|int $minTimestamp (optional) Minimum timestamp to restrict the query to (useful when paginating or refreshing visits)
      * @param bool $flat
      * @param bool $doNotFetchActions
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getLastVisitsDetails($idSite, $period, $date, $segment = false, $filter_limit = false, $filter_offset = false, $minTimestamp = false, $flat = false, $doNotFetchActions = false)
     {
@@ -162,13 +167,13 @@ class Piwik_Live_API
      * @param bool $flat whether to flatten the array (eg. 'customVariables' names/values will appear in the root array rather than in 'customVariables' key
      * @param bool $doNotFetchActions If set to true, we only fetch visit info and not actions (much faster)
      *
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     private function getCleanedVisitorsFromDetails($visitorDetails, $idSite, $flat = false, $doNotFetchActions = false)
     {
         $actionsLimit = (int)Config::getInstance()->General['visitor_log_maximum_actions_per_visit'];
 
-        $table = new Piwik_DataTable();
+        $table = new DataTable();
 
         $site = new Site($idSite);
         $timezone = $site->getTimezone();
@@ -181,11 +186,11 @@ class Piwik_Live_API
             $visitorDetailsArray['siteCurrency'] = $site->getCurrency();
             $visitorDetailsArray['siteCurrencySymbol'] = @$currencies[$site->getCurrency()];
             $visitorDetailsArray['serverTimestamp'] = $visitorDetailsArray['lastActionTimestamp'];
-            $dateTimeVisit = Piwik_Date::factory($visitorDetailsArray['lastActionTimestamp'], $timezone);
+            $dateTimeVisit = Date::factory($visitorDetailsArray['lastActionTimestamp'], $timezone);
             $visitorDetailsArray['serverTimePretty'] = $dateTimeVisit->getLocalized('%time%');
             $visitorDetailsArray['serverDatePretty'] = $dateTimeVisit->getLocalized(Piwik_Translate('CoreHome_ShortDateFormat'));
 
-            $dateTimeVisitFirstAction = Piwik_Date::factory($visitorDetailsArray['firstActionTimestamp'], $timezone);
+            $dateTimeVisitFirstAction = Date::factory($visitorDetailsArray['firstActionTimestamp'], $timezone);
             $visitorDetailsArray['serverDatePrettyFirstAction'] = $dateTimeVisitFirstAction->getLocalized(Piwik_Translate('CoreHome_ShortDateFormat'));
             $visitorDetailsArray['serverTimePrettyFirstAction'] = $dateTimeVisitFirstAction->getLocalized('%time%');
 
@@ -197,7 +202,7 @@ class Piwik_Live_API
             if($flat) {
                 $visitorDetailsArray = $this->flattenVisitorDetailsArray($visitorDetailsArray);
             }
-            $table->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS => $visitorDetailsArray));
+            $table->addRowFromArray(array(Row::COLUMNS => $visitorDetailsArray));
         }
         return $table;
     }
@@ -240,7 +245,7 @@ class Piwik_Live_API
             if (!empty($action['customVariables'])) {
                 foreach ($action['customVariables'] as $thisCustomVar) {
                     foreach ($thisCustomVar as $cvKey => $cvValue) {
-                        $flattenedKeyName = $cvKey . Piwik_DataTable_Filter_ColumnDelete::APPEND_TO_COLUMN_NAME_TO_KEEP . $count;
+                        $flattenedKeyName = $cvKey . ColumnDelete::APPEND_TO_COLUMN_NAME_TO_KEEP . $count;
                         $visitorDetailsArray[$flattenedKeyName] = $cvValue;
                         $count++;
                     }
@@ -252,7 +257,7 @@ class Piwik_Live_API
         $count = 1;
         foreach($visitorDetailsArray['actionDetails'] as $action) {
             if(!empty($action['goalId'])) {
-                $flattenedKeyName = 'visitConvertedGoalId' . Piwik_DataTable_Filter_ColumnDelete::APPEND_TO_COLUMN_NAME_TO_KEEP . $count;
+                $flattenedKeyName = 'visitConvertedGoalId' . ColumnDelete::APPEND_TO_COLUMN_NAME_TO_KEEP . $count;
                 $visitorDetailsArray[$flattenedKeyName] = $action['goalId'];
                 $count++;
             }
@@ -262,17 +267,17 @@ class Piwik_Live_API
         $count = 1;
         foreach($visitorDetailsArray['actionDetails'] as $action) {
             if(!empty($action['url'])) {
-                $flattenedKeyName = 'pageUrl' . Piwik_DataTable_Filter_ColumnDelete::APPEND_TO_COLUMN_NAME_TO_KEEP . $count;
+                $flattenedKeyName = 'pageUrl' . ColumnDelete::APPEND_TO_COLUMN_NAME_TO_KEEP . $count;
                 $visitorDetailsArray[$flattenedKeyName] = $action['url'];
             }
 
             if(!empty($action['pageTitle'])) {
-                $flattenedKeyName = 'pageTitle' . Piwik_DataTable_Filter_ColumnDelete::APPEND_TO_COLUMN_NAME_TO_KEEP . $count;
+                $flattenedKeyName = 'pageTitle' . ColumnDelete::APPEND_TO_COLUMN_NAME_TO_KEEP . $count;
                 $visitorDetailsArray[$flattenedKeyName] = $action['pageTitle'];
             }
 
             if(!empty($action['siteSearchKeyword'])) {
-                $flattenedKeyName = 'siteSearchKeyword' . Piwik_DataTable_Filter_ColumnDelete::APPEND_TO_COLUMN_NAME_TO_KEEP . $count;
+                $flattenedKeyName = 'siteSearchKeyword' . ColumnDelete::APPEND_TO_COLUMN_NAME_TO_KEEP . $count;
                 $visitorDetailsArray[$flattenedKeyName] = $action['siteSearchKeyword'];
             }
             $count++;
@@ -354,15 +359,15 @@ class Piwik_Live_API
 
             $dateString = $date;
             if ($period == 'range') {
-                $processedPeriod = new Period_Range('range', $date);
-                if ($parsedDate = Period_Range::parseDateRange($date)) {
+                $processedPeriod = new Range('range', $date);
+                if ($parsedDate = Range::parseDateRange($date)) {
                     $dateString = $parsedDate[2];
                 }
             } else {
-                $processedDate = Piwik_Date::factory($date);
+                $processedDate = Date::factory($date);
                 if ($date == 'today'
                     || $date == 'now'
-                    || $processedDate->toString() == Piwik_Date::factory('now', $currentTimezone)->toString()
+                    || $processedDate->toString() == Date::factory('now', $currentTimezone)->toString()
                 ) {
                     $processedDate = $processedDate->subDay(1);
                 }
@@ -375,7 +380,7 @@ class Piwik_Live_API
             if (!in_array($date, array('now', 'today', 'yesterdaySameTime'))
                 && strpos($date, 'last') === false
                 && strpos($date, 'previous') === false
-                && Piwik_Date::factory($dateString)->toString('Y-m-d') != Piwik_Date::factory('now', $currentTimezone)->toString()
+                && Date::factory($dateString)->toString('Y-m-d') != Date::factory('now', $currentTimezone)->toString()
             ) {
                 $dateEnd = $processedPeriod->getDateEnd()->setTimezone($currentTimezone);
                 $where[] = " log_visit.visit_last_action_time <= ?";
@@ -551,11 +556,11 @@ class Piwik_Live_API
         $sql = "SELECT
 						case idgoal when " . Piwik_Tracker_GoalManager::IDGOAL_CART . " then '" . Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_CART . "' else '" . Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_ORDER . "' end as type,
 						idorder as orderId,
-						" . Piwik_DataAccess_LogAggregator::getSqlRevenue('revenue') . " as revenue,
-						" . Piwik_DataAccess_LogAggregator::getSqlRevenue('revenue_subtotal') . " as revenueSubTotal,
-						" . Piwik_DataAccess_LogAggregator::getSqlRevenue('revenue_tax') . " as revenueTax,
-						" . Piwik_DataAccess_LogAggregator::getSqlRevenue('revenue_shipping') . " as revenueShipping,
-						" . Piwik_DataAccess_LogAggregator::getSqlRevenue('revenue_discount') . " as revenueDiscount,
+						" . LogAggregator::getSqlRevenue('revenue') . " as revenue,
+						" . LogAggregator::getSqlRevenue('revenue_subtotal') . " as revenueSubTotal,
+						" . LogAggregator::getSqlRevenue('revenue_tax') . " as revenueTax,
+						" . LogAggregator::getSqlRevenue('revenue_shipping') . " as revenueShipping,
+						" . LogAggregator::getSqlRevenue('revenue_discount') . " as revenueDiscount,
 						items as items,
 
 						log_conversion.server_time as serverTimePretty
@@ -592,7 +597,7 @@ class Piwik_Live_API
 							log_action_sku.name as itemSKU,
 							log_action_name.name as itemName,
 							log_action_category.name as itemCategory,
-							" . Piwik_DataAccess_LogAggregator::getSqlRevenue('price') . " as price,
+							" . LogAggregator::getSqlRevenue('price') . " as price,
 							quantity as quantity
 						FROM " . Common::prefixTable('log_conversion_item') . "
 							INNER JOIN " . Common::prefixTable('log_action') . " AS log_action_sku
@@ -652,7 +657,7 @@ class Piwik_Live_API
                     break;
             }
             // Convert datetimes to the site timezone
-            $dateTimeVisit = Piwik_Date::factory($details['serverTimePretty'], $timezone);
+            $dateTimeVisit = Date::factory($details['serverTimePretty'], $timezone);
             $details['serverTimePretty'] = $dateTimeVisit->getLocalized(Piwik_Translate('CoreHome_ShortDateFormat') . ' %time%');
 
         }
diff --git a/plugins/Live/Controller.php b/plugins/Live/Controller.php
index bad3a1bcbf48fe77936e912223efb6d644c42e41..69c94fdf87dd1537bfbb47ff089a5830eb782a52 100644
--- a/plugins/Live/Controller.php
+++ b/plugins/Live/Controller.php
@@ -8,8 +8,9 @@
  * @category Piwik_Plugins
  * @package Piwik_Live
  */
-use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Piwik;
+use Piwik\Config;
 
 /**
  * @package Piwik_Live
@@ -67,7 +68,7 @@ class Piwik_Live_Controller extends Piwik_Controller
         return $this->render($view, $fetch);
     }
 
-    private function render($view, $fetch)
+    private function render(Piwik_View $view, $fetch)
     {
         $rendered = $view->render();
         if ($fetch) {
@@ -102,7 +103,7 @@ class Piwik_Live_Controller extends Piwik_Controller
 
         // disable the tag cloud,  pie charts, bar chart icons
         $view->disableShowAllViewsIcons();
-        // disable the button "show more datas"
+        // disable the button "show more data"
         $view->disableShowAllColumns();
         // disable the RSS feed
         $view->disableShowExportAsRssFeed();
diff --git a/plugins/Live/Live.php b/plugins/Live/Live.php
index d4bd5042041fe6e90658ca24b7da72d5a7b71518..ba6bf5b2194d1c5652a5a5de5d1b80877f6776cc 100644
--- a/plugins/Live/Live.php
+++ b/plugins/Live/Live.php
@@ -8,12 +8,13 @@
  * @category Piwik_Plugins
  * @package Piwik_Live
  */
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_Live
  */
-class Piwik_Live extends Piwik_Plugin
+class Piwik_Live extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
diff --git a/plugins/Live/Visitor.php b/plugins/Live/Visitor.php
index 1c8ec26952c6df27e154215c9683aff2fc5a66bd..df7edf761d5026830ab6ace573b7823af94de5be 100644
--- a/plugins/Live/Visitor.php
+++ b/plugins/Live/Visitor.php
@@ -343,7 +343,7 @@ class Piwik_Live_Visitor
     function getKeyword()
     {
         $keyword = $this->details['referer_keyword'];
-        if (PluginsManager::getInstance()->isPluginActivated('Referers')
+        if (\Piwik\PluginsManager::getInstance()->isPluginActivated('Referers')
             && $this->getRefererType() == 'search'
         ) {
             $keyword = Piwik_Referers_API::getCleanKeyword($keyword);
@@ -354,7 +354,7 @@ class Piwik_Live_Visitor
     function getRefererUrl()
     {
         if ($this->getRefererType() == 'search') {
-            if (PluginsManager::getInstance()->isPluginActivated('Referers')
+            if (\Piwik\PluginsManager::getInstance()->isPluginActivated('Referers')
                 && $this->details['referer_keyword'] == Piwik_Referers_API::LABEL_KEYWORD_NOT_DEFINED
             ) {
                 return 'http://piwik.org/faq/general/#faq_144';
@@ -512,7 +512,7 @@ class Piwik_Live_Visitor
 
     function getDeviceType()
     {
-        if(PluginsManager::getInstance()->isPluginActivated('DevicesDetection')) {
+        if(\Piwik\PluginsManager::getInstance()->isPluginActivated('DevicesDetection')) {
             return Piwik_getDeviceTypeLabel($this->details['config_device_type']);
         }
         return false;
diff --git a/plugins/Login/Controller.php b/plugins/Login/Controller.php
index 013658b41986c0de7ba17b095705e0fa9d5ff822..28aa0e285c4741ae038675409c67d0d5f7cc54bf 100644
--- a/plugins/Login/Controller.php
+++ b/plugins/Login/Controller.php
@@ -10,6 +10,7 @@
  */
 use Piwik\Config;
 use Piwik\Piwik;
+use Piwik\Common;
 
 require_once PIWIK_INCLUDE_PATH . '/core/Config.php';
 
@@ -315,7 +316,7 @@ class Piwik_Login_Controller extends Piwik_Controller
 
         if (is_null($errorMessage)) // if success, show login w/ success message
         {
-            $this->redirectToIndex('Login', 'resetPasswordSuccess');
+            return $this->redirectToIndex('Login', 'resetPasswordSuccess');
         } else {
             // show login page w/ error. this will keep the token in the URL
             return $this->login($errorMessage);
@@ -392,7 +393,7 @@ class Piwik_Login_Controller extends Piwik_Controller
     /**
      * Generate a password reset token.  Expires in (roughly) 24 hours.
      *
-     * @param array user information
+     * @param array $user user information
      * @param int $timestamp Unix timestamp
      * @return string generated token
      */
diff --git a/plugins/Login/Login.php b/plugins/Login/Login.php
index a46bf6e3874527d3fdf9844f3f971fd4645348c7..7208328074f47a5b78bd8a8dd82ccd5750cfd76f 100644
--- a/plugins/Login/Login.php
+++ b/plugins/Login/Login.php
@@ -10,12 +10,13 @@
  */
 use Piwik\Config;
 use Piwik\Piwik;
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_Login
  */
-class Piwik_Login extends Piwik_Plugin
+class Piwik_Login extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
diff --git a/plugins/Login/templates/resetPassword.twig b/plugins/Login/templates/resetPassword.twig
index eaa5be0a8d67d75976b9fbcf1fa9dbcd5e4f369a..bd9cf4acccc52e147ad85692df4094fb8125bb65 100755
--- a/plugins/Login/templates/resetPassword.twig
+++ b/plugins/Login/templates/resetPassword.twig
@@ -1,8 +1,8 @@
-{% if infoMessage is defined %}
+{% if infoMessage is defined and infoMessage is not empty %}
     <p class="message">{{ infoMessage }}</p>
 {% endif %}
 {% if formErrors is defined %}
-    <p id="login_error">
+    <p class="message_error">
         {% for data in formErrors %}
             <strong>{{ 'General_Error'|translate }}</strong>
             : {{ data }}
diff --git a/plugins/MobileMessaging/MobileMessaging.php b/plugins/MobileMessaging/MobileMessaging.php
index 941d753fa75a4980c3d310d77967098745e6fe00..840ae48abc7cfddacbf74942a7cead8817dad2c3 100644
--- a/plugins/MobileMessaging/MobileMessaging.php
+++ b/plugins/MobileMessaging/MobileMessaging.php
@@ -9,12 +9,13 @@
  * @package Piwik_MobileMessaging
  */
 use Piwik\Piwik;
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_MobileMessaging
  */
-class Piwik_MobileMessaging extends Piwik_Plugin
+class Piwik_MobileMessaging extends Plugin
 {
     const DELEGATED_MANAGEMENT_OPTION = 'MobileMessaging_DelegatedManagement';
     const PROVIDER_OPTION = 'Provider';
@@ -158,7 +159,7 @@ class Piwik_MobileMessaging extends Piwik_Plugin
     public function getRendererInstance(&$reportRenderer, $info)
     {
         if (self::manageEvent($info)) {
-            if (PluginsManager::getInstance()->isPluginActivated('MultiSites')) {
+            if (\Piwik\PluginsManager::getInstance()->isPluginActivated('MultiSites')) {
                 $reportRenderer = new Piwik_MobileMessaging_ReportRenderer_Sms();
             } else {
                 $reportRenderer = new Piwik_MobileMessaging_ReportRenderer_Exception(
diff --git a/plugins/MobileMessaging/SMSProvider.php b/plugins/MobileMessaging/SMSProvider.php
index 6abc527dcba5b220d411905358b847b202245598..402c135b48f1f858c555556edc038dc8c9e46d92 100644
--- a/plugins/MobileMessaging/SMSProvider.php
+++ b/plugins/MobileMessaging/SMSProvider.php
@@ -8,6 +8,7 @@
  * @category Piwik_Plugins
  * @package Piwik_MobileMessaging
  */
+use Piwik\Loader;
 
 /**
  * The Piwik_MobileMessaging_SMSProvider abstract class is used as a base class for SMS provider implementations.
@@ -49,7 +50,7 @@ abstract class Piwik_MobileMessaging_SMSProvider
         $className = 'Piwik_MobileMessaging_SMSProvider_' . $providerName;
 
         try {
-            Piwik_Loader::loadClass($className);
+            Loader::loadClass($className);
             return new $className;
         } catch (Exception $e) {
             throw new Exception(
diff --git a/plugins/MultiSites/API.php b/plugins/MultiSites/API.php
index 0c754060048fa980ebfb6b2c24aa249c821403ef..2906edc98106914b96e9a029ab76a548e0903a9a 100755
--- a/plugins/MultiSites/API.php
+++ b/plugins/MultiSites/API.php
@@ -9,9 +9,11 @@
  * @package Piwik_MultiSites
  */
 use Piwik\Archive;
-use Piwik\Period_Range;
+use Piwik\DataTable\Filter\CalculateEvolutionFilter;
+use Piwik\Period\Range;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\DataTable;
 use Piwik\Site;
 
 /**
@@ -95,7 +97,7 @@ class Piwik_MultiSites_API
      *                                        Only used when a scheduled task is running
      * @param bool|string $enhanced When true, return additional goal & ecommerce metrics
      * @param bool|string $pattern If specified, only the website which names (or site ID) match the pattern will be returned using SitesManager.getPatternMatchSites
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getAll($period, $date, $segment = false, $_restrictSitesToLogin = false, $enhanced = false, $pattern = false)
     {
@@ -104,7 +106,7 @@ class Piwik_MultiSites_API
         $idSites = $this->getSitesIdFromPattern($pattern);
 
         if(empty($idSites)) {
-            return new Piwik_DataTable();
+            return new DataTable();
         }
         return $this->buildDataTable(
             $idSites,
@@ -154,7 +156,7 @@ class Piwik_MultiSites_API
      * @param bool|string $_restrictSitesToLogin Hack used to enforce we restrict the returned data to the specified username
      *                                        Only used when a scheduled task is running
      * @param bool|string $enhanced When true, return additional goal & ecommerce metrics
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getOne($idSite, $period, $date, $segment = false, $_restrictSitesToLogin = false, $enhanced = false)
     {
@@ -214,16 +216,16 @@ class Piwik_MultiSites_API
         }
 
         // get the data
-        // $dataTable instanceOf Piwik_DataTable_Array
+        // $dataTable instanceOf Set
         $dataTable = $archive->getDataTableFromNumeric($fieldsToGet);
 
         // get rid of the DataTable_Array that is created by the IndexedBySite archive type
-        if ($dataTable instanceof Piwik_DataTable_Array
+        if ($dataTable instanceof DataTable\Map
             && $multipleWebsitesRequested
         ) {
             $dataTable = $dataTable->mergeChildren();
         } else {
-            if (!($dataTable instanceof Piwik_DataTable_Array)
+            if (!($dataTable instanceof DataTable\Map)
                 && $dataTable->getRowsCount() > 0
             ) {
                 $firstSite = is_array($sites) ? reset($sites) : $sites;
@@ -238,18 +240,18 @@ class Piwik_MultiSites_API
 
         // if the period isn't a range & a lastN/previousN date isn't used, we get the same
         // data for the last period to show the evolution of visits/actions/revenue
-        list($strLastDate, $lastPeriod) = Period_Range::getLastDate($date, $period);
+        list($strLastDate, $lastPeriod) = Range::getLastDate($date, $period);
         if ($strLastDate !== false) {
             if ($lastPeriod !== false) {
                 // NOTE: no easy way to set last period date metadata when range of dates is requested.
                 //       will be easier if DataTable_Array::metadata is removed, and metadata that is
-                //       put there is put directly in Piwik_DataTable::metadata.
+                //       put there is put directly in DataTable::metadata.
                 $dataTable->setMetadata(self::getLastPeriodMetadataName('date'), $lastPeriod);
             }
             $pastArchive = Archive::build($sites, $period, $strLastDate, $segment, $_restrictSitesToLogin);
             $pastData = $pastArchive->getDataTableFromNumeric($fieldsToGet);
             
-            if ($pastData instanceof Piwik_DataTable_Array
+            if ($pastData instanceof DataTable\Map
                 && $multipleWebsitesRequested
             ) {
                 $pastData = $pastData->mergeChildren();
@@ -264,7 +266,7 @@ class Piwik_MultiSites_API
         // remove eCommerce related metrics on non eCommerce Piwik sites
         // note: this is not optimal in terms of performance: those metrics should not be retrieved in the first place
         if ($enhanced) {
-            // $dataTableRows instanceOf Piwik_DataTable_Row[]
+            // $dataTableRows instanceOf Row[]
             $dataTableRows = $dataTable->getRows();
 
             foreach ($dataTableRows as $dataTableRow) {
@@ -283,8 +285,7 @@ class Piwik_MultiSites_API
 
         // set the label of each row to the site name
         if ($multipleWebsitesRequested) {
-            $getNameFor = array('Site', 'getNameFor');
-            $dataTable->filter('ColumnCallbackReplace', array('label', $getNameFor));
+            $dataTable->filter('ColumnCallbackReplace', array('label', '\Piwik\Site::getNameFor'));
         } else {
             $dataTable->filter('ColumnDelete', array('label'));
         }
@@ -317,8 +318,8 @@ class Piwik_MultiSites_API
      * Performs a binary filter of two
      * DataTables in order to correctly calculate evolution metrics.
      *
-     * @param Piwik_DataTable|Piwik_DataTable_Array $currentData
-     * @param Piwik_DataTable|Piwik_DataTable_Array $pastData
+     * @param DataTable|DataTable\Map $currentData
+     * @param DataTable|DataTable\Map $pastData
      * @param array $apiMetrics The array of string fields to calculate evolution
      *                          metrics for.
      * @throws Exception
@@ -330,7 +331,7 @@ class Piwik_MultiSites_API
                                . get_class($pastData).".");
         }
         
-        if ($currentData instanceof Piwik_DataTable_Array) {
+        if ($currentData instanceof DataTable\Map) {
             $pastArray = $pastData->getArray();
             foreach ($currentData->getArray() as $subTable) {
                 $this->calculateEvolutionPercentages($subTable, current($pastArray), $apiMetrics);
@@ -354,13 +355,13 @@ class Piwik_MultiSites_API
      * Sets the total visits, actions & revenue for a DataTable returned by
      * $this->buildDataTable.
      *
-     * @param Piwik_DataTable $dataTable
+     * @param DataTable $dataTable
      * @param array $apiMetrics Metrics info.
      * @return array Array of three values: total visits, total actions, total revenue
      */
     private function setMetricsTotalsMetadata($dataTable, $apiMetrics)
     {
-        if ($dataTable instanceof Piwik_DataTable_Array) {
+        if ($dataTable instanceof DataTable\Map) {
             foreach ($dataTable->getArray() as $table) {
                 $this->setMetricsTotalsMetadata($table, $apiMetrics);
             }
@@ -393,13 +394,13 @@ class Piwik_MultiSites_API
      * Sets the total evolution metadata for a datatable returned by $this->buildDataTable
      * given data for the last period.
      *
-     * @param Piwik_DataTable $dataTable
-     * @param Piwik_DataTable $pastData
+     * @param DataTable $dataTable
+     * @param DataTable $pastData
      * @param array $apiMetrics Metrics info.
      */
     private function setPastDataMetadata($dataTable, $pastData, $apiMetrics)
     {
-        if ($dataTable instanceof Piwik_DataTable_Array) {
+        if ($dataTable instanceof DataTable\Map) {
             $pastArray = $pastData->getArray();
             foreach ($dataTable->getArray() as $subTable) {
                 $this->setPastDataMetadata($subTable, current($pastArray), $apiMetrics);
@@ -422,7 +423,7 @@ class Piwik_MultiSites_API
 
                 // calculate & set evolution
                 $currentTotal = $dataTable->getMetadata($totalMetadataName);
-                $evolution = Piwik_DataTable_Filter_CalculateEvolutionFilter::calculate($currentTotal, $pastTotal);
+                $evolution = CalculateEvolutionFilter::calculate($currentTotal, $pastTotal);
                 $dataTable->setMetadata($totalEvolutionMetadataName, $evolution);
             }
         }
diff --git a/plugins/MultiSites/Controller.php b/plugins/MultiSites/Controller.php
index 992cfa6be064650a8ab023287bb8d29d286a5455..4986ba1abc65b156d79a5917076c7cb6efaf11a3 100644
--- a/plugins/MultiSites/Controller.php
+++ b/plugins/MultiSites/Controller.php
@@ -12,6 +12,7 @@ use Piwik\Period;
 use Piwik\Piwik;
 use Piwik\Common;
 use Piwik\Config;
+use Piwik\Date;
 use Piwik\Site;
 
 /**
@@ -153,8 +154,8 @@ class Piwik_MultiSites_Controller extends Piwik_Controller
         // if the current date is today, or yesterday,
         // in case the website is set to UTC-12), or today in UTC+14, we refresh the page every 5min
         if (in_array($date, array('today', date('Y-m-d'),
-                                  'yesterday', Piwik_Date::factory('yesterday')->toString('Y-m-d'),
-                                  Piwik_Date::factory('now', 'UTC+14')->toString('Y-m-d')))
+                                  'yesterday', Date::factory('yesterday')->toString('Y-m-d'),
+                                  Date::factory('now', 'UTC+14')->toString('Y-m-d')))
         ) {
 
             $view->autoRefreshTodayReport = Config::getInstance()->General['multisites_refresh_after_seconds'];
@@ -171,32 +172,32 @@ class Piwik_MultiSites_Controller extends Piwik_Controller
      * The Multisites reports displays the first calendar date as the earliest day available for all websites.
      * Also, today is the later "today" available across all timezones.
      * @param array $siteIds Array of IDs for each site being displayed.
-     * @return array of two Piwik_Date instances. First is the min-date & the second
+     * @return array of two Date instances. First is the min-date & the second
      *               is the max date.
      */
     private function getMinMaxDateAcrossWebsites($siteIds)
     {
-        $now = Piwik_Date::now();
+        $now = Date::now();
 
         $minDate = null;
         $maxDate = $now->subDay(1)->getTimestamp();
         foreach ($siteIds as $idsite) {
             // look for 'now' in the website's timezone
             $timezone = Site::getTimezoneFor($idsite);
-            $date = Piwik_Date::adjustForTimezone($now->getTimestamp(), $timezone);
+            $date = Date::adjustForTimezone($now->getTimestamp(), $timezone);
             if ($date > $maxDate) {
                 $maxDate = $date;
             }
 
             // look for the absolute minimum date
             $creationDate = Site::getCreationDateFor($idsite);
-            $date = Piwik_Date::adjustForTimezone(strtotime($creationDate), $timezone);
+            $date = Date::adjustForTimezone(strtotime($creationDate), $timezone);
             if (is_null($minDate) || $date < $minDate) {
                 $minDate = $date;
             }
         }
 
-        return array(Piwik_Date::factory($minDate), Piwik_Date::factory($maxDate));
+        return array(Date::factory($minDate), Date::factory($maxDate));
     }
 
     protected function applyPrettyMoney(&$sites)
diff --git a/plugins/MultiSites/MultiSites.php b/plugins/MultiSites/MultiSites.php
index a8ccc1ffcf8119cdc42d9161fbadd3b13901a245..96f14fabce37e87cc279aea07881ab753e10e606 100644
--- a/plugins/MultiSites/MultiSites.php
+++ b/plugins/MultiSites/MultiSites.php
@@ -8,12 +8,13 @@
  * @category Piwik_Plugins
  * @package Piwik_MultiSites
  */
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_MultiSites
  */
-class Piwik_MultiSites extends Piwik_Plugin
+class Piwik_MultiSites extends Plugin
 {
     public function getInformation()
     {
diff --git a/plugins/Overlay/API.php b/plugins/Overlay/API.php
index 9db64023c8c1ec8140fbed80240797140d1d8918..26cf98a5c5706c4eafa7dbbae5f3a46243df44bc 100644
--- a/plugins/Overlay/API.php
+++ b/plugins/Overlay/API.php
@@ -2,6 +2,7 @@
 use Piwik\Config;
 use Piwik\Piwik;
 use Piwik\Access;
+use Piwik\DataTable;
 
 /**
  * Piwik - Open source web analytics
@@ -81,7 +82,7 @@ class Piwik_Overlay_API
         $url = Piwik_Tracker_Action::excludeQueryParametersFromUrl($url, $idSite);
         // we don't unsanitize $url here. it will be done in the Transitions plugin.
 
-        $resultDataTable = new Piwik_DataTable;
+        $resultDataTable = new DataTable;
 
         try {
             $limitBeforeGrouping = Config::getInstance()->General['overlay_following_pages_limit'];
diff --git a/plugins/Overlay/Controller.php b/plugins/Overlay/Controller.php
index 6f7c00caf932d0476c1f89bc43c5eb872147df1b..d3bd8ab3b09a96343e50d55038cd1577a74ccf68 100644
--- a/plugins/Overlay/Controller.php
+++ b/plugins/Overlay/Controller.php
@@ -1,6 +1,7 @@
 <?php
 use Piwik\Metrics;
 use Piwik\Piwik;
+use Piwik\Config;
 use Piwik\Common;
 
 /**
@@ -22,7 +23,7 @@ class Piwik_Overlay_Controller extends Piwik_Controller
         Piwik::checkUserHasViewAccess($this->idSite);
 
         $template = '@Overlay/index';
-        if (Piwik_Config::getInstance()->General['overlay_disable_framed_mode']) {
+        if (Config::getInstance()->General['overlay_disable_framed_mode']) {
             $template = '@Overlay/index_noframe';
         }
 
diff --git a/plugins/Overlay/Overlay.php b/plugins/Overlay/Overlay.php
index 5c6d072be5ab092a7594686cb18ca30465a0724f..72a08d5046e5c67373f43a1ac532ddcfb86fbf10 100644
--- a/plugins/Overlay/Overlay.php
+++ b/plugins/Overlay/Overlay.php
@@ -9,7 +9,9 @@
  * @package Piwik_Overlay
  */
 
-class Piwik_Overlay extends Piwik_Plugin
+use Piwik\Plugin;
+
+class Piwik_Overlay extends Plugin
 {
     public function getInformation()
     {
diff --git a/plugins/PDFReports/API.php b/plugins/PDFReports/API.php
index c3eea2e13d9c5e45212722d9d32c713573455771..4826fe8c8043d69d713a9e15d8dc2dc380167d7e 100644
--- a/plugins/PDFReports/API.php
+++ b/plugins/PDFReports/API.php
@@ -10,7 +10,9 @@
  */
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
 use Piwik\Site;
+use Piwik\Translate;
 
 /**
  * The PDFReports API lets you manage Scheduled Email reports, as well as generate, download or email any existing report.
@@ -119,7 +121,7 @@ class Piwik_PDFReports_API
                  'format'      => $reportFormat,
                  'parameters'  => $parameters,
                  'reports'     => $reports,
-                 'ts_created'  => Piwik_Date::now()->getDatetime(),
+                 'ts_created'  => Date::now()->getDatetime(),
                  'deleted'     => 0,
             ));
 
@@ -294,10 +296,10 @@ class Piwik_PDFReports_API
 
         // load specified language
         if (empty($language)) {
-            $language = Piwik_Translate::getInstance()->getLanguageDefault();
+            $language = Translate::getInstance()->getLanguageDefault();
         }
 
-        Piwik_Translate::getInstance()->reloadLanguage($language);
+        Translate::getInstance()->reloadLanguage($language);
 
         $reports = $this->getReports($idSite = false, $_period = false, $idReport);
         $report = reset($reports);
@@ -496,7 +498,7 @@ class Piwik_PDFReports_API
         }
 
         if (empty($date)) {
-            $date = Piwik_Date::now()->subPeriod(1, $report['period'])->toString();
+            $date = Date::now()->subPeriod(1, $report['period'])->toString();
         }
 
         $language = Piwik_LanguagesManager_API::getInstance()->getLanguageForUser($report['login']);
@@ -538,7 +540,7 @@ class Piwik_PDFReports_API
 
         // Update flag in DB
         Zend_Registry::get('db')->update(Common::prefixTable('report'),
-            array('ts_last_sent' => Piwik_Date::now()->getDatetime()),
+            array('ts_last_sent' => Date::now()->getDatetime()),
             "idreport = " . $report['idreport']
         );
 
@@ -798,6 +800,6 @@ class Piwik_PDFReports_API
      */
     public static function isSegmentEditorActivated()
     {
-        return PluginsManager::getInstance()->isPluginActivated('SegmentEditor');
+        return \Piwik\PluginsManager::getInstance()->isPluginActivated('SegmentEditor');
     }
 }
diff --git a/plugins/PDFReports/PDFReports.php b/plugins/PDFReports/PDFReports.php
index 5d93ed38cbd2a8412b97d0e5e02c35a563e4c5d1..69ddb3d498b87c0ba5eec5895e48c7517a09dbf8 100644
--- a/plugins/PDFReports/PDFReports.php
+++ b/plugins/PDFReports/PDFReports.php
@@ -10,13 +10,16 @@
  */
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Config;
+use Piwik\Date;
+use Piwik\Plugin;
 use Piwik\Site;
 
 /**
  *
  * @package Piwik_PDFReports
  */
-class Piwik_PDFReports extends Piwik_Plugin
+class Piwik_PDFReports extends Plugin
 {
     const MOBILE_MESSAGING_TOP_MENU_TRANSLATION_KEY = 'MobileMessaging_TopMenu';
     const PDF_REPORTS_TOP_MENU_TRANSLATION_KEY = 'PDFReports_EmailReports';
@@ -204,7 +207,7 @@ class Piwik_PDFReports extends Piwik_Plugin
                         :
                         $displayFormat != self::DISPLAY_FORMAT_TABLES_ONLY)
                         && Piwik::isGdExtensionEnabled()
-                        && PluginsManager::getInstance()->isPluginActivated('ImageGraph')
+                        && \Piwik\PluginsManager::getInstance()->isPluginActivated('ImageGraph')
                         && !empty($metadata['imageGraphUrl']);
 
                 $processedReport['evolutionGraph'] = $evolutionGraph;
@@ -409,13 +412,13 @@ class Piwik_PDFReports extends Piwik_Plugin
 
     public function getScheduledTasks(&$tasks)
     {
-        $arbitraryDateInUTC = Piwik_Date::factory('2011-01-01');
+        $arbitraryDateInUTC = Date::factory('2011-01-01');
         foreach (Piwik_PDFReports_API::getInstance()->getReports() as $report) {
             if (!$report['deleted'] && $report['period'] != Piwik_ScheduledTime::PERIOD_NEVER) {
                 $midnightInSiteTimezone =
                     date(
                         'H',
-                        Piwik_Date::factory(
+                        Date::factory(
                             $arbitraryDateInUTC,
                             Site::getTimezoneFor($report['idsite'])
                         )->getTimestamp()
@@ -461,7 +464,7 @@ class Piwik_PDFReports extends Piwik_Plugin
             13,
             $isHTML = false,
             $tooltip = Piwik_Translate(
-                PluginsManager::getInstance()->isPluginActivated('MobileMessaging')
+                \Piwik\PluginsManager::getInstance()->isPluginActivated('MobileMessaging')
                     ? 'MobileMessaging_TopLinkTooltip' : 'PDFReports_TopLinkTooltip'
             )
         );
@@ -470,7 +473,7 @@ class Piwik_PDFReports extends Piwik_Plugin
     function getTopMenuTranslationKey()
     {
         // if MobileMessaging is not activated, display 'Email reports'
-        if (!PluginsManager::getInstance()->isPluginActivated('MobileMessaging'))
+        if (!\Piwik\PluginsManager::getInstance()->isPluginActivated('MobileMessaging'))
             return self::PDF_REPORTS_TOP_MENU_TRANSLATION_KEY;
 
         if (Piwik::isUserIsAnonymous()) {
diff --git a/plugins/PleineLune/PleineLune.php b/plugins/PleineLune/PleineLune.php
index 133cbbfea26aa496aa767eaf49f20ead222fee79..12b581bdc192ded7157a5533a21331e8c20765bf 100644
--- a/plugins/PleineLune/PleineLune.php
+++ b/plugins/PleineLune/PleineLune.php
@@ -8,12 +8,13 @@
  * @category Piwik_Plugins
  * @package Piwik_PleineLune
  */
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_PleineLune
  */
-class Piwik_PleineLune extends Piwik_Plugin
+class Piwik_PleineLune extends Plugin
 {
     public function getListHooksRegistered()
     {
diff --git a/plugins/PrivacyManager/Controller.php b/plugins/PrivacyManager/Controller.php
index a6770ae74a09f43585d3cbd93839e5a72e7e060c..a3af0246be7d8dc75d0d9dbe408f270a0108407a 100644
--- a/plugins/PrivacyManager/Controller.php
+++ b/plugins/PrivacyManager/Controller.php
@@ -11,6 +11,7 @@
 use Piwik\Config;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
 
 /**
  *
@@ -105,7 +106,7 @@ class Piwik_PrivacyManager_Controller extends Piwik_Controller_Admin
      */
     public static function isDntSupported()
     {
-        return PluginsManager::getInstance()->isPluginActivated('DoNotTrack');
+        return \Piwik\PluginsManager::getInstance()->isPluginActivated('DoNotTrack');
     }
 
     public function privacySettings()
@@ -214,12 +215,12 @@ class Piwik_PrivacyManager_Controller extends Piwik_Controller_Admin
         Piwik::checkUserIsSuperUser();
         $anonymizeIP = array();
 
-        PluginsManager::getInstance()->loadPlugin(self::ANONYMIZE_IP_PLUGIN_NAME);
+        \Piwik\PluginsManager::getInstance()->loadPlugin(self::ANONYMIZE_IP_PLUGIN_NAME);
 
         $anonymizeIP["name"] = self::ANONYMIZE_IP_PLUGIN_NAME;
-        $anonymizeIP["enabled"] = PluginsManager::getInstance()->isPluginActivated(self::ANONYMIZE_IP_PLUGIN_NAME);
+        $anonymizeIP["enabled"] = \Piwik\PluginsManager::getInstance()->isPluginActivated(self::ANONYMIZE_IP_PLUGIN_NAME);
         $anonymizeIP["maskLength"] = Config::getInstance()->Tracker['ip_address_mask_length'];
-        $anonymizeIP["info"] = PluginsManager::getInstance()->getLoadedPlugin(self::ANONYMIZE_IP_PLUGIN_NAME)->getInformation();
+        $anonymizeIP["info"] = \Piwik\PluginsManager::getInstance()->getLoadedPlugin(self::ANONYMIZE_IP_PLUGIN_NAME)->getInformation();
 
         return $anonymizeIP;
     }
@@ -241,7 +242,7 @@ class Piwik_PrivacyManager_Controller extends Piwik_Controller_Admin
         if (!empty($scheduleTimetable) && ($scheduleTimetable - time() > 0)) {
             $nextPossibleSchedule = (int)$scheduleTimetable;
         } else {
-            $date = Piwik_Date::factory("today");
+            $date = Date::factory("today");
             $nextPossibleSchedule = $date->addDay(1)->getTimestamp();
         }
 
@@ -250,11 +251,11 @@ class Piwik_PrivacyManager_Controller extends Piwik_Controller_Admin
             $deleteDataInfos["lastRun"] = false;
 
             //next run ASAP (with next schedule run)
-            $date = Piwik_Date::factory("today");
+            $date = Date::factory("today");
             $deleteDataInfos["nextScheduleTime"] = $nextPossibleSchedule;
         } else {
             $deleteDataInfos["lastRun"] = $optionTable;
-            $deleteDataInfos["lastRunPretty"] = Piwik_Date::factory((int)$optionTable)->getLocalized('%day% %shortMonth% %longYear%');
+            $deleteDataInfos["lastRunPretty"] = Date::factory((int)$optionTable)->getLocalized('%day% %shortMonth% %longYear%');
 
             //Calculate next run based on last run + interval
             $nextScheduleRun = (int)($deleteDataInfos["lastRun"] + $deleteDataInfos["config"]["delete_logs_schedule_lowest_interval"] * 24 * 60 * 60);
@@ -276,9 +277,9 @@ class Piwik_PrivacyManager_Controller extends Piwik_Controller_Admin
     {
         $pluginController = new Piwik_CorePluginsAdmin_Controller();
 
-        if ($state == 1 && !PluginsManager::getInstance()->isPluginActivated(self::ANONYMIZE_IP_PLUGIN_NAME)) {
+        if ($state == 1 && !\Piwik\PluginsManager::getInstance()->isPluginActivated(self::ANONYMIZE_IP_PLUGIN_NAME)) {
             $pluginController->activate($redirectAfter = false);
-        } elseif ($state == 0 && PluginsManager::getInstance()->isPluginActivated(self::ANONYMIZE_IP_PLUGIN_NAME)) {
+        } elseif ($state == 0 && \Piwik\PluginsManager::getInstance()->isPluginActivated(self::ANONYMIZE_IP_PLUGIN_NAME)) {
             $pluginController->deactivate($redirectAfter = false);
         } else {
             //nothing to do
diff --git a/plugins/PrivacyManager/LogDataPurger.php b/plugins/PrivacyManager/LogDataPurger.php
index ac899a6ce4d6a8a6a6f46ded2369f586ac1a2292..6d7a06b951e3d6df5773417c583593f04408d33f 100755
--- a/plugins/PrivacyManager/LogDataPurger.php
+++ b/plugins/PrivacyManager/LogDataPurger.php
@@ -10,6 +10,7 @@
  */
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
 
 /**
  * Purges the log_visit, log_conversion and related tables of old visit data.
@@ -155,7 +156,7 @@ class Piwik_PrivacyManager_LogDataPurger
         }
 
         // select highest idvisit to delete from
-        $dateStart = Piwik_Date::factory("today")->subDay($this->deleteLogsOlderThan);
+        $dateStart = Date::factory("today")->subDay($this->deleteLogsOlderThan);
         $sql = "SELECT idvisit
 		          FROM $logVisit
 		         WHERE '" . $dateStart->toString('Y-m-d H:i:s') . "' > visit_last_action_time
diff --git a/plugins/PrivacyManager/PrivacyManager.php b/plugins/PrivacyManager/PrivacyManager.php
index dcbc12814de2fd21cdb1147bb40c0ccc490614af..710232001b1b8e93548ab3195d176ab4b06761c7 100644
--- a/plugins/PrivacyManager/PrivacyManager.php
+++ b/plugins/PrivacyManager/PrivacyManager.php
@@ -12,6 +12,8 @@ use Piwik\Config;
 use Piwik\Metrics;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
+use Piwik\Plugin;
 
 /**
  * @see plugins/PrivacyManager/LogDataPurger.php
@@ -27,7 +29,7 @@ require_once PIWIK_INCLUDE_PATH . '/plugins/PrivacyManager/ReportsPurger.php';
  *
  * @package Piwik_PrivacyManager
  */
-class Piwik_PrivacyManager extends Piwik_Plugin
+class Piwik_PrivacyManager extends Plugin
 {
     const OPTION_LAST_DELETE_PIWIK_LOGS = "lastDelete_piwik_logs";
     const OPTION_LAST_DELETE_PIWIK_REPORTS = 'lastDelete_piwik_reports';
@@ -146,7 +148,7 @@ class Piwik_PrivacyManager extends Piwik_Plugin
      */
     public static function savePurgeDataSettings($settings)
     {
-        $plugin = PluginsManager::getInstance()->getLoadedPlugin('PrivacyManager');
+        $plugin = \Piwik\PluginsManager::getInstance()->getLoadedPlugin('PrivacyManager');
 
         foreach (self::$defaultPurgeDataOptions as $optionName => $defaultValue) {
             if (isset($settings[$optionName])) {
@@ -189,7 +191,7 @@ class Piwik_PrivacyManager extends Piwik_Plugin
         }
 
         // set last run time
-        Piwik_SetOption(self::OPTION_LAST_DELETE_PIWIK_REPORTS, Piwik_Date::factory('today')->getTimestamp());
+        Piwik_SetOption(self::OPTION_LAST_DELETE_PIWIK_REPORTS, Date::factory('today')->getTimestamp());
 
         Piwik_PrivacyManager_ReportsPurger::make($settings, self::getAllMetricsToKeep())->purgeData();
     }
@@ -226,7 +228,7 @@ class Piwik_PrivacyManager extends Piwik_Plugin
          * If deletion / table optimization exceeds execution time, other tasks maybe prevented of being executed
          * every time, when the schedule is triggered.
          */
-        $lastDeleteDate = Piwik_Date::factory("today")->getTimestamp();
+        $lastDeleteDate = Date::factory("today")->getTimestamp();
         Piwik_SetOption(self::OPTION_LAST_DELETE_PIWIK_LOGS, $lastDeleteDate);
 
         // execute the purge
@@ -274,7 +276,7 @@ class Piwik_PrivacyManager extends Piwik_Plugin
      *
      * @param int $reportDateYear The year of the report in question.
      * @param int $reportDateMonth The month of the report in question.
-     * @param int|Piwik_Date $reportsOlderThan If an int, the number of months a report must be older than
+     * @param int|Date $reportsOlderThan If an int, the number of months a report must be older than
      *                                         in order to be purged. If a date, the date a report must be
      *                                         older than in order to be purged.
      * @return bool
@@ -293,8 +295,8 @@ class Piwik_PrivacyManager extends Piwik_Plugin
         }
 
         // if a integer was supplied, assume it is the number of months a report must be older than
-        if (!($reportsOlderThan instanceof Piwik_Date)) {
-            $reportsOlderThan = Piwik_Date::factory('today')->subMonth(1 + $reportsOlderThan);
+        if (!($reportsOlderThan instanceof Date)) {
+            $reportsOlderThan = Date::factory('today')->subMonth(1 + $reportsOlderThan);
         }
 
         return Piwik_PrivacyManager_ReportsPurger::shouldReportBePurged(
diff --git a/plugins/PrivacyManager/ReportsPurger.php b/plugins/PrivacyManager/ReportsPurger.php
index db4e5cafe3073c95527e6ab0362c1a83c3211e87..a8ed8c3bfa3aee3e0baf09e84253ed24631820c0 100755
--- a/plugins/PrivacyManager/ReportsPurger.php
+++ b/plugins/PrivacyManager/ReportsPurger.php
@@ -8,7 +8,9 @@
  * @category Piwik_Plugins
  * @package Piwik_PrivacyManager
  */
+use Piwik\DataAccess\ArchiveTableCreator;
 use Piwik\Piwik;
+use Piwik\Date;
 
 /**
  * Purges archived reports and metrics that are considered old.
@@ -203,21 +205,21 @@ class Piwik_PrivacyManager_ReportsPurger
         // get month for which reports as old or older than, should be deleted
         // reports whose creation date <= this month will be deleted
         // (NOTE: we ignore how far we are in the current month)
-        $toRemoveDate = Piwik_Date::factory('today')->subMonth(1 + $this->deleteReportsOlderThan);
+        $toRemoveDate = Date::factory('today')->subMonth(1 + $this->deleteReportsOlderThan);
 
         // find all archive tables that are older than N months
         $oldNumericTables = array();
         $oldBlobTables = array();
         foreach (Piwik::getTablesInstalled() as $table) {
-            $type = Piwik_DataAccess_ArchiveTableCreator::getTypeFromTableName($table);
+            $type = ArchiveTableCreator::getTypeFromTableName($table);
             if($type === false) {
                 continue;
             }
-            $date = Piwik_DataAccess_ArchiveTableCreator::getDateFromTableName($table);
+            $date = ArchiveTableCreator::getDateFromTableName($table);
             list($year, $month) = explode('_', $date);
 
             if (self::shouldReportBePurged($year, $month, $toRemoveDate)) {
-                if ($type == Piwik_DataAccess_ArchiveTableCreator::NUMERIC_TABLE) {
+                if ($type == ArchiveTableCreator::NUMERIC_TABLE) {
                     $oldNumericTables[] = $table;
                 } else {
                     $oldBlobTables[] = $table;
@@ -233,7 +235,7 @@ class Piwik_PrivacyManager_ReportsPurger
      *
      * @param int $reportDateYear The year of the report in question.
      * @param int $reportDateMonth The month of the report in question.
-     * @param Piwik_Date $toRemoveDate The date a report must be older than in order to be purged.
+     * @param Date $toRemoveDate The date a report must be older than in order to be purged.
      * @return bool
      */
     public static function shouldReportBePurged($reportDateYear, $reportDateMonth, $toRemoveDate)
@@ -285,7 +287,7 @@ class Piwik_PrivacyManager_ReportsPurger
             // if not keeping segments make sure segments w/ kept periods are also deleted
             if (!$this->keepSegmentReports) {
                 $this->findSegmentArchives($oldNumericTables);
-                $archiveIds = $this->segmentArchiveIds[Piwik_DataAccess_ArchiveTableCreator::getDateFromTableName($table)];
+                $archiveIds = $this->segmentArchiveIds[ArchiveTableCreator::getDateFromTableName($table)];
 
                 if (!empty($archiveIds)) {
                     $where .= " OR idarchive IN (" . implode(',', $archiveIds) . ")";
@@ -308,7 +310,7 @@ class Piwik_PrivacyManager_ReportsPurger
         }
 
         foreach ($numericTables as $table) {
-            $tableDate = Piwik_DataAccess_ArchiveTableCreator::getDateFromTableName($table);
+            $tableDate = ArchiveTableCreator::getDateFromTableName($table);
 
             $maxIdArchive = Piwik_FetchOne("SELECT MAX(idarchive) FROM $table");
 
diff --git a/plugins/Provider/Archiver.php b/plugins/Provider/Archiver.php
index ce782f9342194236399bfa46093578a3b5863bc2..bd9a4fa456aacc7e76c8fd46359d04c225bd45a7 100644
--- a/plugins/Provider/Archiver.php
+++ b/plugins/Provider/Archiver.php
@@ -9,8 +9,9 @@
  * @package Piwik_Provider
  */
 use Piwik\Metrics;
+use Piwik\PluginsArchiver;
 
-class Piwik_Provider_Archiver extends Piwik_PluginsArchiver
+class Piwik_Provider_Archiver extends PluginsArchiver
 {
     const PROVIDER_RECORD_NAME = 'Provider_hostnameExt';
     const PROVIDER_FIELD = "location_provider";
diff --git a/plugins/Provider/Provider.php b/plugins/Provider/Provider.php
index ca7c05ae8d0723bfa74688fe3345475e2eae4289..fe448e7395fd2a957d978e60242341eead0d0ba5 100644
--- a/plugins/Provider/Provider.php
+++ b/plugins/Provider/Provider.php
@@ -9,12 +9,14 @@
  * @package Piwik_Provider
  */
 use Piwik\Common;
+use Piwik\Plugin;
+use Piwik\ArchiveProcessor;
 
 /**
  *
  * @package Piwik_Provider
  */
-class Piwik_Provider extends Piwik_Plugin
+class Piwik_Provider extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
@@ -192,7 +194,7 @@ class Piwik_Provider extends Piwik_Plugin
     /**
      * Daily archive: processes the report Visits by Provider
      */
-    public function archiveDay(Piwik_ArchiveProcessor_Day $archiveProcessor)
+    public function archiveDay(ArchiveProcessor\Day $archiveProcessor)
     {
         $archiving = new Piwik_Provider_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
@@ -200,7 +202,7 @@ class Piwik_Provider extends Piwik_Plugin
         }
     }
 
-    public function archivePeriod(Piwik_ArchiveProcessor_Period $archiveProcessor)
+    public function archivePeriod(ArchiveProcessor\Period $archiveProcessor)
     {
         $archiving = new Piwik_Provider_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
diff --git a/plugins/Provider/functions.php b/plugins/Provider/functions.php
index a09ec1ab366fe1f2b72978ae7eab074180896833..540060db4b110be61844747e774768bd7ccb4b93 100644
--- a/plugins/Provider/functions.php
+++ b/plugins/Provider/functions.php
@@ -9,6 +9,7 @@
  * @package Piwik_Provider
  */
 use Piwik\Common;
+use Piwik\DataTable;
 
 /**
  * Return hostname portion of a domain name
@@ -38,7 +39,7 @@ function Piwik_getHostnameName($in)
  */
 function Piwik_getHostnameUrl($in)
 {
-    if ($in == Piwik_DataTable::LABEL_SUMMARY_ROW) {
+    if ($in == DataTable::LABEL_SUMMARY_ROW) {
         return false;
     }
     if (empty($in)
diff --git a/plugins/Proxy/Controller.php b/plugins/Proxy/Controller.php
index f7f71bb8a8abf717a31cbb4802663dff3bf322d8..9f49505e9708a3f68592259945a5661df1b3b9fd 100644
--- a/plugins/Proxy/Controller.php
+++ b/plugins/Proxy/Controller.php
@@ -20,73 +20,6 @@ class Piwik_Proxy_Controller extends Piwik_Controller
 {
     const TRANSPARENT_PNG_PIXEL = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=';
 
-    /**
-     * Display the "Export Image" window.
-     *
-     * @deprecated 1.5.1
-     *
-     * @internal param string $imageData Base-64 encoded image data (via $_POST)
-     */
-    static public function exportImageWindow()
-    {
-        Piwik::checkUserHasSomeViewAccess();
-
-        $view = new Piwik_View('@Proxy/exportImageWindow');
-        $view->imageData = 'data:image/png;base64,' . Common::getRequestVar('imageData', self::TRANSPARENT_PNG_PIXEL, 'string', $_POST);
-        echo $view->render();
-    }
-
-    function exportImage()
-    {
-        self::exportImageWindow();
-    }
-
-    /**
-     * Output binary image from base-64 encoded data.
-     *
-     * @deprecated 1.5.1
-     *
-     * @internal param string $imageData Base-64 encoded image data (via $_POST)
-     */
-    static public function outputBinaryImage()
-    {
-        Piwik::checkUserHasSomeViewAccess();
-
-        $rawData = Common::getRequestVar('imageData', '', 'string', $_POST);
-
-        // returns false if any illegal characters in input
-        $data = base64_decode($rawData);
-        if ($data !== false) {
-            // check for PNG header
-            if (Common::substr($data, 0, 8) === "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a") {
-                header('Content-Type: image/png');
-
-                // more robust validation (if available)
-                if (function_exists('imagecreatefromstring')) {
-                    // validate image data
-                    $imgResource = @imagecreatefromstring($data);
-                    if ($imgResource !== false) {
-                        // output image and clean-up
-                        imagepng($imgResource);
-                        imagedestroy($imgResource);
-                        exit;
-                    }
-                } else {
-                    echo $data;
-                    exit;
-                }
-            }
-        }
-
-        Piwik::setHttpStatus('400 Bad Request');
-        exit;
-    }
-
-    function outputImage()
-    {
-        self::outputBinaryImage();
-    }
-
     /**
      * Output the merged CSS file.
      * This method is called when the asset manager is enabled.
diff --git a/plugins/Proxy/Proxy.php b/plugins/Proxy/Proxy.php
index c66921541161b4d01eee643e868a84e294404468..fc404bfd2e532f61a8373f73646ef799d18758fd 100644
--- a/plugins/Proxy/Proxy.php
+++ b/plugins/Proxy/Proxy.php
@@ -8,13 +8,14 @@
  * @category Piwik_Plugins
  * @package Piwik_Proxy
  */
+use Piwik\Plugin;
 
 /**
  * Proxy services for the UI
  *
  * @package Piwik_Proxy
  */
-class Piwik_Proxy extends Piwik_Plugin
+class Piwik_Proxy extends Plugin
 {
     /**
      * Return information about this plugin.
diff --git a/plugins/Proxy/templates/exportImageWindow.twig b/plugins/Proxy/templates/exportImageWindow.twig
deleted file mode 100644
index 0145a6589f64bc2ff115c5aa51f876e9c936cd51..0000000000000000000000000000000000000000
--- a/plugins/Proxy/templates/exportImageWindow.twig
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <meta charset="utf-8">
-    <title>{{ 'General_ExportAsImage_js'|translate }}</title>
-</head>
-<body>
-<img title="Piwik Graph" src="{{ imageData }}"/><br/><br/>
-
-<p>{{ 'General_SaveImageOnYourComputer_js'|translate }}</p>
-</body>
-</html>
diff --git a/plugins/Referers/API.php b/plugins/Referers/API.php
index 16168b532a239568445eae584aa826791d9e4f62..a8dba84e0dc1392ccb4601cd3cacf8b4fc38bdb2 100644
--- a/plugins/Referers/API.php
+++ b/plugins/Referers/API.php
@@ -9,9 +9,12 @@
  * @package Piwik_Referers
  */
 use Piwik\Archive;
+use Piwik\DataTable\Row;
 use Piwik\Metrics;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
+use Piwik\DataTable;
 
 /**
  * The Referrers API lets you access reports about Websites, Search engines, Keywords, Campaigns used to access your website.
@@ -39,11 +42,11 @@ class Piwik_Referers_API
      * @param string $name
      * @param int $idSite
      * @param string $period
-     * @param Piwik_Date $date
+     * @param Date $date
      * @param string $segment
      * @param bool $expanded
      * @param int|null $idSubtable
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     protected function getDataTable($name, $idSite, $period, $date, $segment, $expanded = false, $idSubtable = null)
     {
@@ -71,7 +74,7 @@ class Piwik_Referers_API
      *                        subtable ID. The result when using this parameter will be the
      *                        specific report for the given referrer type.
      * @param bool $expanded Whether to get report w/ subtables loaded or not.
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function  getRefererType($idSite, $period, $date, $segment = false, $typeReferer = false,
                                    $idSubtable = false, $expanded = false)
@@ -108,7 +111,7 @@ class Piwik_Referers_API
 
         // set subtable IDs for each row to the label (which holds the int referrer type)
         // NOTE: not yet possible to do this w/ DataTable_Array instances
-        if (!($dataTable instanceof Piwik_DataTable_Array)) {
+        if (!($dataTable instanceof DataTable\Map)) {
             $this->setGetReferrerTypeSubtables($dataTable, $idSite, $period, $date, $segment, $expanded);
         }
 
@@ -125,7 +128,7 @@ class Piwik_Referers_API
     {
         $dataTable = $this->getRefererType($idSite, $period, $date, $segment, $typeReferer = false, $idSubtable = false, $expanded = true);
 
-        if ($dataTable instanceof Piwik_DataTable_Array) {
+        if ($dataTable instanceof DataTable\Map) {
             throw new Exception("Referrers.getAll with multiple sites or dates is not supported (yet).");
         }
 
@@ -190,11 +193,11 @@ class Piwik_Referers_API
     }
 
     /**
-     * @param Piwik_Datatable $table
+     * @param DataTable $table
      */
     private function filterOutKeywordNotDefined($table)
     {
-        if ($table instanceof Piwik_Datatable) {
+        if ($table instanceof DataTable) {
             $row = $table->getRowIdFromLabel('');
             if ($row) {
                 $table->deleteRow($row);
@@ -212,7 +215,7 @@ class Piwik_Referers_API
         $table = $response->getResponse($table);
 
         // If period=lastX we only keep the first resultset as we want to return a plain list
-        if ($table instanceof Piwik_DataTable_Array) {
+        if ($table instanceof DataTable\Map) {
             $tables = $table->getArray();
             $table = current($tables);
         }
@@ -253,7 +256,7 @@ class Piwik_Referers_API
         $searchEngines = $this->getSearchEngines($idSite, $period, $date, $segment);
         $searchEngines->applyQueuedFilters();
 
-        if ($searchEngines instanceof Piwik_DataTable_Array) {
+        if ($searchEngines instanceof DataTable\Map) {
             $dataTables = $searchEngines->getArray();
 
             // find first datatable containing data
@@ -313,7 +316,7 @@ class Piwik_Referers_API
      * @param string $date
      * @param string|bool $segment
      * @param bool $expanded
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getSocials($idSite, $period, $date, $segment = false, $expanded = false)
     {
@@ -346,7 +349,7 @@ class Piwik_Referers_API
      *                              is the array index of an item in the /core/DataFiles/Socials.php file.
      *                              The urls are filtered by the social network at this index.
      *                              If false, no filtering is done and every social URL is returned.
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getUrlsForSocial($idSite, $period, $date, $segment = false, $idSubtable = false)
     {
@@ -420,11 +423,11 @@ class Piwik_Referers_API
      * Removes idsubdatatable_in_db metadata from a DataTable. Used by Social tables since
      * they use fake subtable IDs.
      *
-     * @param Piwik_DataTable $dataTable
+     * @param DataTable $dataTable
      */
     private function removeSubtableMetadata($dataTable)
     {
-        if ($dataTable instanceof Piwik_DataTable_Array) {
+        if ($dataTable instanceof DataTable\Map) {
             foreach ($dataTable->getArray() as $childTable) {
                 $this->removeSubtableMetadata($childTable);
             }
@@ -440,11 +443,11 @@ class Piwik_Referers_API
      *
      * The IDs are int indexes into the array in /core/DataFiles/Socials.php.
      *
-     * @param Piwik_DataTable $dataTable
+     * @param DataTable $dataTable
      */
     private function setSocialIdSubtables($dataTable)
     {
-        if ($dataTable instanceof Piwik_DataTable_Array) {
+        if ($dataTable instanceof DataTable\Map) {
             foreach ($dataTable->getArray() as $childTable) {
                 $this->setSocialIdSubtables($childTable);
             }
@@ -455,7 +458,7 @@ class Piwik_Referers_API
                 $i = 1; // start at one because idSubtable=0 is equivalent to idSubtable=false
                 foreach ($GLOBALS['Piwik_socialUrl'] as $domain => $name) {
                     if ($name == $socialName) {
-                        $row->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] = $i;
+                        $row->c[Row::DATATABLE_ASSOCIATED] = $i;
                         break;
                     }
 
@@ -471,12 +474,12 @@ class Piwik_Referers_API
      * the grandchildren of the report will be the original report, and it will
      * recurse when trying to get a flat report).
      *
-     * @param Piwik_DataTable $table
-     * @return Piwik_DataTable Returns $table for convenience.
+     * @param DataTable $table
+     * @return DataTable Returns $table for convenience.
      */
     private function removeSubtableIds($table)
     {
-        if ($table instanceof Piwik_DataTable_Array) {
+        if ($table instanceof DataTable\Map) {
             foreach ($table->getArray() as $childTable) {
                 $this->removeSubtableIds($childTable);
             }
@@ -498,7 +501,7 @@ class Piwik_Referers_API
      * If we are getting an expanded datatable, the datatable for the row's referrer
      * type is loaded and attached to the appropriate row in the getRefererType report.
      *
-     * @param Piwik_DataTable $dataTable
+     * @param DataTable $dataTable
      * @param string $idSite
      * @param string $period
      * @param string $date
@@ -512,7 +515,7 @@ class Piwik_Referers_API
             if ($typeReferrer != Common::REFERER_TYPE_DIRECT_ENTRY) {
                 if (!$expanded) // if we don't want the expanded datatable, then don't do any extra queries
                 {
-                    $row->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] = $typeReferrer;
+                    $row->c[Row::DATATABLE_ASSOCIATED] = $typeReferrer;
                 } else // otherwise, we have to get the othe datatables
                 {
                     $subtable = $this->getRefererType($idSite, $period, $date, $segment, $type = false,
diff --git a/plugins/Referers/Archiver.php b/plugins/Referers/Archiver.php
index 7c7b484f024af97feef4475817ea357f738db2ef..dd7a795e9ebebb2360db61bb9eab326788caf82d 100644
--- a/plugins/Referers/Archiver.php
+++ b/plugins/Referers/Archiver.php
@@ -2,6 +2,7 @@
 use Piwik\Common;
 use Piwik\Config;
 use Piwik\Metrics;
+use Piwik\PluginsArchiver;
 
 /**
  * Piwik - Open source web analytics
@@ -13,7 +14,7 @@ use Piwik\Metrics;
  * @package Piwik_Referers
  */
 
-class Piwik_Referers_Archiver extends Piwik_PluginsArchiver
+class Piwik_Referers_Archiver extends PluginsArchiver
 {
     const SEARCH_ENGINES_RECORD_NAME = 'Referers_keywordBySearchEngine';
     const KEYWORDS_RECORD_NAME = 'Referers_searchEngineByKeyword';
diff --git a/plugins/Referers/Controller.php b/plugins/Referers/Controller.php
index 06f2c1ca712e1567844548d63766b2c2a056fee0..97d920e175b61944bf1eebc9b4e70bf94e98908f 100644
--- a/plugins/Referers/Controller.php
+++ b/plugins/Referers/Controller.php
@@ -9,7 +9,7 @@
  * @package Piwik_Referers
  */
 use Piwik\Metrics;
-use Piwik\Period_Range;
+use Piwik\Period\Range;
 use Piwik\Piwik;
 use Piwik\Common;
 
@@ -51,7 +51,7 @@ class Piwik_Referers_Controller extends Piwik_Controller
         }
 
         // calculate evolution for visit metrics & distinct metrics
-        list($lastPeriodDate, $ignore) = Period_Range::getLastDate();
+        list($lastPeriodDate, $ignore) = Range::getLastDate();
         if ($lastPeriodDate !== false) {
             $date = Common::getRequestVar('date');
             $period = Common::getRequestVar('period');
diff --git a/plugins/Referers/Referers.php b/plugins/Referers/Referers.php
index c96ca7927da48f0995762a8d0543d6f12c5e32e2..449bc0ce416906629add77745b37585d106680b9 100644
--- a/plugins/Referers/Referers.php
+++ b/plugins/Referers/Referers.php
@@ -8,7 +8,9 @@
  * @category Piwik_Plugins
  * @package Piwik_Referers
  */
+use Piwik\ArchiveProcessor;
 use Piwik\Piwik;
+use Piwik\Plugin;
 
 /**
  * @see plugins/Referers/functions.php
@@ -18,7 +20,7 @@ require_once PIWIK_INCLUDE_PATH . '/plugins/Referers/functions.php';
 /**
  * @package Piwik_Referers
  */
-class Piwik_Referers extends Piwik_Plugin
+class Piwik_Referers extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
@@ -267,7 +269,7 @@ class Piwik_Referers extends Piwik_Plugin
     /**
      * Hooks on daily archive to trigger various log processing
      */
-    public function archiveDay(Piwik_ArchiveProcessor_Day $archiveProcessor)
+    public function archiveDay(ArchiveProcessor\Day $archiveProcessor)
     {
         $archiving = new Piwik_Referers_Archiver($archiveProcessor);
         if ($archiving->shouldArchive()) {
@@ -279,7 +281,7 @@ class Piwik_Referers extends Piwik_Plugin
      * Period archiving: sums up daily stats and sums report tables,
      * making sure that tables are still truncated.
      */
-    public function archivePeriod(Piwik_ArchiveProcessor_Period $archiveProcessor)
+    public function archivePeriod(ArchiveProcessor\Period $archiveProcessor)
     {
         $archiving = new Piwik_Referers_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
diff --git a/plugins/SEO/API.php b/plugins/SEO/API.php
index b7826f30d564f1d42469cb1f9abf193e2a79e7ed..185561df444fbdeed9c07ea565411ab059429e5c 100644
--- a/plugins/SEO/API.php
+++ b/plugins/SEO/API.php
@@ -9,6 +9,7 @@
  * @package Piwik_SEO
  */
 use Piwik\Piwik;
+use Piwik\DataTable;
 
 /**
  * @see plugins/Referers/functions.php
@@ -40,7 +41,7 @@ class Piwik_SEO_API
      * Returns SEO statistics for a URL.
      *
      * @param string $url URL to request SEO stats for
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getRank($url)
     {
@@ -101,6 +102,6 @@ class Piwik_SEO_API
             $data[Piwik_Translate('SEO_Dmoz')] = $dmozRank;
         }
 
-        return Piwik_DataTable::makeFromIndexedArray($data);
+        return DataTable::makeFromIndexedArray($data);
     }
 }
diff --git a/plugins/SEO/Controller.php b/plugins/SEO/Controller.php
index b33aac898630c3d89f8faa78132ae450de2d3d55..b509264871a0d31fffbc582cde73be42bbb333be 100644
--- a/plugins/SEO/Controller.php
+++ b/plugins/SEO/Controller.php
@@ -9,6 +9,7 @@
  * @package Piwik_SEO
  */
 use Piwik\Common;
+use Piwik\DataTable\Renderer;
 use Piwik\Site;
 
 /**
@@ -36,7 +37,7 @@ class Piwik_SEO_Controller extends Piwik_Controller
         $view = new Piwik_View('@SEO/getRank');
         $view->urlToRank = Piwik_SEO_RankChecker::extractDomainFromUrl($url);
 
-        $renderer = Piwik_DataTable_Renderer::factory('php');
+        $renderer = Renderer::factory('php');
         $renderer->setSerialize(false);
         $view->ranks = $renderer->render($dataTable);
         echo $view->render();
diff --git a/plugins/SEO/SEO.php b/plugins/SEO/SEO.php
index 4ff22fdabb14bb860855f0ea6ec54afb9033319f..e41c93385c5d7396e761e5cacfe93149ff80d513 100644
--- a/plugins/SEO/SEO.php
+++ b/plugins/SEO/SEO.php
@@ -8,11 +8,12 @@
  * @category Piwik_Plugins
  * @package Piwik_SEO
  */
+use Piwik\Plugin;
 
 /**
  * @package Piwik_SEO
  */
-class Piwik_SEO extends Piwik_Plugin
+class Piwik_SEO extends Plugin
 {
     /**
      * @see Piwik_Plugin::getInformation
diff --git a/plugins/SecurityInfo/PhpSecInfo/Test/Core/upload_tmp_dir.php b/plugins/SecurityInfo/PhpSecInfo/Test/Core/upload_tmp_dir.php
index 4a83e0f7cd9bc5668cb528aa7f4cbbbca7bc13da..588b5f096f986b6138fdbbaec187d272fe105a34 100644
--- a/plugins/SecurityInfo/PhpSecInfo/Test/Core/upload_tmp_dir.php
+++ b/plugins/SecurityInfo/PhpSecInfo/Test/Core/upload_tmp_dir.php
@@ -45,7 +45,7 @@ class PhpSecInfo_Test_Core_Upload_Tmp_Dir extends PhpSecInfo_Test_Core
      * We are disabling this function on Windows OSes right now until
      * we can be certain of the proper way to check world-readability
      *
-     * @return unknown
+     * @return bool
      */
     function isTestable()
     {
diff --git a/plugins/SecurityInfo/SecurityInfo.php b/plugins/SecurityInfo/SecurityInfo.php
index ecd8d2e5f6de75c2fd61df4c53fca9aa71c94c74..785247d2a26a0546f4e78d43a7e13b3d408ba1f6 100644
--- a/plugins/SecurityInfo/SecurityInfo.php
+++ b/plugins/SecurityInfo/SecurityInfo.php
@@ -9,12 +9,13 @@
  * @package Piwik_SecurityInfo
  */
 use Piwik\Piwik;
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_SecurityInfo
  */
-class Piwik_SecurityInfo extends Piwik_Plugin
+class Piwik_SecurityInfo extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
diff --git a/plugins/SegmentEditor/API.php b/plugins/SegmentEditor/API.php
index 855affb5e6875e81f61ae463bdac8fe00d8beb7d..884c206e78e13167280fa275bd6b629858d9b9be 100644
--- a/plugins/SegmentEditor/API.php
+++ b/plugins/SegmentEditor/API.php
@@ -10,6 +10,7 @@
  */
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
 use Piwik\Segment;
 
 /**
@@ -142,9 +143,9 @@ class Piwik_SegmentEditor_API
     /**
      * Modifies an existing stored segment.
      *
-     * @param $idSegment The ID of the stored segment to modify.
-     * @param $name  The new name of the segment.
-     * @param $definition  The new definition of the segment.
+     * @param int $idSegment The ID of the stored segment to modify.
+     * @param string $name  The new name of the segment.
+     * @param string $definition  The new definition of the segment.
      * @param bool $idSite  If supplied, associates the stored segment with as single site.
      * @param bool $autoArchive Whether to automatically archive data with the segment or not.
      * @param bool $enabledAllUsers Whether the stored segment is viewable by all users or just the one that created it.
@@ -168,7 +169,7 @@ class Piwik_SegmentEditor_API
             'enable_all_users'   => $enabledAllUsers,
             'enable_only_idsite' => $idSite,
             'auto_archive'       => $autoArchive,
-            'ts_last_edit'       => Piwik_Date::now()->getDatetime(),
+            'ts_last_edit'       => Date::now()->getDatetime(),
         );
 
         $db = Zend_Registry::get('db');
@@ -182,8 +183,8 @@ class Piwik_SegmentEditor_API
     /**
      * Adds a new stored segment.
      *
-     * @param $name  The new name of the segment.
-     * @param $definition  The new definition of the segment.
+     * @param string $name  The new name of the segment.
+     * @param string $definition  The new definition of the segment.
      * @param bool $idSite  If supplied, associates the stored segment with as single site.
      * @param bool $autoArchive Whether to automatically archive data with the segment or not.
      * @param bool $enabledAllUsers Whether the stored segment is viewable by all users or just the one that created it.
@@ -207,7 +208,7 @@ class Piwik_SegmentEditor_API
             'enable_all_users'   => $enabledAllUsers,
             'enable_only_idsite' => $idSite,
             'auto_archive'       => $autoArchive,
-            'ts_created'         => Piwik_Date::now()->getDatetime(),
+            'ts_created'         => Date::now()->getDatetime(),
             'deleted'            => 0,
         );
         $db->insert(Common::prefixTable("segment"), $bind);
diff --git a/plugins/SegmentEditor/SegmentEditor.php b/plugins/SegmentEditor/SegmentEditor.php
index 94eefc117d9b0ddfb24f93f8ac131aace8e06714..a4f54d01e75367da999dfb93683cfd1e70c090b2 100644
--- a/plugins/SegmentEditor/SegmentEditor.php
+++ b/plugins/SegmentEditor/SegmentEditor.php
@@ -9,11 +9,12 @@
  * @package Piwik_SegmentEditor
  */
 use Piwik\Common;
+use Piwik\Plugin;
 
 /**
  * @package Piwik_SegmentEditor
  */
-class Piwik_SegmentEditor extends Piwik_Plugin
+class Piwik_SegmentEditor extends Plugin
 {
     /**
      * @see Piwik_Plugin::getInformation
diff --git a/plugins/SitesManager/API.php b/plugins/SitesManager/API.php
index c9a12e710cf3d6384dcfa8eec2a31b48aae77e9a..edc66625e69e302e042d389635158683aa163533 100644
--- a/plugins/SitesManager/API.php
+++ b/plugins/SitesManager/API.php
@@ -11,6 +11,7 @@
 use Piwik\Piwik;
 use Piwik\Common;
 use Piwik\Access;
+use Piwik\Date;
 use Piwik\Site;
 
 /**
@@ -223,7 +224,7 @@ class Piwik_SitesManager_API
 
         if (empty($timestamp)) $timestamp = time();
 
-        $time = Piwik_Date::factory((int)$timestamp)->getDatetime();
+        $time = Date::factory((int)$timestamp)->getDatetime();
         $result = Piwik_FetchAll("
             SELECT
                 idsite
@@ -236,7 +237,7 @@ class Piwik_SitesManager_API
                 AND visit_last_action_time > ?
                 AND visit_last_action_time <= ?
                 LIMIT 1)
-        ", array($time, $now = Piwik_Date::now()->addHour(1)->getDatetime()));
+        ", array($time, $now = Date::now()->addHour(1)->getDatetime()));
         $idSites = array();
         foreach ($result as $idSite) {
             $idSites[] = $idSite['idsite'];
@@ -516,8 +517,8 @@ class Piwik_SitesManager_API
         $bind['sitesearch_keyword_parameters'] = $searchKeywordParameters;
         $bind['sitesearch_category_parameters'] = $searchCategoryParameters;
         $bind['ts_created'] = !is_null($startDate)
-            ? Piwik_Date::factory($startDate)->getDatetime()
-            : Piwik_Date::now()->getDatetime();
+            ? Date::factory($startDate)->getDatetime()
+            : Date::now()->getDatetime();
 
         if (!empty($group)
             && Piwik::isUserIsSuperUser()
@@ -692,7 +693,7 @@ class Piwik_SitesManager_API
      * Sets IPs to be excluded from all websites. IPs can contain wildcards.
      * Will also apply to websites created in the future.
      *
-     * @param string Comma separated list of IPs to exclude from being tracked (allows wildcards)
+     * @param string $excludedIps Comma separated list of IPs to exclude from being tracked (allows wildcards)
      * @return bool
      */
     public function setGlobalExcludedIps($excludedIps)
@@ -853,7 +854,7 @@ class Piwik_SitesManager_API
      * Sets list of URL query parameters to be excluded on all websites.
      * Will also apply to websites created in the future.
      *
-     * @param string Comma separated list of URL query parameters to exclude from URLs
+     * @param string $excludedQueryParameters Comma separated list of URL query parameters to exclude from URLs
      * @return bool
      */
     public function setGlobalExcludedQueryParameters($excludedQueryParameters)
@@ -1015,7 +1016,7 @@ class Piwik_SitesManager_API
             $bind['ecommerce'] = (int)(bool)$ecommerce;
         }
         if (!is_null($startDate)) {
-            $bind['ts_created'] = Piwik_Date::factory($startDate)->getDatetime();
+            $bind['ts_created'] = Date::factory($startDate)->getDatetime();
         }
         $bind['excluded_ips'] = $this->checkAndReturnExcludedIps($excludedIps);
         $bind['excluded_parameters'] = $this->checkAndReturnCommaSeparatedStringList($excludedQueryParameters);
diff --git a/plugins/SitesManager/Controller.php b/plugins/SitesManager/Controller.php
index d5dd1c8be0f6345177d23c2128cd35e2660ded20..afbd9d21ed54bc9e788bd2d68826f2dce9a7e9bf 100644
--- a/plugins/SitesManager/Controller.php
+++ b/plugins/SitesManager/Controller.php
@@ -8,8 +8,10 @@
  * @category Piwik_Plugins
  * @package Piwik_SitesManager
  */
+use Piwik\DataTable\Renderer\Json;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
 use Piwik\Site;
 
 /**
@@ -51,7 +53,7 @@ class Piwik_SitesManager_Controller extends Piwik_Controller_Admin
         $view->currencies = Common::json_encode(Piwik_SitesManager_API::getInstance()->getCurrencyList());
         $view->defaultCurrency = Piwik_SitesManager_API::getInstance()->getDefaultCurrency();
 
-        $view->utcTime = Piwik_Date::now()->getDatetime();
+        $view->utcTime = Date::now()->getDatetime();
         $excludedIpsGlobal = Piwik_SitesManager_API::getInstance()->getExcludedIpsGlobal();
         $view->globalExcludedIps = str_replace(',', "\n", $excludedIpsGlobal);
         $excludedQueryParametersGlobal = Piwik_SitesManager_API::getInstance()->getExcludedQueryParametersGlobal();
@@ -62,7 +64,7 @@ class Piwik_SitesManager_Controller extends Piwik_Controller_Admin
 
         $view->globalSearchKeywordParameters = Piwik_SitesManager_API::getInstance()->getSearchKeywordParametersGlobal();
         $view->globalSearchCategoryParameters = Piwik_SitesManager_API::getInstance()->getSearchCategoryParametersGlobal();
-        $view->isSearchCategoryTrackingEnabled = PluginsManager::getInstance()->isPluginActivated('CustomVariables');
+        $view->isSearchCategoryTrackingEnabled = \Piwik\PluginsManager::getInstance()->isPluginActivated('CustomVariables');
         $view->allowSiteSpecificUserAgentExclude =
             Piwik_SitesManager_API::getInstance()->isSiteSpecificUserAgentExcludeEnabled();
 
@@ -187,7 +189,7 @@ class Piwik_SitesManager_Controller extends Piwik_Controller_Admin
             }
         }
 
-        Piwik_DataTable_Renderer_Json::sendHeaderJSON();
+        Json::sendHeaderJSON();
         print Common::json_encode($results);
     }
 }
diff --git a/plugins/SitesManager/SitesManager.php b/plugins/SitesManager/SitesManager.php
index 8fbad87b008dcfebdd84a1c740d39b53740e2f46..7b21bbafd1b079bcee78780f5ef36934c0b91a9c 100644
--- a/plugins/SitesManager/SitesManager.php
+++ b/plugins/SitesManager/SitesManager.php
@@ -9,12 +9,13 @@
  * @package Piwik_SitesManager
  */
 use Piwik\Piwik;
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_SitesManager
  */
-class Piwik_SitesManager extends Piwik_Plugin
+class Piwik_SitesManager extends Plugin
 {
     const KEEP_URL_FRAGMENT_USE_DEFAULT = 0;
     const KEEP_URL_FRAGMENT_YES = 1;
diff --git a/plugins/Transitions/API.php b/plugins/Transitions/API.php
index fe84b328cb7d5c91525159400901fed450ffc8d7..ac04dac368f8570034d517939f577f5e76a3de57 100644
--- a/plugins/Transitions/API.php
+++ b/plugins/Transitions/API.php
@@ -8,10 +8,17 @@
  * @category Piwik_Plugins
  * @package Piwik_Transitions
  */
+
+use Piwik\ArchiveProcessor;
+use Piwik\DataAccess\LogAggregator;
+use Piwik\DataTable\Manager;
+use Piwik\DataTable\Row;
 use Piwik\Metrics;
 use Piwik\Period;
+use Piwik\Period\Day;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\DataTable;
 use Piwik\Segment;
 use Piwik\SegmentExpression;
 use Piwik\Site;
@@ -72,11 +79,11 @@ class Piwik_Transitions_API
         $segment = new Segment($segment, $idSite);
         $site = new Site($idSite);
         $period = Period::advancedFactory($period, $date);
-        $archiveProcessor = new Piwik_ArchiveProcessor_Day($period, $site, $segment);
+        $archiveProcessor = new ArchiveProcessor\Day($period, $site, $segment);
         $logAggregator = $archiveProcessor->getLogAggregator();
         // prepare the report
         $report = array(
-            'date' => Piwik_Period_Day::advancedFactory($period->getLabel(), $date)->getLocalizedShortString()
+            'date' => Day::advancedFactory($period->getLabel(), $date)->getLocalizedShortString()
         );
 
         // add data to the report
@@ -167,7 +174,7 @@ class Piwik_Transitions_API
      * Add the internal referrers to the report:
      * previous pages and previous site searches
      *
-     * @param Piwik_DataAccess_LogAggregator $logAggregator
+     * @param LogAggregator $logAggregator
      * @param $report
      * @param $idaction
      * @param string $actionType
@@ -193,7 +200,7 @@ class Piwik_Transitions_API
      * Add the following actions to the report:
      * following pages, downloads, outlinks
      *
-     * @param Piwik_DataAccess_LogAggregator $logAggregator
+     * @param LogAggregator $logAggregator
      * @param $report
      * @param $idaction
      * @param string $actionType
@@ -218,12 +225,12 @@ class Piwik_Transitions_API
      *
      * @param $idaction
      * @param $actionType
-     * @param Piwik_DataAccess_LogAggregator  $logAggregator
+     * @param LogAggregator  $logAggregator
      * @param $limitBeforeGrouping
      * @param $includeLoops
-     * @return array(followingPages:Piwik_DataTable, outlinks:Piwik_DataTable, downloads:Piwik_DataTable)
+     * @return array(followingPages:DataTable, outlinks:DataTable, downloads:DataTable)
      */
-    public function queryFollowingActions($idaction, $actionType, Piwik_DataAccess_LogAggregator $logAggregator,
+    public function queryFollowingActions($idaction, $actionType, LogAggregator $logAggregator,
                                           $limitBeforeGrouping = false, $includeLoops = false)
     {
         $types = array();
@@ -296,12 +303,12 @@ class Piwik_Transitions_API
         $this->totalTransitionsToFollowingActions = 0;
         $dataTables = array();
         foreach ($types as $type => $recordName) {
-            $dataTable = new Piwik_DataTable;
+            $dataTable = new DataTable;
             if (isset($data[$type])) {
                 foreach ($data[$type] as &$record) {
                     $actions = intval($record[Metrics::INDEX_NB_ACTIONS]);
-                    $dataTable->addRow(new Piwik_DataTable_Row(array(
-                                                                    Piwik_DataTable_Row::COLUMNS => array(
+                    $dataTable->addRow(new Row(array(
+                                                                    Row::COLUMNS => array(
                                                                         'label'                         => $this->getPageLabel($record, $isTitle),
                                                                         Metrics::INDEX_NB_ACTIONS => $actions
                                                                     )
@@ -330,9 +337,9 @@ class Piwik_Transitions_API
      *
      * @param $idaction
      * @param $actionType
-     * @param Piwik_ArchiveProcessor_Day $logAggregator
+     * @param Day $logAggregator
      * @param $limitBeforeGrouping
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function queryExternalReferrers($idaction, $actionType, $logAggregator, $limitBeforeGrouping = false)
     {
@@ -395,7 +402,7 @@ class Piwik_Transitions_API
 
         //FIXMEA refactor after integration tests written
         $array = new Piwik_DataArray($referrerData, $referrerSubData);
-        return Piwik_ArchiveProcessor_Day::getDataTableFromDataArray($array);
+        return Day::getDataTableFromDataArray($array);
     }
 
     /**
@@ -403,9 +410,9 @@ class Piwik_Transitions_API
      *
      * @param $idaction
      * @param $actionType
-     * @param Piwik_ArchiveProcessor_Day $logAggregator
+     * @param Day $logAggregator
      * @param $limitBeforeGrouping
-     * @return array(previousPages:Piwik_DataTable, loops:integer)
+     * @return array(previousPages:DataTable, loops:integer)
      */
     protected function queryInternalReferrers($idaction, $actionType, $logAggregator, $limitBeforeGrouping = false)
     {
@@ -451,12 +458,12 @@ class Piwik_Transitions_API
 
         $loops = 0;
         $nbPageviews = 0;
-        $previousPagesDataTable = new Piwik_DataTable;
+        $previousPagesDataTable = new DataTable;
         if (isset($data['result'][1])) {
             foreach ($data['result'][1] as &$page) {
                 $nbActions = intval($page[Metrics::INDEX_NB_ACTIONS]);
-                $previousPagesDataTable->addRow(new Piwik_DataTable_Row(array(
-                                                                             Piwik_DataTable_Row::COLUMNS => array(
+                $previousPagesDataTable->addRow(new Row(array(
+                                                                             Row::COLUMNS => array(
                                                                                  'label'                         => $this->getPageLabel($page, $isTitle),
                                                                                  Metrics::INDEX_NB_ACTIONS => $nbActions
                                                                              )
@@ -465,12 +472,12 @@ class Piwik_Transitions_API
             }
         }
 
-        $previousSearchesDataTable = new Piwik_DataTable;
+        $previousSearchesDataTable = new DataTable;
         if (isset($data['result'][2])) {
             foreach ($data['result'][2] as &$search) {
                 $nbActions = intval($search[Metrics::INDEX_NB_ACTIONS]);
-                $previousSearchesDataTable->addRow(new Piwik_DataTable_Row(array(
-                                                                                Piwik_DataTable_Row::COLUMNS => array(
+                $previousSearchesDataTable->addRow(new Row(array(
+                                                                                Row::COLUMNS => array(
                                                                                     'label'                         => $search['name'],
                                                                                     Metrics::INDEX_NB_ACTIONS => $nbActions
                                                                                 )
@@ -542,7 +549,7 @@ class Piwik_Transitions_API
      * Add the external referrers to the report:
      * direct entries, websites, campaigns, search engines
      *
-     * @param Piwik_DataAccess_LogAggregator  $logAggregator
+     * @param LogAggregator  $logAggregator
      * @param $report
      * @param $idaction
      * @param string $actionType
@@ -563,7 +570,7 @@ class Piwik_Transitions_API
                 // load details (i.e. subtables)
                 $details = array();
                 if ($idSubTable = $row->getIdSubDataTable()) {
-                    $subTable = Piwik_DataTable_Manager::getInstance()->getTable($idSubTable);
+                    $subTable = Manager::getInstance()->getTable($idSubTable);
                     foreach ($subTable->getRows() as $subRow) {
                         $details[] = array(
                             'label'     => $subRow->getColumn('label'),
diff --git a/plugins/Transitions/Transitions.php b/plugins/Transitions/Transitions.php
index 90d1ff2839cbda82029b0ce40da8efaf47c958e2..b47db2e436e5d48610effc752524899ace668b90 100644
--- a/plugins/Transitions/Transitions.php
+++ b/plugins/Transitions/Transitions.php
@@ -8,11 +8,12 @@
  * @category Piwik_Plugins
  * @package Piwik_Transitions
  */
+use Piwik\Plugin;
 
 /**
  * @package Piwik_Transitions
  */
-class Piwik_Transitions extends Piwik_Plugin
+class Piwik_Transitions extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
diff --git a/plugins/UserCountry/API.php b/plugins/UserCountry/API.php
index 79aaf191c57d1c05c57b3db3374c44f8e3c96be9..113a1dc6c549c95a708a183ace7784f2eaa45ad2 100644
--- a/plugins/UserCountry/API.php
+++ b/plugins/UserCountry/API.php
@@ -11,6 +11,7 @@
 use Piwik\Archive;
 use Piwik\Metrics;
 use Piwik\Piwik;
+use Piwik\DataTable;
 
 /**
  * @see plugins/UserCountry/functions.php
@@ -67,7 +68,7 @@ class Piwik_UserCountry_API
      * @param string $period
      * @param string $date
      * @param string|bool $segment
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getRegion($idSite, $period, $date, $segment = false)
     {
@@ -109,7 +110,7 @@ class Piwik_UserCountry_API
      * @param string $period
      * @param string $date
      * @param string|bool $segment
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getCity($idSite, $period, $date, $segment = false)
     {
diff --git a/plugins/UserCountry/Archiver.php b/plugins/UserCountry/Archiver.php
index 4667e38474426171dad792f14b7f9e7ee127af84..129da79557cf7bbd035cf021aba46d82496f7c72 100644
--- a/plugins/UserCountry/Archiver.php
+++ b/plugins/UserCountry/Archiver.php
@@ -9,9 +9,12 @@
  * @package Piwik_UserCountry
  */
 
+use Piwik\ArchiveProcessor\Day;
 use Piwik\Metrics;
+use Piwik\DataTable;
+use Piwik\PluginsArchiver;
 
-class Piwik_UserCountry_Archiver extends Piwik_PluginsArchiver
+class Piwik_UserCountry_Archiver extends PluginsArchiver
 {
     const COUNTRY_RECORD_NAME = 'UserCountry_country';
     const REGION_RECORD_NAME = 'UserCountry_region';
@@ -124,15 +127,15 @@ class Piwik_UserCountry_Archiver extends Piwik_PluginsArchiver
 
     protected function recordDayReports()
     {
-        $tableCountry = Piwik_ArchiveProcessor_Day::getDataTableFromDataArray($this->arrays[self::COUNTRY_FIELD]);
+        $tableCountry = Day::getDataTableFromDataArray($this->arrays[self::COUNTRY_FIELD]);
         $this->getProcessor()->insertBlobRecord(self::COUNTRY_RECORD_NAME, $tableCountry->getSerialized());
         $this->getProcessor()->insertNumericRecord(self::DISTINCT_COUNTRIES_METRIC, $tableCountry->getRowsCount());
 
-        $tableRegion = Piwik_ArchiveProcessor_Day::getDataTableFromDataArray($this->arrays[self::REGION_FIELD]);
+        $tableRegion = Day::getDataTableFromDataArray($this->arrays[self::REGION_FIELD]);
         $serialized = $tableRegion->getSerialized($this->maximumRows, $this->maximumRows, Metrics::INDEX_NB_VISITS);
         $this->getProcessor()->insertBlobRecord(self::REGION_RECORD_NAME, $serialized);
 
-        $tableCity = Piwik_ArchiveProcessor_Day::getDataTableFromDataArray($this->arrays[self::CITY_FIELD]);
+        $tableCity = Day::getDataTableFromDataArray($this->arrays[self::CITY_FIELD]);
         $this->setLatitudeLongitude($tableCity);
         $serialized = $tableCity->getSerialized($this->maximumRows, $this->maximumRows, Metrics::INDEX_NB_VISITS);
         $this->getProcessor()->insertBlobRecord(self::CITY_RECORD_NAME, $serialized);
@@ -142,7 +145,7 @@ class Piwik_UserCountry_Archiver extends Piwik_PluginsArchiver
      * Utility method, appends latitude/longitude pairs to city table labels, if that data
      * exists for the city.
      */
-    private function setLatitudeLongitude(Piwik_DataTable $tableCity)
+    private function setLatitudeLongitude(DataTable $tableCity)
     {
         foreach ($tableCity->getRows() as $row) {
             $label = $row->getColumn('label');
diff --git a/plugins/UserCountry/Controller.php b/plugins/UserCountry/Controller.php
index bda89e927bec1ffe0a38baff03cacb2b4e7487a8..9c547ee6dcf8da505da257003a8d2cbe7562b5f6 100644
--- a/plugins/UserCountry/Controller.php
+++ b/plugins/UserCountry/Controller.php
@@ -8,6 +8,7 @@
  * @category Piwik_Plugins
  * @package Piwik_UserCountry
  */
+use Piwik\DataTable\Renderer\Json;
 use Piwik\Piwik;
 use Piwik\Common;
 
@@ -98,7 +99,7 @@ class Piwik_UserCountry_Controller extends Piwik_Controller_Admin
         Piwik::checkUserIsSuperUser();
         if ($_SERVER["REQUEST_METHOD"] == "POST") {
             $this->checkTokenInUrl();
-            Piwik_DataTable_Renderer_Json::sendHeaderJSON();
+            Json::sendHeaderJSON();
             $outputPath = Piwik_UserCountry_LocationProvider_GeoIp::getPathForGeoIpDatabase('GeoIPCity.dat') . '.gz';
             try {
                 $result = Piwik_Http::downloadChunk(
@@ -180,7 +181,7 @@ class Piwik_UserCountry_Controller extends Piwik_Controller_Admin
     {
         Piwik::checkUserIsSuperUser();
         if ($_SERVER["REQUEST_METHOD"] == "POST") {
-            Piwik_DataTable_Renderer_Json::sendHeaderJSON();
+            Json::sendHeaderJSON();
             try {
                 $this->checkTokenInUrl();
 
@@ -225,7 +226,7 @@ class Piwik_UserCountry_Controller extends Piwik_Controller_Admin
             try {
                 $this->checkTokenInUrl();
 
-                Piwik_DataTable_Renderer_Json::sendHeaderJSON();
+                Json::sendHeaderJSON();
 
                 // based on the database type (provided by the 'key' query param) determine the
                 // url & output file name
diff --git a/plugins/UserCountry/GeoIPAutoUpdater.php b/plugins/UserCountry/GeoIPAutoUpdater.php
index 051eeb42d4b17ff7198f472f7a26404b4be68d68..dea98daa0f4223b5c400b4e1655e85377bba32c9 100755
--- a/plugins/UserCountry/GeoIPAutoUpdater.php
+++ b/plugins/UserCountry/GeoIPAutoUpdater.php
@@ -10,6 +10,7 @@
  */
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
 
 /**
  * Used to automatically update installed GeoIP databases, and manages the updater's
@@ -48,7 +49,7 @@ class Piwik_UserCountry_GeoIPAutoUpdater
     public function update()
     {
         try {
-            Piwik_SetOption(self::LAST_RUN_TIME_OPTION_NAME, Piwik_Date::factory('today')->getTimestamp());
+            Piwik_SetOption(self::LAST_RUN_TIME_OPTION_NAME, Date::factory('today')->getTimestamp());
 
             $locUrl = Piwik_GetOption(self::LOC_URL_OPTION_NAME);
             if (!empty($locUrl)) {
@@ -570,11 +571,11 @@ class Piwik_UserCountry_GeoIPAutoUpdater
     /**
      * Returns the time the auto updater was last run.
      *
-     * @return Piwik_Date|false
+     * @return Date|false
      */
     public static function getLastRunTime()
     {
         $timestamp = Piwik_GetOption(self::LAST_RUN_TIME_OPTION_NAME);
-        return $timestamp === false ? false : Piwik_Date::factory((int)$timestamp);
+        return $timestamp === false ? false : Date::factory((int)$timestamp);
     }
 }
diff --git a/plugins/UserCountry/LocationProvider/GeoIp/ServerBased.php b/plugins/UserCountry/LocationProvider/GeoIp/ServerBased.php
index a26217bac20199265769b4700a340b3ae207f555..382ee9a3196888bbb95ef8dac4dca69edca528e5 100755
--- a/plugins/UserCountry/LocationProvider/GeoIp/ServerBased.php
+++ b/plugins/UserCountry/LocationProvider/GeoIp/ServerBased.php
@@ -9,6 +9,8 @@
  * @package Piwik_UserCountry
  */
 
+use Piwik\Common;
+
 /**
  * A LocationProvider that uses an GeoIP module installed in an HTTP Server.
  *
diff --git a/plugins/UserCountry/UserCountry.php b/plugins/UserCountry/UserCountry.php
index d6e673e69739fba09dd51ab0277e4e92db5463d1..72c7cbda9b599290ca4d93372e8e2a9c0447c188 100644
--- a/plugins/UserCountry/UserCountry.php
+++ b/plugins/UserCountry/UserCountry.php
@@ -8,8 +8,10 @@
  * @category Piwik_Plugins
  * @package Piwik_UserCountry
  */
-use Piwik\Piwik;
+use Piwik\ArchiveProcessor;
 use Piwik\Common;
+use Piwik\Piwik;
+use Piwik\Plugin;
 
 /**
  * @see plugins/UserCountry/GeoIPAutoUpdater.php
@@ -20,7 +22,7 @@ require_once PIWIK_INCLUDE_PATH . '/plugins/UserCountry/GeoIPAutoUpdater.php';
  *
  * @package Piwik_UserCountry
  */
-class Piwik_UserCountry extends Piwik_Plugin
+class Piwik_UserCountry extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
@@ -244,7 +246,7 @@ class Piwik_UserCountry extends Piwik_Plugin
                                                ));
     }
 
-    public function archivePeriod(Piwik_ArchiveProcessor_Period $archiveProcessor)
+    public function archivePeriod(ArchiveProcessor\Period $archiveProcessor)
     {
         $archiving = new Piwik_UserCountry_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
@@ -252,7 +254,7 @@ class Piwik_UserCountry extends Piwik_Plugin
         }
     }
 
-    public function archiveDay(Piwik_ArchiveProcessor_Day $archiveProcessor)
+    public function archiveDay(ArchiveProcessor\Day $archiveProcessor)
     {
         $archiving = new Piwik_UserCountry_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
diff --git a/plugins/UserCountry/functions.php b/plugins/UserCountry/functions.php
index 9db8a85d788696efca76630a5163f8df5ae7b91c..35919cdf2dad9f757160521123dd0bb0813a7d60 100644
--- a/plugins/UserCountry/functions.php
+++ b/plugins/UserCountry/functions.php
@@ -8,6 +8,7 @@
  * @category Piwik_Plugins
  * @package Piwik_UserCountry
  */
+use Piwik\DataTable;
 
 /**
  * Return the flag image path for a given country
@@ -67,7 +68,7 @@ function Piwik_CountryTranslate($label)
  */
 function Piwik_UserCountry_getElementFromStringArray($label, $separator, $index, $emptyValue = false)
 {
-    if ($label == Piwik_DataTable::LABEL_SUMMARY_ROW) {
+    if ($label == DataTable::LABEL_SUMMARY_ROW) {
         return false; // so no metadata/column is added
     }
 
@@ -80,11 +81,11 @@ function Piwik_UserCountry_getElementFromStringArray($label, $separator, $index,
  *
  * @param string $label A label containing a region code followed by '|' and a country code, eg,
  *                      'P3|GB'.
- * @return string|false The region name or false if $label == Piwik_DataTable::LABEL_SUMMARY_ROW.
+ * @return string|false The region name or false if $label == DataTable::LABEL_SUMMARY_ROW.
  */
 function Piwik_UserCountry_getRegionName($label)
 {
-    if ($label == Piwik_DataTable::LABEL_SUMMARY_ROW) {
+    if ($label == DataTable::LABEL_SUMMARY_ROW) {
         return false; // so no metadata/column is added
     }
 
@@ -102,11 +103,11 @@ function Piwik_UserCountry_getRegionName($label)
  *
  * @param string $label A label containing a region code followed by '|' and a country code, eg,
  *                      'P3|GB'.
- * @return string|false eg. 'Ile de France, France' or false if $label == Piwik_DataTable::LABEL_SUMMARY_ROW.
+ * @return string|false eg. 'Ile de France, France' or false if $label == DataTable::LABEL_SUMMARY_ROW.
  */
 function Piwik_UserCountry_getPrettyRegionName($label)
 {
-    if ($label == Piwik_DataTable::LABEL_SUMMARY_ROW) {
+    if ($label == DataTable::LABEL_SUMMARY_ROW) {
         return $label;
     }
 
@@ -130,11 +131,11 @@ function Piwik_UserCountry_getPrettyRegionName($label)
  * @param string $label A label containing a city name, region code + country code,
  *                      separated by two '|' chars: 'Paris|A8|FR'
  * @return string|false eg. 'Paris, Ile de France, France' or false if $label ==
- *                      Piwik_DataTable::LABEL_SUMMARY_ROW.
+ *                      DataTable::LABEL_SUMMARY_ROW.
  */
 function Piwik_UserCountry_getPrettyCityName($label)
 {
-    if ($label == Piwik_DataTable::LABEL_SUMMARY_ROW) {
+    if ($label == DataTable::LABEL_SUMMARY_ROW) {
         return $label;
     }
 
diff --git a/plugins/UserCountryMap/Controller.php b/plugins/UserCountryMap/Controller.php
index 50b2986ae16710f2248bc646a2bc1828a22fb691..f9f52e8233ceaa88f168977471a865d200569391 100644
--- a/plugins/UserCountryMap/Controller.php
+++ b/plugins/UserCountryMap/Controller.php
@@ -11,6 +11,7 @@
 use Piwik\Piwik;
 use Piwik\Common;
 use Piwik\Site;
+use Piwik\Config;
 
 /**
  *
@@ -163,7 +164,7 @@ class Piwik_UserCountryMap_Controller extends Piwik_Controller
 
     private function checkUserCountryPluginEnabled()
     {
-        if (!PluginsManager::getInstance()->isPluginActivated('UserCountry')) {
+        if (!\Piwik\PluginsManager::getInstance()->isPluginActivated('UserCountry')) {
             throw new Exception(Piwik_Translate('General_Required', 'Plugin UserCountry'));
         }
     }
diff --git a/plugins/UserCountryMap/UserCountryMap.php b/plugins/UserCountryMap/UserCountryMap.php
index 0b3d3298f4890eef88e40a982ce50b1c9a5a5d68..1659288d1c8f01405f76383f24bf60b5a5702915 100644
--- a/plugins/UserCountryMap/UserCountryMap.php
+++ b/plugins/UserCountryMap/UserCountryMap.php
@@ -8,12 +8,13 @@
  * @category Piwik_Plugins
  * @package Piwik_UserCountryMap
  */
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_UserCountryMap
  */
-class Piwik_UserCountryMap extends Piwik_Plugin
+class Piwik_UserCountryMap extends Plugin
 {
     /**
      * @see Piwik_Plugin::getInformation
diff --git a/plugins/UserSettings/API.php b/plugins/UserSettings/API.php
index 7a9f5b6dda45e8ec64dbedf7a76ee18b3a5cfaba..c1c5535c1cb18d3569078fec59b5cd85fcfa2b71 100644
--- a/plugins/UserSettings/API.php
+++ b/plugins/UserSettings/API.php
@@ -11,6 +11,7 @@
 use Piwik\Archive;
 use Piwik\Metrics;
 use Piwik\Piwik;
+use Piwik\DataTable;
 
 /**
  * @see plugins/UserSettings/functions.php
@@ -111,7 +112,7 @@ class Piwik_UserSettings_API
         );
 
         $dataTables = array($dataTable);
-        if ($dataTable instanceof Piwik_DataTable_Array) {
+        if ($dataTable instanceof DataTable\Map) {
             $dataTables = $dataTable->getArray();
         }
         foreach ($dataTables AS $table) {
@@ -180,7 +181,7 @@ class Piwik_UserSettings_API
         $visitsSums = $archive->getDataTableFromNumeric('nb_visits');
 
         // check whether given tables are arrays
-        if ($dataTable instanceof Piwik_DataTable_Array) {
+        if ($dataTable instanceof DataTable\Map) {
             $tableArray = $dataTable->getArray();
             $browserTypesArray = $browserTypes->getArray();
             $visitSumsArray = $visitsSums->getArray();
diff --git a/plugins/UserSettings/Archiver.php b/plugins/UserSettings/Archiver.php
index 0c53938257a147b33a82780e57982b7604ce1677..40f6b94eb37abdec9087e3ccc3733e5d1b6b9936 100644
--- a/plugins/UserSettings/Archiver.php
+++ b/plugins/UserSettings/Archiver.php
@@ -10,11 +10,14 @@
  */
 
 use Piwik\Common;
+use Piwik\DataAccess\LogAggregator;
 use Piwik\Metrics;
+use Piwik\DataTable;
+use Piwik\PluginsArchiver;
 
 require_once PIWIK_INCLUDE_PATH . '/plugins/UserSettings/functions.php';
 
-class Piwik_UserSettings_Archiver extends Piwik_PluginsArchiver
+class Piwik_UserSettings_Archiver extends PluginsArchiver
 {
     const LANGUAGE_RECORD_NAME = 'UserSettings_language';
     const PLUGIN_RECORD_NAME = 'UserSettings_plugin';
@@ -69,7 +72,7 @@ class Piwik_UserSettings_Archiver extends Piwik_PluginsArchiver
         return $tableBrowser;
     }
 
-    protected function aggregateByBrowserType(Piwik_DataTable $tableBrowser)
+    protected function aggregateByBrowserType(DataTable $tableBrowser)
     {
         $tableBrowser->filter('GroupBy', array('label', 'Piwik_getBrowserFamily'));
         $this->insertTable(self::BROWSER_TYPE_RECORD_NAME, $tableBrowser);
@@ -90,7 +93,7 @@ class Piwik_UserSettings_Archiver extends Piwik_PluginsArchiver
         return $table;
     }
 
-    protected function aggregateByScreenType(Piwik_DataTable $resolutions)
+    protected function aggregateByScreenType(DataTable $resolutions)
     {
         $resolutions->filter('GroupBy', array('label', 'Piwik_getScreenTypeFromResolution'));
         $this->insertTable(self::SCREEN_TYPE_RECORD_NAME, $resolutions);
@@ -113,8 +116,8 @@ class Piwik_UserSettings_Archiver extends Piwik_PluginsArchiver
 
         $query = $this->getLogAggregator()->queryVisitsByDimension(array(), false, $selects, $metrics = array());
         $data = $query->fetch();
-        $cleanRow = Piwik_DataAccess_LogAggregator::makeArrayOneColumn($data, Metrics::INDEX_NB_VISITS);
-        $table = Piwik_DataTable::makeFromIndexedArray($cleanRow);
+        $cleanRow = LogAggregator::makeArrayOneColumn($data, Metrics::INDEX_NB_VISITS);
+        $table = DataTable::makeFromIndexedArray($cleanRow);
         $this->insertTable(self::PLUGIN_RECORD_NAME, $table);
     }
 
@@ -132,7 +135,7 @@ class Piwik_UserSettings_Archiver extends Piwik_PluginsArchiver
         $this->insertTable(self::LANGUAGE_RECORD_NAME, $tableLanguage);
     }
 
-    protected function insertTable($recordName, Piwik_DataTable $table)
+    protected function insertTable($recordName, DataTable $table)
     {
         return $this->getProcessor()->insertBlobRecord($recordName, $table->getSerialized($this->maximumRows, null, Metrics::INDEX_NB_VISITS));
     }
diff --git a/plugins/UserSettings/UserSettings.php b/plugins/UserSettings/UserSettings.php
index ad0e5d931657b920e88fd5751d8e8cdeba177003..ce5a37f707cda08b80be0b3bb16d25527a12425c 100644
--- a/plugins/UserSettings/UserSettings.php
+++ b/plugins/UserSettings/UserSettings.php
@@ -8,12 +8,14 @@
  * @category Piwik_Plugins
  * @package Piwik_UserSettings
  */
+use Piwik\ArchiveProcessor;
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_UserSettings
  */
-class Piwik_UserSettings extends Piwik_Plugin
+class Piwik_UserSettings extends Plugin
 {
     /**
      * Mapping between the browser family shortcode and the displayed name
@@ -370,7 +372,7 @@ class Piwik_UserSettings extends Piwik_Plugin
      * by Browser, Browser family, etc. Some reports are built from the logs, some reports
      * are superset of an existing report (eg. Browser family is built from the Browser report)
      */
-    public function archiveDay(Piwik_ArchiveProcessor_Day $archiveProcessor)
+    public function archiveDay(ArchiveProcessor\Day $archiveProcessor)
     {
         $archiving = new Piwik_UserSettings_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
@@ -381,7 +383,7 @@ class Piwik_UserSettings extends Piwik_Plugin
     /**
      * Period archiving: simply sums up daily archives
      */
-    public function archivePeriod(Piwik_ArchiveProcessor_Period $archiveProcessor)
+    public function archivePeriod(ArchiveProcessor\Period $archiveProcessor)
     {
         $archiving = new Piwik_UserSettings_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
diff --git a/plugins/UsersManager/API.php b/plugins/UsersManager/API.php
index 2337d76d63ebd67b0259fe246ec3ccd8e347a320..c4c8dc0806cd2b412679c0588fa171d9b2e3516a 100644
--- a/plugins/UsersManager/API.php
+++ b/plugins/UsersManager/API.php
@@ -12,6 +12,7 @@ use Piwik\Config;
 use Piwik\Piwik;
 use Piwik\Common;
 use Piwik\Access;
+use Piwik\Date;
 use Piwik\Site;
 
 /**
@@ -198,7 +199,7 @@ class Piwik_UsersManager_API
      * If a user doesn't have any access to the $idSite ('noaccess'),
      * the user will not be in the returned array.
      *
-     * @param string website ID
+     * @param int website ID
      *
      * @return array    The returned array has the format
      *                    array(
@@ -249,7 +250,7 @@ class Piwik_UsersManager_API
      * this website will not be in the returned array.
      * If the user doesn't have any access, the returned array will be an empty array.
      *
-     * @param string User that has to be valid
+     * @param string $userLogin User that has to be valid
      *
      * @return array    The returned array has the format
      *                    array(
@@ -282,7 +283,7 @@ class Piwik_UsersManager_API
     /**
      * Returns the user information (login, password md5, alias, email, date_registered, etc.)
      *
-     * @param string the user login
+     * @param string $userLogin the user login
      *
      * @return array the user information
      */
@@ -302,7 +303,7 @@ class Piwik_UsersManager_API
     /**
      * Returns the user information (login, password md5, alias, email, date_registered, etc.)
      *
-     * @param string the user email
+     * @param string $userEmail the user email
      *
      * @return array the user information
      */
@@ -385,7 +386,7 @@ class Piwik_UsersManager_API
                                                             'alias'           => $alias,
                                                             'email'           => $email,
                                                             'token_auth'      => $token_auth,
-                                                            'date_registered' => Piwik_Date::now()->getDatetime()
+                                                            'date_registered' => Date::now()->getDatetime()
                                                        )
         );
 
@@ -629,7 +630,7 @@ class Piwik_UsersManager_API
      * Delete a user given its login.
      * The user's access are not deleted.
      *
-     * @param string the user login.
+     * @param string $userLogin the user login.
      *
      */
     private function deleteUserOnly($userLogin)
@@ -645,8 +646,8 @@ class Piwik_UsersManager_API
      * Delete the user access for the given websites.
      * The array of idsite must be either null OR the values must have been checked before for their validity!
      *
-     * @param string the user login
-     * @param array array of idsites on which to delete the access. If null then delete all the access for this user.
+     * @param string $userLogin the user login
+     * @param array $idSites array of idsites on which to delete the access. If null then delete all the access for this user.
      *
      * @return bool true on success
      */
diff --git a/plugins/UsersManager/Controller.php b/plugins/UsersManager/Controller.php
index 29f567757c6e8013f27aadbe4cf87f88cb83acd6..506c6e6accad82bca9cfbbeb63834f8542dce102 100644
--- a/plugins/UsersManager/Controller.php
+++ b/plugins/UsersManager/Controller.php
@@ -10,6 +10,7 @@
  */
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Config;
 use Piwik\Site;
 
 /**
diff --git a/plugins/UsersManager/UsersManager.php b/plugins/UsersManager/UsersManager.php
index 58f585da67bc9eb5df388b5b2d048f620243015d..8d2aeb7a57cc1b47090eb05d5e17768c97790717 100644
--- a/plugins/UsersManager/UsersManager.php
+++ b/plugins/UsersManager/UsersManager.php
@@ -9,13 +9,14 @@
  * @package Piwik_UsersManager
  */
 use Piwik\Piwik;
+use Piwik\Plugin;
 
 /**
  * Manage Piwik users
  *
  * @package Piwik_UsersManager
  */
-class Piwik_UsersManager extends Piwik_Plugin
+class Piwik_UsersManager extends Plugin
 {
     const PASSWORD_MIN_LENGTH = 6;
     const PASSWORD_MAX_LENGTH = 26;
@@ -100,7 +101,7 @@ class Piwik_UsersManager extends Piwik_Plugin
     /**
      * Returns true if the password is complex enough (at least 6 characters and max 26 characters)
      *
-     * @param string email
+     * @param $input string
      * @return bool
      */
     public static function isValidPasswordString($input)
diff --git a/plugins/VisitFrequency/VisitFrequency.php b/plugins/VisitFrequency/VisitFrequency.php
index ee0def21d19c75980a14de3879a253828a98314c..ee5c0ecd2aa8564a326972977f679665c30f68c6 100644
--- a/plugins/VisitFrequency/VisitFrequency.php
+++ b/plugins/VisitFrequency/VisitFrequency.php
@@ -8,12 +8,13 @@
  * @category Piwik_Plugins
  * @package Piwik_VisitFrequency
  */
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_VisitFrequency
  */
-class Piwik_VisitFrequency extends Piwik_Plugin
+class Piwik_VisitFrequency extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
diff --git a/plugins/VisitTime/API.php b/plugins/VisitTime/API.php
index 9075c6553298e34509818f9defbdecdd44f686d3..186c378f8344a5975c2773b81d274914764c3eb2 100644
--- a/plugins/VisitTime/API.php
+++ b/plugins/VisitTime/API.php
@@ -12,6 +12,8 @@ use Piwik\Archive;
 use Piwik\Metrics;
 use Piwik\Period;
 use Piwik\Piwik;
+use Piwik\Date;
+use Piwik\DataTable;
 use Piwik\Site;
 
 /**
@@ -64,7 +66,7 @@ class Piwik_VisitTime_API
      * @param string $date The start date of the period. Cannot refer to multiple dates.
      * @param bool|string $segment The segment.
      * @throws Exception
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     public function getByDayOfWeek($idSite, $period, $date, $segment = false)
     {
@@ -105,7 +107,7 @@ class Piwik_VisitTime_API
         foreach (array(1, 2, 3, 4, 5, 6, 7) as $day) {
             $rows[] = array('label' => $day, 'nb_visits' => 0);
         }
-        $result = new Piwik_DataTable();
+        $result = new DataTable();
         $result->addRowsFromSimpleArray($rows);
         $result->addDataTable($dataTable);
 
@@ -128,9 +130,9 @@ class Piwik_VisitTime_API
 
         if ($period == 'day'
             && ($date == 'today'
-                || $date == Piwik_Date::factory('now', $site->getTimezone())->toString())
+                || $date == Date::factory('now', $site->getTimezone())->toString())
         ) {
-            $currentHour = Piwik_Date::factory('now', $site->getTimezone())->toString('G');
+            $currentHour = Date::factory('now', $site->getTimezone())->toString('G');
             // If no data for today, this is an exception to the API output rule, as we normally return nothing:
             // we shall return all hours of the day, with nb_visits = 0
             if ($table->getRowsCount() == 0) {
@@ -160,7 +162,7 @@ function Piwik_getTimeLabel($label)
 
 /**
  * Returns the day of the week for a date string, without creating a new
- * Piwik_Date instance.
+ * Date instance.
  *
  * @param string $dateStr
  * @return int The day of the week (1-7)
diff --git a/plugins/VisitTime/Archiver.php b/plugins/VisitTime/Archiver.php
index b695ba45583854095b188a00e2937d57d50ac98c..fd6c1dcc8b233bf551e64e590740813e9ac4df2a 100644
--- a/plugins/VisitTime/Archiver.php
+++ b/plugins/VisitTime/Archiver.php
@@ -9,7 +9,10 @@
  * @package Piwik_VisitTime
  */
 
-class Piwik_VisitTime_Archiver extends Piwik_PluginsArchiver
+use Piwik\Date;
+use Piwik\PluginsArchiver;
+
+class Piwik_VisitTime_Archiver extends PluginsArchiver
 {
     const SERVER_TIME_RECORD_NAME = 'VisitTime_serverTime';
     const LOCAL_TIME_RECORD_NAME = 'VisitTime_localTime';
@@ -46,13 +49,13 @@ class Piwik_VisitTime_Archiver extends Piwik_PluginsArchiver
 
     protected function convertTimeToLocalTimezone(Piwik_DataArray &$array)
     {
-        $date = Piwik_Date::factory($this->getProcessor()->getDateStart()->getDateStartUTC())->toString();
+        $date = Date::factory($this->getProcessor()->getDateStart()->getDateStartUTC())->toString();
         $timezone = $this->getProcessor()->getSite()->getTimezone();
 
         $converted = array();
         foreach ($array->getDataArray() as $hour => $stats) {
             $datetime = $date . ' ' . $hour . ':00:00';
-            $hourInTz = (int)Piwik_Date::factory($datetime, $timezone)->toString('H');
+            $hourInTz = (int)Date::factory($datetime, $timezone)->toString('H');
             $converted[$hourInTz] = $stats;
         }
         return new Piwik_DataArray($converted);
diff --git a/plugins/VisitTime/VisitTime.php b/plugins/VisitTime/VisitTime.php
index abd69f78099523ecb7ee3ec360b6ff4a7eed4754..4d73dd8ae0bed9945c8906c4da03fb44f9c445d0 100644
--- a/plugins/VisitTime/VisitTime.php
+++ b/plugins/VisitTime/VisitTime.php
@@ -8,15 +8,17 @@
  * @category Piwik_Plugins
  * @package Piwik_VisitTime
  */
+use Piwik\ArchiveProcessor;
 use Piwik\Common;
 use Piwik\Period;
+use Piwik\Plugin;
 use Piwik\Site;
 
 /**
  *
  * @package Piwik_VisitTime
  */
-class Piwik_VisitTime extends Piwik_Plugin
+class Piwik_VisitTime extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
@@ -167,7 +169,7 @@ class Piwik_VisitTime extends Piwik_Plugin
         }
     }
 
-    public function archivePeriod(Piwik_ArchiveProcessor_Period $archiveProcessor)
+    public function archivePeriod(ArchiveProcessor\Period $archiveProcessor)
     {
         $archiving = new Piwik_VisitTime_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
@@ -176,7 +178,7 @@ class Piwik_VisitTime extends Piwik_Plugin
     }
 
 
-    public function archiveDay(Piwik_ArchiveProcessor_Day $archiveProcessor)
+    public function archiveDay(ArchiveProcessor\Day $archiveProcessor)
     {
         $archiving = new Piwik_VisitTime_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
diff --git a/plugins/VisitorGenerator/Controller.php b/plugins/VisitorGenerator/Controller.php
index de621bc6ea2ff6e94c3e04a6fc3bd2caf408b4c4..1a4f9facd049cee7a485a2fdbf26eb39d33a2c56 100644
--- a/plugins/VisitorGenerator/Controller.php
+++ b/plugins/VisitorGenerator/Controller.php
@@ -8,8 +8,10 @@
  * @category Piwik_Plugins
  * @package Piwik_VisitorGenerator
  */
+use Piwik\ArchiveProcessor\Rules;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
 use Piwik\Site;
 
 /**
@@ -78,7 +80,7 @@ class Piwik_VisitorGenerator_Controller extends Piwik_Controller_Admin
         $api = Piwik_CoreAdminHome_API::getInstance();
         $api->invalidateArchivedReports($idSite, implode($dates, ","));
 
-        $browserArchiving = Piwik_ArchiveProcessor_Rules::isBrowserTriggerEnabled();
+        $browserArchiving = Rules::isBrowserTriggerEnabled();
 
         // Init view
         $view = new Piwik_View('@VisitorGenerator/generate');
@@ -126,7 +128,7 @@ class Piwik_VisitorGenerator_Controller extends Piwik_Controller_Admin
 
             $start = strpos($url, 'piwik.php?') + strlen('piwik.php?');
             $url = substr($url, $start, strrpos($url, " ") - $start);
-            $datetime = $date . " " . Piwik_Date::factory($time)->toString("H:i:s");
+            $datetime = $date . " " . Date::factory($time)->toString("H:i:s");
             $ip = strlen($ip) < 10 ? "13.5.111.3" : $ip;
 
             // Force date/ip & authenticate
diff --git a/plugins/VisitorGenerator/VisitorGenerator.php b/plugins/VisitorGenerator/VisitorGenerator.php
index 7423f3a900fe29a0730d5865c68fcd06f3d03276..9ad4fa3d669f25916e30069fe52a4441f2305b3f 100644
--- a/plugins/VisitorGenerator/VisitorGenerator.php
+++ b/plugins/VisitorGenerator/VisitorGenerator.php
@@ -9,12 +9,13 @@
  * @package Piwik_VisitorGenerator
  */
 use Piwik\Piwik;
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_VisitorGenerator
  */
-class Piwik_VisitorGenerator extends Piwik_Plugin
+class Piwik_VisitorGenerator extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
diff --git a/plugins/VisitorInterest/API.php b/plugins/VisitorInterest/API.php
index f93abbcb34cb24a3c1ef07aef322b258b68f54f1..55474318db96fe1c14700aed3e8c15c48bcd28f3 100644
--- a/plugins/VisitorInterest/API.php
+++ b/plugins/VisitorInterest/API.php
@@ -11,6 +11,7 @@
 use Piwik\Archive;
 use Piwik\Metrics;
 use Piwik\Piwik;
+use Piwik\DataTable;
 
 /**
  * VisitorInterest API lets you access two Visitor Engagement reports: number of visits per number of pages,
@@ -68,7 +69,7 @@ class Piwik_VisitorInterest_API
      * @param string $period The period type.
      * @param string $date The date type.
      * @param string|bool $segment The segment.
-     * @return Piwik_DataTable the archived report data.
+     * @return DataTable the archived report data.
      */
     public function getNumberOfVisitsByDaysSinceLast($idSite, $period, $date, $segment = false)
     {
@@ -89,7 +90,7 @@ class Piwik_VisitorInterest_API
      * @param string $period The period type.
      * @param string $date The date type.
      * @param string|bool $segment The segment.
-     * @return Piwik_DataTable the archived report data.
+     * @return DataTable the archived report data.
      */
     public function getNumberOfVisitsByVisitCount($idSite, $period, $date, $segment = false)
     {
@@ -110,11 +111,11 @@ class Piwik_VisitorInterest_API
      * regardless of whether the data table is an data table array or just
      * a data table.
      *
-     * @param Piwik_DataTable $dataTable The data table to modify.
+     * @param DataTable $dataTable The data table to modify.
      */
     private static function addVisitsPercentColumn($dataTable)
     {
-        if ($dataTable instanceof Piwik_DataTable_Array) {
+        if ($dataTable instanceof DataTable\Map) {
             foreach ($dataTable->getArray() as $table) {
                 self::addVisitsPercentColumn($table);
             }
diff --git a/plugins/VisitorInterest/Archiver.php b/plugins/VisitorInterest/Archiver.php
index 4c38bf1a7f02a126f6a221c2646ceee8100db4a6..18449cbf4cdeb0a80ac3dcbe8b9edd2ff1570e54 100644
--- a/plugins/VisitorInterest/Archiver.php
+++ b/plugins/VisitorInterest/Archiver.php
@@ -9,9 +9,12 @@
  * @package Piwik_VisitorInterest
  */
 
+use Piwik\DataAccess\LogAggregator;
 use Piwik\Metrics;
+use Piwik\DataTable;
+use Piwik\PluginsArchiver;
 
-class Piwik_VisitorInterest_Archiver extends Piwik_PluginsArchiver
+class Piwik_VisitorInterest_Archiver extends PluginsArchiver
 {
     // third element is unit (s for seconds, default is munutes)
     const TIME_SPENT_RECORD_NAME = 'VisitorInterest_timeGap';
@@ -103,14 +106,14 @@ class Piwik_VisitorInterest_Archiver extends Piwik_PluginsArchiver
         );
         $selects = array();
         foreach($aggregatesMetadata as $aggregateMetadata) {
-            $selectsFromRangedColumn = Piwik_DataAccess_LogAggregator::getSelectsFromRangedColumn($aggregateMetadata);
+            $selectsFromRangedColumn = LogAggregator::getSelectsFromRangedColumn($aggregateMetadata);
             $selects = array_merge( $selects, $selectsFromRangedColumn);
         }
         $query = $this->getLogAggregator()->queryVisitsByDimension(array(), $where = false, $selects, array());
         $row = $query->fetch();
         foreach($prefixes as $recordName => $selectAsPrefix) {
-            $cleanRow = Piwik_DataAccess_LogAggregator::makeArrayOneColumn($row, Metrics::INDEX_NB_VISITS, $selectAsPrefix);
-            $dataTable = Piwik_DataTable::makeFromIndexedArray($cleanRow);
+            $cleanRow = LogAggregator::makeArrayOneColumn($row, Metrics::INDEX_NB_VISITS, $selectAsPrefix);
+            $dataTable = DataTable::makeFromIndexedArray($cleanRow);
             $this->getProcessor()->insertBlobRecord($recordName, $dataTable->getSerialized());
         }
     }
diff --git a/plugins/VisitorInterest/VisitorInterest.php b/plugins/VisitorInterest/VisitorInterest.php
index 10231517e1013226cd003efa83348e9ed789cd55..a503253e1cffe783327d630196d3f37c791e87a5 100644
--- a/plugins/VisitorInterest/VisitorInterest.php
+++ b/plugins/VisitorInterest/VisitorInterest.php
@@ -8,12 +8,14 @@
  * @category Piwik_Plugins
  * @package Piwik_VisitorInterest
  */
+use Piwik\ArchiveProcessor;
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_VisitorInterest
  */
-class Piwik_VisitorInterest extends Piwik_Plugin
+class Piwik_VisitorInterest extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
@@ -111,7 +113,7 @@ class Piwik_VisitorInterest extends Piwik_Plugin
         Piwik_AddAction('template_footerVisitsFrequency', array('Piwik_VisitorInterest', 'footerVisitsFrequency'));
     }
 
-    public function archivePeriod(Piwik_ArchiveProcessor_Period $archiveProcessor)
+    public function archivePeriod(ArchiveProcessor\Period $archiveProcessor)
     {
         $archiving = new Piwik_VisitorInterest_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
@@ -119,7 +121,7 @@ class Piwik_VisitorInterest extends Piwik_Plugin
         }
     }
 
-    public function archiveDay(Piwik_ArchiveProcessor_Day $archiveProcessor)
+    public function archiveDay(ArchiveProcessor\Day $archiveProcessor)
     {
         $archiving = new Piwik_VisitorInterest_Archiver($archiveProcessor);
         if($archiving->shouldArchive()) {
diff --git a/plugins/VisitsSummary/API.php b/plugins/VisitsSummary/API.php
index db4355203c6343295cc1581bfd1ffe62825ec5f8..7dbabcf6d9fbf43763c93f3f4557492a54e5cd07 100644
--- a/plugins/VisitsSummary/API.php
+++ b/plugins/VisitsSummary/API.php
@@ -161,7 +161,7 @@ class Piwik_VisitsSummary_API
         $table = $this->getSumVisitsLength($idSite, $period, $date, $segment);
         if (is_object($table)) {
             $table->filter('ColumnCallbackReplace',
-                array('sum_visit_length', array('Piwik', 'getPrettyTimeFromSeconds')));
+                array('sum_visit_length', '\Piwik\Piwik::getPrettyTimeFromSeconds'));
         } else {
             $table = Piwik::getPrettyTimeFromSeconds($table);
         }
diff --git a/plugins/VisitsSummary/Controller.php b/plugins/VisitsSummary/Controller.php
index 493acaab16b41cc1305a275e2d306dbf202edd47..bc30a1e6aa5230c5cc808a082183b476b21f9203 100644
--- a/plugins/VisitsSummary/Controller.php
+++ b/plugins/VisitsSummary/Controller.php
@@ -8,8 +8,10 @@
  * @category Piwik_Plugins
  * @package Piwik_VisitsSummary
  */
+use Piwik\DataTable\Row;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\DataTable;
 use Piwik\Site;
 
 /**
@@ -98,7 +100,7 @@ class Piwik_VisitsSummary_Controller extends Piwik_Controller
             "&disable_generic_filters=1";
         $request = new Piwik_API_Request($requestString);
         $result = $request->process();
-        return empty($result) ? new Piwik_DataTable() : $result;
+        return empty($result) ? new DataTable() : $result;
     }
 
     static public function getVisits()
@@ -130,11 +132,11 @@ class Piwik_VisitsSummary_Controller extends Piwik_Controller
         $view->displaySiteSearch = $displaySiteSearch;
 
         $dataTableVisit = self::getVisitsSummary();
-        $dataRow = $dataTableVisit->getRowsCount() == 0 ? new Piwik_DataTable_Row() : $dataTableVisit->getFirstRow();
+        $dataRow = $dataTableVisit->getRowsCount() == 0 ? new Row() : $dataTableVisit->getFirstRow();
 
         $dataTableActions = Piwik_Actions_API::getInstance()->get($idSite, Common::getRequestVar('period'), Common::getRequestVar('date'), Piwik_ViewDataTable::getRawSegmentFromRequest());
         $dataActionsRow =
-            $dataTableActions->getRowsCount() == 0 ? new Piwik_DataTable_Row() : $dataTableActions->getFirstRow();
+            $dataTableActions->getRowsCount() == 0 ? new Row() : $dataTableActions->getFirstRow();
 
         $view->nbUniqVisitors = (int)$dataRow->getColumn('nb_uniq_visitors');
         $nbVisits = (int)$dataRow->getColumn('nb_visits');
diff --git a/plugins/VisitsSummary/VisitsSummary.php b/plugins/VisitsSummary/VisitsSummary.php
index daf509753c7c2a762bc4421239cd43ee1b4df2f2..fec93524922fc67824b50e2b7e5e22df7786c4ec 100644
--- a/plugins/VisitsSummary/VisitsSummary.php
+++ b/plugins/VisitsSummary/VisitsSummary.php
@@ -8,16 +8,17 @@
  * @category Piwik_Plugins
  * @package Piwik_VisitsSummary
  */
+use Piwik\Plugin;
 
 /**
  * Note: This plugin does not hook on Daily and Period Archiving like other Plugins because it reports the
  * very core metrics (visits, actions, visit duration, etc.) which are processed in the Core
- * Piwik_ArchiveProcessor_Day class directly.
+ * Day class directly.
  * These metrics can be used by other Plugins so they need to be processed up front.
  *
  * @package Piwik_VisitsSummary
  */
-class Piwik_VisitsSummary extends Piwik_Plugin
+class Piwik_VisitsSummary extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
diff --git a/plugins/Widgetize/Widgetize.php b/plugins/Widgetize/Widgetize.php
index 62fae7ab4a655413c2e93746c5a833f11ad25360..7bf8cdb7c1f4a184fdb07332a6b610a0e141ce89 100644
--- a/plugins/Widgetize/Widgetize.php
+++ b/plugins/Widgetize/Widgetize.php
@@ -9,12 +9,13 @@
  * @category Piwik_Plugins
  * @package Piwik_Widgetize
  */
+use Piwik\Plugin;
 
 /**
  *
  * @package Piwik_Widgetize
  */
-class Piwik_Widgetize extends Piwik_Plugin
+class Piwik_Widgetize extends Plugin
 {
     /**
      * @see Piwik_Plugin::getListHooksRegistered
diff --git a/tests/LocalTracker.php b/tests/LocalTracker.php
index 123dbf94baab6108c1053d1dec0b966bad46e964..69dd3b2f4dc1779b589e6b040afc22d36155cdab 100755
--- a/tests/LocalTracker.php
+++ b/tests/LocalTracker.php
@@ -53,7 +53,7 @@ class Piwik_LocalTracker extends PiwikTracker
         $pluginsTracker = Config::getInstance()->Plugins_Tracker['Plugins_Tracker'];
         $oldTrackerConfig = Config::getInstance()->Tracker;
 
-        PluginsManager::getInstance()->unloadPlugins();
+        \Piwik\PluginsManager::getInstance()->unloadPlugins();
 
         // modify config
         $GLOBALS['PIWIK_TRACKER_MODE'] = true;
@@ -94,7 +94,7 @@ class Piwik_LocalTracker extends PiwikTracker
         unset($_GET['bots']);
 
         // reload plugins
-        PluginsManager::getInstance()->loadPlugins($plugins);
+        \Piwik\PluginsManager::getInstance()->loadPlugins($plugins);
 
         return $output;
     }
diff --git a/tests/PHPUnit/BaseFixture.php b/tests/PHPUnit/BaseFixture.php
index d738f7ae90d51e5c33633f34fb9e68ea166a3623..8cf6bb377da50fb1efa6a002249068d30f26eff7 100644
--- a/tests/PHPUnit/BaseFixture.php
+++ b/tests/PHPUnit/BaseFixture.php
@@ -8,6 +8,7 @@
 use Piwik\Config;
 use Piwik\Common;
 use Piwik\Access;
+use Piwik\Date;
 use Piwik\Site;
 
 /**
@@ -67,7 +68,7 @@ abstract class Test_Piwik_BaseFixture extends PHPUnit_Framework_Assert
 
         // Manually set the website creation date to a day earlier than the earliest day we record stats for
         Zend_Registry::get('db')->update(Common::prefixTable("site"),
-            array('ts_created' => Piwik_Date::factory($dateTime)->subDay(1)->getDatetime()),
+            array('ts_created' => Date::factory($dateTime)->subDay(1)->getDatetime()),
             "idsite = $idSite"
         );
 
diff --git a/tests/PHPUnit/Benchmarks/ArchiveQueryBenchmark.php b/tests/PHPUnit/Benchmarks/ArchiveQueryBenchmark.php
index f10f2589430e4ffe1da01ef921972224b3c7857b..adf616fa279dcff31c74c828ac9f382d02caa826 100644
--- a/tests/PHPUnit/Benchmarks/ArchiveQueryBenchmark.php
+++ b/tests/PHPUnit/Benchmarks/ArchiveQueryBenchmark.php
@@ -5,7 +5,10 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\ArchiveProcessor\Rules;
+use Piwik\DataAccess\ArchiveTableCreator;
 use Piwik\Period;
+use Piwik\Date;
 
 require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/BenchmarkTestCase.php';
 
@@ -18,7 +21,7 @@ class ArchiveQueryBenchmark extends BenchmarkTestCase
     
     public function setUp()
     {
-        $archivingTables = Piwik_DataAccess_ArchiveTableCreator::getTablesArchivesInstalled();
+        $archivingTables = ArchiveTableCreator::getTablesArchivesInstalled();
         if (empty($archivingTables)) {
             $this->archivingLaunched = true;
             Piwik_VisitsSummary_API::getInstance()->get(
@@ -36,9 +39,9 @@ class ArchiveQueryBenchmark extends BenchmarkTestCase
             echo "NOTE: Had to archive data, memory results will not be accurate. Run again for better results.";
         }
 
-        Piwik_ArchiveProcessor_Rules::$archivingDisabledByTests = true;
+        Rules::$archivingDisabledByTests = true;
         
-        $period = Period::factory(self::$fixture->period, Piwik_Date::factory(self::$fixture->date));
+        $period = Period::factory(self::$fixture->period, Date::factory(self::$fixture->date));
         $dateRange = $period->getDateStart().','.$period->getDateEnd();
         
         Piwik_VisitsSummary_API::getInstance()->get(self::$fixture->idSite, 'day', $dateRange);
diff --git a/tests/PHPUnit/Benchmarks/Fixtures/ManyThousandSitesOneVisitEach.php b/tests/PHPUnit/Benchmarks/Fixtures/ManyThousandSitesOneVisitEach.php
index b58cde84a2487611e3dbc84c052ddb3da4cfb13a..83569527d096f71516bdd86817ad6330c2247c05 100644
--- a/tests/PHPUnit/Benchmarks/Fixtures/ManyThousandSitesOneVisitEach.php
+++ b/tests/PHPUnit/Benchmarks/Fixtures/ManyThousandSitesOneVisitEach.php
@@ -5,6 +5,7 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Reusable fixture. Adds 20,000 sites and tracks one pageview for each on one day.
@@ -27,7 +28,7 @@ class Piwik_Test_Fixture_ManyThousandSitesOneVisitEach
         
         // track one visit for each site
         $t = BenchmarkTestCase::getLocalTracker(1);
-        $t->setForceVisitDateTime(Piwik_Date::factory($this->date)->addHour(6));
+        $t->setForceVisitDateTime(Date::factory($this->date)->addHour(6));
         for ($idSite = 1; $idSite < $this->siteCount + 1; ++$idSite) {
             $ip = "157.5.6.4";
             $t->setIp($ip);
diff --git a/tests/PHPUnit/Benchmarks/Fixtures/OneSiteThousandsOfDistinctUrlsOverMonth.php b/tests/PHPUnit/Benchmarks/Fixtures/OneSiteThousandsOfDistinctUrlsOverMonth.php
index 86b2c7a740df1cc68b90b06e4cbfa7106c244755..7696cda917aca131406a725317b7458619cd365c 100644
--- a/tests/PHPUnit/Benchmarks/Fixtures/OneSiteThousandsOfDistinctUrlsOverMonth.php
+++ b/tests/PHPUnit/Benchmarks/Fixtures/OneSiteThousandsOfDistinctUrlsOverMonth.php
@@ -5,6 +5,7 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Adds one site and 1000 actions for every day of one month (January). Each
@@ -28,7 +29,7 @@ class Piwik_Test_Fixture_OneSiteThousandsOfDistinctUrlsOverMonth
         $goals->addGoal($this->idSite, 'all', 'url', 'http', 'contains', false, 5);
         $goals->addGoal($this->idSite, 'all', 'url', 'thing2', 'contains');
         
-        $start = Piwik_Date::factory($this->date);
+        $start = Date::factory($this->date);
         
         $dates = array();
         for ($day = 0; $day != 31; ++$day) {
diff --git a/tests/PHPUnit/Benchmarks/Fixtures/OneSiteTwelveThousandVisitsOneYear.php b/tests/PHPUnit/Benchmarks/Fixtures/OneSiteTwelveThousandVisitsOneYear.php
index fcded59612d1f32209b51b1c278ad7868d864e22..743a77bad9b73655d843a0cd2d64a2edca7528d2 100755
--- a/tests/PHPUnit/Benchmarks/Fixtures/OneSiteTwelveThousandVisitsOneYear.php
+++ b/tests/PHPUnit/Benchmarks/Fixtures/OneSiteTwelveThousandVisitsOneYear.php
@@ -5,6 +5,7 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Reusable fixture. Tracks twelve thousand page views over a year for one site.
@@ -36,7 +37,7 @@ class Piwik_Test_Fixture_OneSiteTwelveThousandVisitsOneYear
         }
 
         $visitTimes = array();
-        $date = Piwik_Date::factory($this->date);
+        $date = Date::factory($this->date);
         for ($month = 0; $month != 12; ++$month) {
             for ($day = 0; $day != 25; ++$day) {
                 $visitTimes[] = $date->addPeriod($month, 'MONTH')->addDay($day)->getDatetime();
diff --git a/tests/PHPUnit/Benchmarks/Fixtures/SqlDump.php b/tests/PHPUnit/Benchmarks/Fixtures/SqlDump.php
index 701a6066f833e4a343df240c63dca69f6f94b22e..fb257bb738fdd0274e95d77ea901506f569b93ce 100755
--- a/tests/PHPUnit/Benchmarks/Fixtures/SqlDump.php
+++ b/tests/PHPUnit/Benchmarks/Fixtures/SqlDump.php
@@ -5,6 +5,7 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\ArchiveProcessor\Rules;
 use Piwik\Config;
 use Piwik\Piwik;
 use Piwik\Common;
@@ -65,6 +66,6 @@ class Piwik_Test_Fixture_SqlDump
         }
 
         // make sure archiving will be called
-        Piwik_ArchiveProcessor_Rules::setBrowserTriggerArchiving(true);
+        Rules::setBrowserTriggerArchiving(true);
     }
 }
diff --git a/tests/PHPUnit/Benchmarks/Fixtures/ThousandSitesTwelveVisitsEachOneDay.php b/tests/PHPUnit/Benchmarks/Fixtures/ThousandSitesTwelveVisitsEachOneDay.php
index 80442430ebf32b1b9fe276895565475d589be7d6..e56a16a5df411e96432ec27b2e365baeb8d321a8 100755
--- a/tests/PHPUnit/Benchmarks/Fixtures/ThousandSitesTwelveVisitsEachOneDay.php
+++ b/tests/PHPUnit/Benchmarks/Fixtures/ThousandSitesTwelveVisitsEachOneDay.php
@@ -5,6 +5,7 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Reusable fixture. Tracks twelve thousand page views for 1000 sites on one day.
@@ -46,7 +47,7 @@ class Piwik_Test_Fixture_ThousandSitesTwelveVisitsEachOneDay
         }
 
         $visitTimes = array();
-        $date = Piwik_Date::factory($this->date);
+        $date = Date::factory($this->date);
         for ($i = 0; $i != 4; ++$i) {
             $visitTimes[] = $date->addHour($i)->getDatetime();
         }
diff --git a/tests/PHPUnit/Benchmarks/MultiSitesBenchmark.php b/tests/PHPUnit/Benchmarks/MultiSitesBenchmark.php
index 8ae47a4c1aa31b05e88d325749fa822ecdb33f22..a1390fc67ac46c45257b3f8c204cac3b4c120fec 100644
--- a/tests/PHPUnit/Benchmarks/MultiSitesBenchmark.php
+++ b/tests/PHPUnit/Benchmarks/MultiSitesBenchmark.php
@@ -5,6 +5,9 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\ArchiveProcessor\Rules;
+use Piwik\DataAccess\ArchiveTableCreator;
+
 require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/BenchmarkTestCase.php';
 
 /**
@@ -16,7 +19,7 @@ class MultiSitesBenchmark extends BenchmarkTestCase
     
     public function setUp()
     {
-        $archivingTables = Piwik_DataAccess_ArchiveTableCreator::getTablesArchivesInstalled();
+        $archivingTables = ArchiveTableCreator::getTablesArchivesInstalled();
         if (empty($archivingTables)) {
             $this->archivingLaunched = true;
             Piwik_VisitsSummary_API::getInstance()->get(
@@ -34,7 +37,7 @@ class MultiSitesBenchmark extends BenchmarkTestCase
             echo "NOTE: Had to archive data, memory results will not be accurate. Run again for better results.";
         }
         
-        Piwik_ArchiveProcessor_Rules::$archivingDisabledByTests = true;
+        Rules::$archivingDisabledByTests = true;
         Piwik_MultiSites_API::getInstance()->getAll(self::$fixture->period, self::$fixture->date);
     }
 }
diff --git a/tests/PHPUnit/Benchmarks/TrackerBenchmark.php b/tests/PHPUnit/Benchmarks/TrackerBenchmark.php
index d92bd632a8f2bbbb11cf0dea772466b52e046759..2203fe6655048fdb9a411dc492c6a4c539891ef1 100755
--- a/tests/PHPUnit/Benchmarks/TrackerBenchmark.php
+++ b/tests/PHPUnit/Benchmarks/TrackerBenchmark.php
@@ -5,6 +5,8 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
+
 require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/BenchmarkTestCase.php';
 
 /**
@@ -28,7 +30,7 @@ class TrackerBenchmark extends BenchmarkTestCase
         }
 
         // set dates & times
-        $date = Piwik_Date::factory(self::$fixture->date);
+        $date = Date::factory(self::$fixture->date);
         for ($i = 0; $i != 25; ++$i) {
             $this->visitDates[] = $date->addDay($i)->toString('Y-m-d');
         }
diff --git a/tests/PHPUnit/Core/ArchiveProcessingTest.php b/tests/PHPUnit/Core/ArchiveProcessingTest.php
index 7e4a677274ff041e866e914c711a164c114740e2..5a36a79de3cc769b34fc5ac660779644e85dbee5 100644
--- a/tests/PHPUnit/Core/ArchiveProcessingTest.php
+++ b/tests/PHPUnit/Core/ArchiveProcessingTest.php
@@ -1,18 +1,23 @@
 <?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+use Piwik\ArchiveProcessor\Rules;
 use Piwik\Config;
+use Piwik\DataAccess\ArchiveTableCreator;
 use Piwik\Period;
 use Piwik\Piwik;
 use Piwik\Common;
 use Piwik\Access;
+use Piwik\Date;
+use Piwik\ArchiveProcessor;
 use Piwik\Segment;
 use Piwik\Site;
 
-/**
- * Piwik - Open source web analytics
- *
- * @link http://piwik.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */
 class ArchiveProcessingTest extends DatabaseTestCase
 {
     public function setUp()
@@ -52,20 +57,20 @@ class ArchiveProcessingTest extends DatabaseTestCase
      * @param string $periodLabel
      * @param string $dateLabel
      * @param string $siteTimezone
-     * @return Piwik_ArchiveProcessor
+     * @return ArchiveProcessor
      */
     private function _createArchiveProcessor($periodLabel, $dateLabel, $siteTimezone)
     {
         $site = $this->_createWebsite($siteTimezone);
-        $date = Piwik_Date::factory($dateLabel);
+        $date = Date::factory($dateLabel);
         $period = Period::factory($periodLabel, $date);
         $segment = new Segment('', $site->getId());
 
 
         if($period->getLabel() == 'day') {
-            return new Piwik_ArchiveProcessor_Day($period, $site, $segment);
+            return new ArchiveProcessor\Day($period, $site, $segment);
         } else {
-            return new Piwik_ArchiveProcessor_Period($period, $site, $segment);
+            return new ArchiveProcessor\Period($period, $site, $segment);
         }
     }
 
@@ -88,7 +93,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
         $archiveProcessor->time = $now;
 
         // min finished timestamp considered when looking at archive timestamp
-        $timeout = Piwik_ArchiveProcessor_Rules::getTodayArchiveTimeToLive();
+        $timeout = Rules::getTodayArchiveTimeToLive();
         $this->assertTrue($timeout >= 10);
         $dateMinArchived = $now - $timeout;
         $this->compareTimestamps($dateMinArchived, $archiveProcessor->getMinTimeArchivedProcessed());
@@ -99,7 +104,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
 
     private function compareTimestamps($expected, $processed)
     {
-        $messageIfFails = Piwik_Date::factory($expected)->getDatetime() . " != " . Piwik_Date::factory($processed)->getDatetime();
+        $messageIfFails = Date::factory($expected)->getDatetime() . " != " . Date::factory($processed)->getDatetime();
         $this->assertTrue( $expected == $processed || $expected == ($processed + 1) || ($expected + 1) == $processed, $messageIfFails);
     }
 
@@ -113,7 +118,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
         $archiveProcessor = $this->_createArchiveProcessor('day', '2010-01-01', 'UTC');
 
         // min finished timestamp considered when looking at archive timestamp 
-        $dateMinArchived = Piwik_Date::factory('2010-01-02')->getTimestamp();
+        $dateMinArchived = Date::factory('2010-01-02')->getTimestamp();
         $this->assertEquals($archiveProcessor->getMinTimeArchivedProcessed() + 1, $dateMinArchived);
 
         $this->assertEquals('2010-01-01 00:00:00', $archiveProcessor->getDateStart()->getDateStartUTC());
@@ -131,7 +136,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
         $timezone = 'UTC+5.5';
         $archiveProcessor = $this->_createArchiveProcessor('day', '2010-01-01', $timezone);
         // min finished timestamp considered when looking at archive timestamp 
-        $dateMinArchived = Piwik_Date::factory('2010-01-01 18:30:00');
+        $dateMinArchived = Date::factory('2010-01-01 18:30:00');
         $this->assertEquals($archiveProcessor->getMinTimeArchivedProcessed() + 1, $dateMinArchived->getTimestamp());
 
         $this->assertEquals('2009-12-31 18:30:00', $archiveProcessor->getDateStart()->getDateStartUTC());
@@ -149,7 +154,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
         $timezone = 'UTC-5.5';
         $archiveProcessor = $this->_createArchiveProcessor('month', '2010-01-02', $timezone);
         // min finished timestamp considered when looking at archive timestamp 
-        $dateMinArchived = Piwik_Date::factory('2010-02-01 05:30:00');
+        $dateMinArchived = Date::factory('2010-02-01 05:30:00');
         $this->assertEquals($archiveProcessor->getMinTimeArchivedProcessed() + 1, $dateMinArchived->getTimestamp());
 
         $this->assertEquals('2010-01-01 05:30:00', $archiveProcessor->getDateStart()->getDateStartUTC());
@@ -166,22 +171,22 @@ class ArchiveProcessingTest extends DatabaseTestCase
     {
         $now = time();
         $siteTimezone = 'UTC-1';
-        $timestamp = Piwik_Date::factory('now', $siteTimezone)->getTimestamp();
+        $timestamp = Date::factory('now', $siteTimezone)->getTimestamp();
         $dateLabel = date('Y-m-d', $timestamp);
 
-        Piwik_ArchiveProcessor_Rules::setBrowserTriggerArchiving(true);
+        Rules::setBrowserTriggerArchiving(true);
 
         $archiveProcessor = $this->_createArchiveProcessor('day', $dateLabel, $siteTimezone);
         $archiveProcessor->time = $now;
 
         // we look at anything processed within the time to live range
-        $dateMinArchived = $now - Piwik_ArchiveProcessor_Rules::getTodayArchiveTimeToLive();
+        $dateMinArchived = $now - Rules::getTodayArchiveTimeToLive();
         $this->compareTimestamps($dateMinArchived, $archiveProcessor->getMinTimeArchivedProcessed() );
         $this->assertTrue($archiveProcessor->isArchiveTemporary());
 
         // when browsers don't trigger archives, we force ArchiveProcessor
         // to fetch any of the most recent archive
-        Piwik_ArchiveProcessor_Rules::setBrowserTriggerArchiving(false);
+        Rules::setBrowserTriggerArchiving(false);
         // see isArchivingDisabled()
         // Running in CLI doesn't impact the time to live today's archive we are loading
         // From CLI, we will not return data that is 'stale' 
@@ -208,23 +213,23 @@ class ArchiveProcessingTest extends DatabaseTestCase
 
         $now = time();
         $siteTimezone = 'Europe/Paris';
-        $timestamp = Piwik_Date::factory('now', $siteTimezone)->getTimestamp();
+        $timestamp = Date::factory('now', $siteTimezone)->getTimestamp();
         $dateLabel = date('Y-m-d', $timestamp);
 
-        Piwik_ArchiveProcessor_Rules::setBrowserTriggerArchiving(true);
+        Rules::setBrowserTriggerArchiving(true);
 
         $archiveProcessor = $this->_createArchiveProcessor('day', $dateLabel, $siteTimezone);
         $archiveProcessor->time = $now;
 
         // we look at anything processed within the time to live range
-        $dateMinArchived = $now - Piwik_ArchiveProcessor_Rules::getTodayArchiveTimeToLive();
+        $dateMinArchived = $now - Rules::getTodayArchiveTimeToLive();
         $minTimeArchivedProcessed = $archiveProcessor->getMinTimeArchivedProcessed();
         $this->compareTimestamps($dateMinArchived, $minTimeArchivedProcessed);
         $this->assertTrue($archiveProcessor->isArchiveTemporary());
 
         // when browsers don't trigger archives, we force ArchiveProcessor
         // to fetch any of the most recent archive
-        Piwik_ArchiveProcessor_Rules::setBrowserTriggerArchiving(false);
+        Rules::setBrowserTriggerArchiving(false);
         // see isArchivingDisabled()
         // Running in CLI doesn't impact the time to live today's archive we are loading
         // From CLI, we will not return data that is 'stale'
@@ -255,22 +260,22 @@ class ArchiveProcessingTest extends DatabaseTestCase
 
         $now = time();
         $siteTimezone = 'America/Toronto';
-        $timestamp = Piwik_Date::factory('now', $siteTimezone)->getTimestamp();
+        $timestamp = Date::factory('now', $siteTimezone)->getTimestamp();
         $dateLabel = date('Y-m-d', $timestamp);
 
-        Piwik_ArchiveProcessor_Rules::setBrowserTriggerArchiving(true);
+        Rules::setBrowserTriggerArchiving(true);
 
         $archiveProcessor = $this->_createArchiveProcessor('day', $dateLabel, $siteTimezone);
         $archiveProcessor->time = $now;
 
         // we look at anything processed within the time to live range
-        $dateMinArchived = $now - Piwik_ArchiveProcessor_Rules::getTodayArchiveTimeToLive();
+        $dateMinArchived = $now - Rules::getTodayArchiveTimeToLive();
         $this->compareTimestamps($dateMinArchived, $archiveProcessor->getMinTimeArchivedProcessed() );
         $this->assertTrue($archiveProcessor->isArchiveTemporary());
 
         // when browsers don't trigger archives, we force ArchiveProcessor
         // to fetch any of the most recent archive
-        Piwik_ArchiveProcessor_Rules::setBrowserTriggerArchiving(false);
+        Rules::setBrowserTriggerArchiving(false);
         // see isArchivingDisabled()
         // Running in CLI doesn't impact the time to live today's archive we are loading
         // From CLI, we will not return data that is 'stale'
@@ -373,7 +378,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
     {
         $siteTimezone = 'America/Toronto';
         $dateLabel = '2011-03-31';
-        $table = Piwik_DataAccess_ArchiveTableCreator::getBlobTable(Piwik_Date::factory($dateLabel));
+        $table = ArchiveTableCreator::getBlobTable(Date::factory($dateLabel));
 
         $data = $this->_getBlobDataInsert();
         try {
@@ -406,7 +411,7 @@ class ArchiveProcessingTest extends DatabaseTestCase
     {
         $siteTimezone = 'America/Toronto';
         $dateLabel = '2011-03-31';
-        $table = Piwik_DataAccess_ArchiveTableCreator::getBlobTable(Piwik_Date::factory($dateLabel));
+        $table = ArchiveTableCreator::getBlobTable(Date::factory($dateLabel));
 
         $data = $this->_getBlobDataInsert();
         Piwik::tableInsertBatchIterate($table, array('idarchive', 'name', 'idsite', 'date1', 'date2', 'period', 'ts_archived', 'value'), $data);
diff --git a/tests/PHPUnit/Core/DataTable/Filter/AddSummaryRowTest.php b/tests/PHPUnit/Core/DataTable/Filter/AddSummaryRowTest.php
index 5071d2b8159c254e0003fb73e9e90c476dd0a576..05136a1c276405763393913022b371eb225c030e 100644
--- a/tests/PHPUnit/Core/DataTable/Filter/AddSummaryRowTest.php
+++ b/tests/PHPUnit/Core/DataTable/Filter/AddSummaryRowTest.php
@@ -5,6 +5,10 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\DataTable;
+use Piwik\DataTable\Filter\AddSummaryRow;
+use Piwik\DataTable\Row;
+
 class DataTable_Filter_AddSummaryRowTest extends PHPUnit_Framework_TestCase
 {
     /**
@@ -17,10 +21,10 @@ class DataTable_Filter_AddSummaryRowTest extends PHPUnit_Framework_TestCase
     public function testOffsetIsCountSummaryRowShouldBeTheRow()
     {
         $table = $this->getDataTableCount5();
-        $filter = new Piwik_DataTable_Filter_AddSummaryRow($table, 5);
+        $filter = new AddSummaryRow($table, 5);
         $filter->filter($table);
         $this->assertEquals(5, $table->getRowsCount());
-        $this->assertTrue(Piwik_DataTable_Row::isEqual($table->getLastRow(), $this->getRow4()));
+        $this->assertTrue(Row::isEqual($table->getLastRow(), $this->getRow4()));
     }
 
     /**
@@ -33,11 +37,11 @@ class DataTable_Filter_AddSummaryRowTest extends PHPUnit_Framework_TestCase
     public function testOffsetIsLessThanCountSummaryRowShouldBeTheSum()
     {
         $table = $this->getDataTableCount5();
-        $filter = new Piwik_DataTable_Filter_AddSummaryRow($table, 2);
+        $filter = new AddSummaryRow($table, 2);
         $filter->filter($table);
         $this->assertEquals(3, $table->getRowsCount());
-        $expectedRow = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'nb' => 111)));
-        $this->assertTrue(Piwik_DataTable_Row::isEqual($table->getLastRow(), $expectedRow));
+        $expectedRow = new Row(array(Row::COLUMNS => array('label' => DataTable::LABEL_SUMMARY_ROW, 'nb' => 111)));
+        $this->assertTrue(Row::isEqual($table->getLastRow(), $expectedRow));
         // check that column 'label' is forced to be first in summary row
         $this->assertEquals(array_keys($table->getLastRow()->getColumns()), array_keys($expectedRow->getColumns()));
     }
@@ -52,10 +56,10 @@ class DataTable_Filter_AddSummaryRowTest extends PHPUnit_Framework_TestCase
     public function testOffsetIsMoreThanCountShouldNotAddSummaryRow()
     {
         $table = $this->getDataTableCount5();
-        $filter = new Piwik_DataTable_Filter_AddSummaryRow($table, 6);
+        $filter = new AddSummaryRow($table, 6);
         $filter->filter($table);
         $this->assertEquals(5, $table->getRowsCount());
-        $this->assertTrue(Piwik_DataTable_Row::isEqual($table->getLastRow(), $this->getRow4()));
+        $this->assertTrue(Row::isEqual($table->getLastRow(), $this->getRow4()));
     }
 
     /**
@@ -68,13 +72,13 @@ class DataTable_Filter_AddSummaryRowTest extends PHPUnit_Framework_TestCase
     public function testWhenThereIsAlreadyASummaryRowShouldReplaceTheSummaryRow()
     {
         $table = $this->getDataTableCount5();
-        $filter1 = new Piwik_DataTable_Filter_AddSummaryRow($table, 3);
+        $filter1 = new AddSummaryRow($table, 3);
         $filter1->filter($table);
-        $filter2 = new Piwik_DataTable_Filter_AddSummaryRow($table, 2);
+        $filter2 = new AddSummaryRow($table, 2);
         $filter2->filter($table);
         $this->assertEquals(3, $table->getRowsCount());
-        $expectedRow = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'nb' => 111)));
-        $this->assertTrue(Piwik_DataTable_Row::isEqual($table->getLastRow(), $expectedRow));
+        $expectedRow = new Row(array(Row::COLUMNS => array('label' => DataTable::LABEL_SUMMARY_ROW, 'nb' => 111)));
+        $this->assertTrue(Row::isEqual($table->getLastRow(), $expectedRow));
     }
 
     /**
@@ -88,23 +92,23 @@ class DataTable_Filter_AddSummaryRowTest extends PHPUnit_Framework_TestCase
     {
         // row0, row1, row2, rowSummary1
         $table1 = $this->getDataTableCount5();
-        $filter = new Piwik_DataTable_Filter_AddSummaryRow($table1, 3);
+        $filter = new AddSummaryRow($table1, 3);
         $filter->filter($table1);
 
         // row0, row1, rowSummary2
         $table2 = $this->getDataTableCount5();
-        $filter = new Piwik_DataTable_Filter_AddSummaryRow($table2, 2);
+        $filter = new AddSummaryRow($table2, 2);
         $filter->filter($table2);
 
         // we expect row0+row0, row1+row1, row2, rowSummary1+rowSummary2
-        $expectedTable = new Piwik_DataTable;
-        $expectedTable->addRow(new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => 'amazon', 'nb' => 20000))));
-        $expectedTable->addRow(new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => 'yahoo', 'nb' => 2000))));
-        $expectedTable->addRow(new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => 'piwik', 'nb' => 100))));
-        $expectedTable->addRow(new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'nb' => 122))));
+        $expectedTable = new DataTable;
+        $expectedTable->addRow(new Row(array(Row::COLUMNS => array('label' => 'amazon', 'nb' => 20000))));
+        $expectedTable->addRow(new Row(array(Row::COLUMNS => array('label' => 'yahoo', 'nb' => 2000))));
+        $expectedTable->addRow(new Row(array(Row::COLUMNS => array('label' => 'piwik', 'nb' => 100))));
+        $expectedTable->addRow(new Row(array(Row::COLUMNS => array('label' => DataTable::LABEL_SUMMARY_ROW, 'nb' => 122))));
 
         $table1->addDataTable($table2);
-        $this->assertTrue(Piwik_DataTable::isEqual($expectedTable, $table1));
+        $this->assertTrue(DataTable::isEqual($expectedTable, $table1));
     }
 
     /**
@@ -118,23 +122,23 @@ class DataTable_Filter_AddSummaryRowTest extends PHPUnit_Framework_TestCase
     {
         // row0, row1, row2, rowSummary1
         $table1 = $this->getDataTableCount5();
-        $filter = new Piwik_DataTable_Filter_AddSummaryRow($table1, 3);
+        $filter = new AddSummaryRow($table1, 3);
         $filter->filter($table1);
 
         // row0, row1, row2, row3, row4
         $table2 = $this->getDataTableCount5();
 
         // we expect row0+row0, row1+row1, row2+row2, row3, row4, rowSummary1
-        $expectedTable = new Piwik_DataTable;
-        $expectedTable->addRow(new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => 'amazon', 'nb' => 20000))));
-        $expectedTable->addRow(new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => 'yahoo', 'nb' => 2000))));
-        $expectedTable->addRow(new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => 'piwik', 'nb' => 200))));
+        $expectedTable = new DataTable;
+        $expectedTable->addRow(new Row(array(Row::COLUMNS => array('label' => 'amazon', 'nb' => 20000))));
+        $expectedTable->addRow(new Row(array(Row::COLUMNS => array('label' => 'yahoo', 'nb' => 2000))));
+        $expectedTable->addRow(new Row(array(Row::COLUMNS => array('label' => 'piwik', 'nb' => 200))));
         $expectedTable->addRow($this->getRow3());
         $expectedTable->addRow($this->getRow4());
-        $expectedTable->addRow(new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'nb' => 11))));
+        $expectedTable->addRow(new Row(array(Row::COLUMNS => array('label' => DataTable::LABEL_SUMMARY_ROW, 'nb' => 11))));
 
         $table1->addDataTable($table2);
-        $this->assertTrue(Piwik_DataTable::isEqual($expectedTable, $table1));
+        $this->assertTrue(DataTable::isEqual($expectedTable, $table1));
 
     }
 
@@ -147,28 +151,28 @@ class DataTable_Filter_AddSummaryRowTest extends PHPUnit_Framework_TestCase
      */
     public function testWhenRowsInRandomOrderButSortSpecifiedShouldComputeSummaryRowAfterSort()
     {
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
         $table->addRow($this->getRow3());
         $table->addRow($this->getRow2());
         $table->addRow($this->getRow4());
         $table->addRow($this->getRow1());
         $table->addRow($this->getRow0());
 
-        $filter = new Piwik_DataTable_Filter_AddSummaryRow($table, 2, Piwik_DataTable::LABEL_SUMMARY_ROW, $columnToSortBy = 'nb');
+        $filter = new AddSummaryRow($table, 2, DataTable::LABEL_SUMMARY_ROW, $columnToSortBy = 'nb');
         $filter->filter($table);
         $this->assertEquals(3, $table->getRowsCount());
-        $expectedRow = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'nb' => 111)));
-        $this->assertTrue(Piwik_DataTable_Row::isEqual($table->getLastRow(), $expectedRow));
+        $expectedRow = new Row(array(Row::COLUMNS => array('label' => DataTable::LABEL_SUMMARY_ROW, 'nb' => 111)));
+        $this->assertTrue(Row::isEqual($table->getLastRow(), $expectedRow));
     }
 
     /**
      * Returns table used for the tests
      *
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     protected function getDataTableCount5()
     {
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
         $table->addRow($this->getRow0());
         $table->addRow($this->getRow1());
         $table->addRow($this->getRow2());
@@ -179,26 +183,26 @@ class DataTable_Filter_AddSummaryRowTest extends PHPUnit_Framework_TestCase
 
     protected function getRow0()
     {
-        return new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('nb' => 10000, 'label' => 'amazon')));
+        return new Row(array(Row::COLUMNS => array('nb' => 10000, 'label' => 'amazon')));
     }
 
     protected function getRow1()
     {
-        return new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => 'yahoo', 'nb' => 1000)));
+        return new Row(array(Row::COLUMNS => array('label' => 'yahoo', 'nb' => 1000)));
     }
 
     protected function getRow2()
     {
-        return new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => 'piwik', 'nb' => 100)));
+        return new Row(array(Row::COLUMNS => array('label' => 'piwik', 'nb' => 100)));
     }
 
     protected function getRow3()
     {
-        return new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('label' => 'ask', 'nb' => 10)));
+        return new Row(array(Row::COLUMNS => array('label' => 'ask', 'nb' => 10)));
     }
 
     protected function getRow4()
     {
-        return new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => array('nb' => 1, 'label' => 'google')));
+        return new Row(array(Row::COLUMNS => array('nb' => 1, 'label' => 'google')));
     }
 }
diff --git a/tests/PHPUnit/Core/DataTable/Filter/ExcludeLowPopulationTest.php b/tests/PHPUnit/Core/DataTable/Filter/ExcludeLowPopulationTest.php
index 5ebb772c72162151ca8736da0eb2b070e162ff6f..084343329fef3691c293e69919bdf5ba12bbaa9d 100644
--- a/tests/PHPUnit/Core/DataTable/Filter/ExcludeLowPopulationTest.php
+++ b/tests/PHPUnit/Core/DataTable/Filter/ExcludeLowPopulationTest.php
@@ -5,19 +5,23 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\DataTable;
+use Piwik\DataTable\Filter\ExcludeLowPopulation;
+use Piwik\DataTable\Row;
+
 class DataTable_Filter_ExcludeLowPopulationTest extends PHPUnit_Framework_TestCase
 {
     protected function getTestDataTable()
     {
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
         $table->addRowsFromArray(
             array(
-                 array(Piwik_DataTable_Row::COLUMNS => array('label' => 'zero', 'count' => 0)),
-                 array(Piwik_DataTable_Row::COLUMNS => array('label' => 'one', 'count' => 1)),
-                 array(Piwik_DataTable_Row::COLUMNS => array('label' => 'onedotfive', 'count' => 1.5)),
-                 array(Piwik_DataTable_Row::COLUMNS => array('label' => 'ten', 'count' => 10)),
-                 array(Piwik_DataTable_Row::COLUMNS => array('label' => 'ninety', 'count' => 90)),
-                 array(Piwik_DataTable_Row::COLUMNS => array('label' => 'hundred', 'count' => 100)),
+                 array(Row::COLUMNS => array('label' => 'zero', 'count' => 0)),
+                 array(Row::COLUMNS => array('label' => 'one', 'count' => 1)),
+                 array(Row::COLUMNS => array('label' => 'onedotfive', 'count' => 1.5)),
+                 array(Row::COLUMNS => array('label' => 'ten', 'count' => 10)),
+                 array(Row::COLUMNS => array('label' => 'ninety', 'count' => 90)),
+                 array(Row::COLUMNS => array('label' => 'hundred', 'count' => 100)),
             )
         );
         return $table;
@@ -33,7 +37,7 @@ class DataTable_Filter_ExcludeLowPopulationTest extends PHPUnit_Framework_TestCa
     public function testStandardTable()
     {
         $table = $this->getTestDataTable();
-        $filter = new Piwik_DataTable_Filter_ExcludeLowPopulation($table, 'count', 1.1);
+        $filter = new ExcludeLowPopulation($table, 'count', 1.1);
         $filter->filter($table);
         $this->assertEquals(4, $table->getRowsCount());
         $this->assertEquals(array(1.5, 10, 90, 100), $table->getColumn('count'));
@@ -49,7 +53,7 @@ class DataTable_Filter_ExcludeLowPopulationTest extends PHPUnit_Framework_TestCa
     public function testFilterEqualOneDoesFilter()
     {
         $table = $this->getTestDataTable();
-        $filter = new Piwik_DataTable_Filter_ExcludeLowPopulation($table, 'count', 1);
+        $filter = new ExcludeLowPopulation($table, 'count', 1);
         $filter->filter($table);
         $this->assertEquals(5, $table->getRowsCount());
     }
@@ -64,7 +68,7 @@ class DataTable_Filter_ExcludeLowPopulationTest extends PHPUnit_Framework_TestCa
     public function testFilterEqualZeroDoesFilter()
     {
         $table = $this->getTestDataTable();
-        $filter = new Piwik_DataTable_Filter_ExcludeLowPopulation($table, 'count', 0);
+        $filter = new ExcludeLowPopulation($table, 'count', 0);
         $filter->filter($table);
         $this->assertEquals(3, $table->getRowsCount());
         $this->assertEquals(array(10, 90, 100), $table->getColumn('count'));
@@ -80,7 +84,7 @@ class DataTable_Filter_ExcludeLowPopulationTest extends PHPUnit_Framework_TestCa
     public function testFilterSpecifyExcludeLowPopulationThresholdDoesFilter()
     {
         $table = $this->getTestDataTable();
-        $filter = new Piwik_DataTable_Filter_ExcludeLowPopulation($table, 'count', 0, 0.4); //40%
+        $filter = new ExcludeLowPopulation($table, 'count', 0, 0.4); //40%
         $filter->filter($table);
         $this->assertEquals(2, $table->getRowsCount());
         $this->assertEquals(array(90, 100), $table->getColumn('count'));
@@ -98,9 +102,9 @@ class DataTable_Filter_ExcludeLowPopulationTest extends PHPUnit_Framework_TestCa
     public function testFilterLowpop1()
     {
 
-        $idcol = Piwik_DataTable_Row::COLUMNS;
+        $idcol = Row::COLUMNS;
 
-        $table = new Piwik_DataTable();
+        $table = new DataTable();
         $rows = array(
             array($idcol => array('label' => 'google', 'nb_visits' => 897)), //0
             array($idcol => array('label' => 'ask', 'nb_visits' => -152)), //1
@@ -114,7 +118,7 @@ class DataTable_Filter_ExcludeLowPopulationTest extends PHPUnit_Framework_TestCa
         );
         $table->addRowsFromArray($rows);
 
-        $expectedtable = new Piwik_DataTable();
+        $expectedtable = new DataTable();
         $rows = array(
             array($idcol => array('label' => 'google', 'nb_visits' => 897)), //0
             array($idcol => array('label' => 'piwik', 'nb_visits' => 1.5)), //2
@@ -124,9 +128,9 @@ class DataTable_Filter_ExcludeLowPopulationTest extends PHPUnit_Framework_TestCa
         );
         $expectedtable->addRowsFromArray($rows);
 
-        $filter = new Piwik_DataTable_Filter_ExcludeLowPopulation($table, 'nb_visits', 1.4);
+        $filter = new ExcludeLowPopulation($table, 'nb_visits', 1.4);
         $filter->filter($table);
 
-        $this->assertTrue(Piwik_DataTable::isEqual($table, $expectedtable));
+        $this->assertTrue(DataTable::isEqual($table, $expectedtable));
     }
 }
diff --git a/tests/PHPUnit/Core/DataTable/Filter/LimitTest.php b/tests/PHPUnit/Core/DataTable/Filter/LimitTest.php
index 37a9e20d587e2099d2d20971b836a327c0702c2e..21d713c22e07d1c4b6a11f2fec2d7d0323bfd7dc 100644
--- a/tests/PHPUnit/Core/DataTable/Filter/LimitTest.php
+++ b/tests/PHPUnit/Core/DataTable/Filter/LimitTest.php
@@ -5,17 +5,21 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\DataTable;
+use Piwik\DataTable\Filter\Limit;
+use Piwik\DataTable\Row;
+
 class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
 {
     /**
      * Returns table used for the tests
      *
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     protected function getDataTableCount10()
     {
-        $table = new Piwik_DataTable;
-        $idcol = Piwik_DataTable_Row::COLUMNS;
+        $table = new DataTable;
+        $idcol = Row::COLUMNS;
         $rows = array(
             array($idcol => array('label' => 'google', 'idRow' => 0)),
             array($idcol => array('label' => 'ask', 'idRow' => 1)),
@@ -26,7 +30,7 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
             array($idcol => array('label' => 'test', 'idRow' => 6)),
             array($idcol => array('label' => 'amazing', 'idRow' => 7)),
             array($idcol => array('label' => 'great', 'idRow' => 8)),
-            Piwik_DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => 'summary row', 'idRow' => 9)),
+            DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => 'summary row', 'idRow' => 9)),
         );
         $table->addRowsFromArray($rows);
         return $table;
@@ -44,7 +48,7 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
         $offset = 2;
         $limit = 3;
         $table = $this->getDataTableCount10();
-        $filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+        $filter = new Limit($table, $offset, $limit);
         $filter->filter($table);
         $this->assertEquals(3, $table->getRowsCount());
         $this->assertEquals(2, $table->getFirstRow()->getColumn('idRow'));
@@ -64,7 +68,7 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
         $offset = 2;
         $limit = 7;
         $table = $this->getDataTableCount10();
-        $filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+        $filter = new Limit($table, $offset, $limit);
         $filter->filter($table);
         $this->assertEquals(7, $table->getRowsCount());
         $this->assertEquals(2, $table->getFirstRow()->getColumn('idRow'));
@@ -85,7 +89,7 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
         $limit = 10;
         $table = $this->getDataTableCount10();
         $this->assertEquals(10, $table->getRowsCountBeforeLimitFilter());
-        $filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+        $filter = new Limit($table, $offset, $limit);
         $filter->filter($table);
         $this->assertEquals(10, $table->getRowsCount());
         $this->assertEquals(0, $table->getFirstRow()->getColumn('idRow'));
@@ -106,7 +110,7 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
         $limit = 20;
         $table = $this->getDataTableCount10();
         $this->assertEquals(10, $table->getRowsCountBeforeLimitFilter());
-        $filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+        $filter = new Limit($table, $offset, $limit);
         $filter->filter($table);
         $this->assertEquals(5, $table->getRowsCount());
         $this->assertEquals(5, $table->getFirstRow()->getColumn('idRow'));
@@ -125,7 +129,7 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
     {
         $offset = 1;
         $table = $this->getDataTableCount10();
-        $filter = new Piwik_DataTable_Filter_Limit($table, $offset);
+        $filter = new Limit($table, $offset);
         $filter->filter($table);
         $this->assertEquals(9, $table->getRowsCount());
         $this->assertEquals(1, $table->getFirstRow()->getColumn('idRow'));
@@ -145,7 +149,7 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
         $offset = 9;
         $limit = 1;
         $table = $this->getDataTableCount10();
-        $filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+        $filter = new Limit($table, $offset, $limit);
         $filter->filter($table);
         $this->assertEquals(1, $table->getRowsCount());
         $this->assertEquals(9, $table->getFirstRow()->getColumn('idRow'));
@@ -165,7 +169,7 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
         $offset = 9;
         $limit = 100;
         $table = $this->getDataTableCount10();
-        $filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+        $filter = new Limit($table, $offset, $limit);
         $filter->filter($table);
         $this->assertEquals(1, $table->getRowsCount());
         $this->assertEquals(9, $table->getFirstRow()->getColumn('idRow'));
@@ -185,7 +189,7 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
         $offset = 8;
         $limit = 3;
         $table = $this->getDataTableCount10();
-        $filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+        $filter = new Limit($table, $offset, $limit);
         $filter->filter($table);
         $this->assertEquals(2, $table->getRowsCount());
         $this->assertEquals(8, $table->getFirstRow()->getColumn('idRow'));
@@ -205,7 +209,7 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
         $offset = 10;
         $limit = 10;
         $table = $this->getDataTableCount10();
-        $filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+        $filter = new Limit($table, $offset, $limit);
         $filter->filter($table);
         $this->assertEquals(0, $table->getRowsCount());
         $this->assertEquals(10, $table->getRowsCountBeforeLimitFilter());
@@ -223,7 +227,7 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
         $offset = 0;
         $limit = 0;
         $table = $this->getDataTableCount10();
-        $filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+        $filter = new Limit($table, $offset, $limit);
         $filter->filter($table);
         $this->assertEquals(0, $table->getRowsCount());
         $this->assertEquals(10, $table->getRowsCountBeforeLimitFilter());
@@ -239,9 +243,9 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
      */
     public function testFilterOffsetLimit()
     {
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
 
-        $idcol = Piwik_DataTable_Row::COLUMNS;
+        $idcol = Row::COLUMNS;
 
         $rows = array(
             array($idcol => array('label' => 'google')), //0
@@ -258,7 +262,7 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
         $expectedtable = clone $table;
         $expectedtable->deleteRows(array(0, 1, 6));
 
-        $filter = new Piwik_DataTable_Filter_Limit($table, 2, 4);
+        $filter = new Limit($table, 2, 4);
         $filter->filter($table);
 
         $colAfter = $colExpected = array();
@@ -278,9 +282,9 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
      */
     public function testFilterOffsetLimitOffbound()
     {
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
 
-        $idcol = Piwik_DataTable_Row::COLUMNS;
+        $idcol = Row::COLUMNS;
 
         $rows = array(
             array($idcol => array('label' => 'google')), //0
@@ -297,7 +301,7 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
         $expectedtable = clone $table;
         $expectedtable->deleteRows(array(0, 1, 3, 4, 5, 6));
 
-        $filter = new Piwik_DataTable_Filter_Limit($table, 2, 1);
+        $filter = new Limit($table, 2, 1);
         $filter->filter($table);
 
         $colAfter = $colExpected = array();
@@ -317,9 +321,9 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
      */
     public function testFilterOffsetLimit2()
     {
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
 
-        $idcol = Piwik_DataTable_Row::COLUMNS;
+        $idcol = Row::COLUMNS;
 
         $rows = array(
             array($idcol => array('label' => 'google')), //0
@@ -335,7 +339,7 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
 
         $expectedtable = clone $table;
 
-        $filter = new Piwik_DataTable_Filter_Limit($table, 0, 15);
+        $filter = new Limit($table, 0, 15);
         $filter->filter($table);
 
         $colAfter = $colExpected = array();
@@ -355,9 +359,9 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
      */
     public function testFilterOffsetLimit3()
     {
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
 
-        $idcol = Piwik_DataTable_Row::COLUMNS;
+        $idcol = Row::COLUMNS;
 
         $rows = array(
             array($idcol => array('label' => 'google')), //0
@@ -371,9 +375,9 @@ class DataTable_Filter_LimitTest extends PHPUnit_Framework_TestCase
 
         $table->addRowsFromArray($rows);
 
-        $expectedtable = new Piwik_DataTable;
+        $expectedtable = new DataTable;
 
-        $filter = new Piwik_DataTable_Filter_Limit($table, 8, 15);
+        $filter = new Limit($table, 8, 15);
         $filter->filter($table);
 
         $colAfter = $colExpected = array();
diff --git a/tests/PHPUnit/Core/DataTable/Filter/PatternRecursiveTest.php b/tests/PHPUnit/Core/DataTable/Filter/PatternRecursiveTest.php
index 5efc2dac7abec3c8033def4750a248a50575a0e3..f9e7e0da27b30b0c924a56d56030bef7e32dd83d 100644
--- a/tests/PHPUnit/Core/DataTable/Filter/PatternRecursiveTest.php
+++ b/tests/PHPUnit/Core/DataTable/Filter/PatternRecursiveTest.php
@@ -5,32 +5,35 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\DataTable;
+use Piwik\DataTable\Row;
+
 class DataTable_Filter_PatternRecursiveTest extends PHPUnit_Framework_TestCase
 {
     /**
      * Returns a data table for testing
-     * @return Piwik_DataTable
+     * @return DataTable
      */
     protected function getTable()
     {
-        $subtableAskPath1 = new Piwik_DataTable();
+        $subtableAskPath1 = new DataTable();
         $subtableAskPath1->addRowsFromArray(array(
-                                                 array(Piwik_DataTable_Row::COLUMNS => array('label' => 'path1-index-page.html')),
-                                                 array(Piwik_DataTable_Row::COLUMNS => array('label' => 'another-page')),
+                                                 array(Row::COLUMNS => array('label' => 'path1-index-page.html')),
+                                                 array(Row::COLUMNS => array('label' => 'another-page')),
                                             ));
 
-        $subtableAsk = new Piwik_DataTable();
+        $subtableAsk = new DataTable();
         $subtableAsk->addRowsFromArray(array(
-                                            array(Piwik_DataTable_Row::COLUMNS              => array('label' => 'path1'),
-                                                  Piwik_DataTable_Row::DATATABLE_ASSOCIATED => $subtableAskPath1),
-                                            array(Piwik_DataTable_Row::COLUMNS => array('label' => 'index.html')),
+                                            array(Row::COLUMNS              => array('label' => 'path1'),
+                                                  Row::DATATABLE_ASSOCIATED => $subtableAskPath1),
+                                            array(Row::COLUMNS => array('label' => 'index.html')),
                                        ));
 
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
         $rows = array(
-            array(Piwik_DataTable_Row::COLUMNS              => array('label' => 'http://www.ask.com'),
-                  Piwik_DataTable_Row::DATATABLE_ASSOCIATED => $subtableAsk),
-            array(Piwik_DataTable_Row::COLUMNS => array('label' => 'yahoo')),
+            array(Row::COLUMNS              => array('label' => 'http://www.ask.com'),
+                  Row::DATATABLE_ASSOCIATED => $subtableAsk),
+            array(Row::COLUMNS => array('label' => 'yahoo')),
         );
         $table->addRowsFromArray($rows);
         return $table;
diff --git a/tests/PHPUnit/Core/DataTable/Filter/PatternTest.php b/tests/PHPUnit/Core/DataTable/Filter/PatternTest.php
index d90de04a44d3606b72b30a914561546c156d2056..b6f1893d8b1df2aee45aae69c63674683f0d347e 100644
--- a/tests/PHPUnit/Core/DataTable/Filter/PatternTest.php
+++ b/tests/PHPUnit/Core/DataTable/Filter/PatternTest.php
@@ -5,6 +5,9 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\DataTable;
+use Piwik\DataTable\Row;
+
 class DataTable_Filter_PatternTest extends PHPUnit_Framework_TestCase
 {
     /**
@@ -33,16 +36,16 @@ class DataTable_Filter_PatternTest extends PHPUnit_Framework_TestCase
      */
     public function testFilterPattern($test)
     {
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
 
-        $idcol = Piwik_DataTable_Row::COLUMNS;
+        $idcol = Row::COLUMNS;
 
         $rows = array(
             array($idcol => array('label' => 'google')),
             array($idcol => array('label' => 'ask')),
             array($idcol => array('label' => 'piwik')),
             array($idcol => array('label' => 'yahoo')),
-            array(Piwik_DataTable_Row::METADATA => array('label' => 'amazon')),
+            array(Row::METADATA => array('label' => 'amazon')),
             array($idcol => array('label' => '2389752/47578949')),
             array($idcol => array('label' => 'Q*(%&*("$&%*(&"$*")"))'))
         );
diff --git a/tests/PHPUnit/Core/DataTable/Filter/RangeCheckTest.php b/tests/PHPUnit/Core/DataTable/Filter/RangeCheckTest.php
index 397333ce29d58ef5f00d8d8e6b0b18b1342c4ddc..9a985f3b837045ec9661683715b4aee0d866b455 100644
--- a/tests/PHPUnit/Core/DataTable/Filter/RangeCheckTest.php
+++ b/tests/PHPUnit/Core/DataTable/Filter/RangeCheckTest.php
@@ -5,6 +5,10 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\DataTable;
+use Piwik\DataTable\Filter\RangeCheck;
+use Piwik\DataTable\Row;
+
 class DataTable_Filter_RangeCheckTest extends PHPUnit_Framework_TestCase
 {
     /**
@@ -16,15 +20,15 @@ class DataTable_Filter_RangeCheckTest extends PHPUnit_Framework_TestCase
      */
     public function testRangeCheckNormalDataTable()
     {
-        $table = new Piwik_DataTable();
+        $table = new DataTable();
         $table->addRowsFromArray(array(
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'ask', 'count' => 3)), // --> 5
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'nintendo', 'count' => 5)), // --> 5
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'test', 'count' => 7.5)), // --> 7.5
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'google', 'count' => 9)), // --> 9
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'yahoo', 'count' => 10.1) // --> 10
+                                      array(Row::COLUMNS => array('label' => 'ask', 'count' => 3)), // --> 5
+                                      array(Row::COLUMNS => array('label' => 'nintendo', 'count' => 5)), // --> 5
+                                      array(Row::COLUMNS => array('label' => 'test', 'count' => 7.5)), // --> 7.5
+                                      array(Row::COLUMNS => array('label' => 'google', 'count' => 9)), // --> 9
+                                      array(Row::COLUMNS => array('label' => 'yahoo', 'count' => 10.1) // --> 10
                                       )));
-        $filter = new Piwik_DataTable_Filter_RangeCheck($table, 'count', 5, 10);
+        $filter = new RangeCheck($table, 'count', 5, 10);
         $filter->filter($table);
         $expectedOrder = array(5, 5, 7.5, 9, 10);
 
@@ -40,16 +44,16 @@ class DataTable_Filter_RangeCheckTest extends PHPUnit_Framework_TestCase
      */
     public function testRangeCheckNormalDataTableNonIntegerValues()
     {
-        $table = new Piwik_DataTable();
+        $table = new DataTable();
         $table->addRowsFromArray(array(
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'ask', 'count' => '3')), // 3 is below minimum
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'nintendo', 'count' => 'test')), // no number is below minimum
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'test', 'count' => 0x1232)), // number is over maximum
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'piwik', 'count' => 0x005)), // converted to 5 is ok
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'google', 'count' => '9test')), // converted to 9 is ok, so string will be kept
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'yahoo', 'count' => 'test4') // can't be converted to number
+                                      array(Row::COLUMNS => array('label' => 'ask', 'count' => '3')), // 3 is below minimum
+                                      array(Row::COLUMNS => array('label' => 'nintendo', 'count' => 'test')), // no number is below minimum
+                                      array(Row::COLUMNS => array('label' => 'test', 'count' => 0x1232)), // number is over maximum
+                                      array(Row::COLUMNS => array('label' => 'piwik', 'count' => 0x005)), // converted to 5 is ok
+                                      array(Row::COLUMNS => array('label' => 'google', 'count' => '9test')), // converted to 9 is ok, so string will be kept
+                                      array(Row::COLUMNS => array('label' => 'yahoo', 'count' => 'test4') // can't be converted to number
                                       )));
-        $filter = new Piwik_DataTable_Filter_RangeCheck($table, 'count', 3.97, 10);
+        $filter = new RangeCheck($table, 'count', 3.97, 10);
         $filter->filter($table);
         $expectedOrder = array(3.97, 3.97, 10, 5, '9test', 3.97);
 
diff --git a/tests/PHPUnit/Core/DataTable/Filter/SortTest.php b/tests/PHPUnit/Core/DataTable/Filter/SortTest.php
index eb793bd13622e8aec95695125d5b588c99007b40..204d98f432890c2bf50c340b16b9dc9178a9a07f 100644
--- a/tests/PHPUnit/Core/DataTable/Filter/SortTest.php
+++ b/tests/PHPUnit/Core/DataTable/Filter/SortTest.php
@@ -5,6 +5,10 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\DataTable;
+use Piwik\DataTable\Filter\Sort;
+use Piwik\DataTable\Row;
+
 class DataTable_Filter_SortTest extends PHPUnit_Framework_TestCase
 {
     /**
@@ -16,13 +20,13 @@ class DataTable_Filter_SortTest extends PHPUnit_Framework_TestCase
      */
     public function testNormalSortDescending()
     {
-        $table = new Piwik_DataTable();
+        $table = new DataTable();
         $table->addRowsFromArray(array(
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'ask', 'count' => 100)),
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'nintendo', 'count' => 0)),
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'yahoo', 'count' => 10)
+                                      array(Row::COLUMNS => array('label' => 'ask', 'count' => 100)),
+                                      array(Row::COLUMNS => array('label' => 'nintendo', 'count' => 0)),
+                                      array(Row::COLUMNS => array('label' => 'yahoo', 'count' => 10)
                                       )));
-        $filter = new Piwik_DataTable_Filter_Sort($table, 'count', 'desc');
+        $filter = new Sort($table, 'count', 'desc');
         $filter->filter($table);
         $expectedOrder = array('ask', 'yahoo', 'nintendo');
         $this->assertEquals($expectedOrder, $table->getColumn('label'));
@@ -37,13 +41,13 @@ class DataTable_Filter_SortTest extends PHPUnit_Framework_TestCase
      */
     public function testNormalSortAscending()
     {
-        $table = new Piwik_DataTable();
+        $table = new DataTable();
         $table->addRowsFromArray(array(
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'ask', 'count' => 100.5)),
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'nintendo', 'count' => 0.5)),
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'yahoo', 'count' => 10.5)
+                                      array(Row::COLUMNS => array('label' => 'ask', 'count' => 100.5)),
+                                      array(Row::COLUMNS => array('label' => 'nintendo', 'count' => 0.5)),
+                                      array(Row::COLUMNS => array('label' => 'yahoo', 'count' => 10.5)
                                       )));
-        $filter = new Piwik_DataTable_Filter_Sort($table, 'count', 'asc');
+        $filter = new Sort($table, 'count', 'asc');
         $filter->filter($table);
         $expectedOrder = array('nintendo', 'yahoo', 'ask');
         $this->assertEquals($expectedOrder, $table->getColumn('label'));
@@ -58,16 +62,16 @@ class DataTable_Filter_SortTest extends PHPUnit_Framework_TestCase
      */
     public function testMissingColumnValuesShouldAppearLastAfterSortAsc()
     {
-        $table = new Piwik_DataTable();
+        $table = new DataTable();
         $table->addRowsFromArray(array(
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'nintendo', 'count' => 1)),
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'nocolumn')),
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'nocolumnbis')),
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'ask', 'count' => 2)),
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'amazing')),
-                                      Piwik_DataTable::ID_SUMMARY_ROW => array(Piwik_DataTable_Row::COLUMNS => array('label' => 'summary', 'count' => 10)
+                                      array(Row::COLUMNS => array('label' => 'nintendo', 'count' => 1)),
+                                      array(Row::COLUMNS => array('label' => 'nocolumn')),
+                                      array(Row::COLUMNS => array('label' => 'nocolumnbis')),
+                                      array(Row::COLUMNS => array('label' => 'ask', 'count' => 2)),
+                                      array(Row::COLUMNS => array('label' => 'amazing')),
+                                      DataTable::ID_SUMMARY_ROW => array(Row::COLUMNS => array('label' => 'summary', 'count' => 10)
                                       )));
-        $filter = new Piwik_DataTable_Filter_Sort($table, 'count', 'asc');
+        $filter = new Sort($table, 'count', 'asc');
         $filter->filter($table);
         $expectedOrder = array('nintendo', 'ask', 'amazing', 'nocolumnbis', 'nocolumn', 'summary');
         $this->assertEquals($expectedOrder, $table->getColumn('label'));
@@ -82,14 +86,14 @@ class DataTable_Filter_SortTest extends PHPUnit_Framework_TestCase
      */
     public function testMissingColumnValuesShouldAppearLastAfterSortDesc()
     {
-        $table = new Piwik_DataTable();
+        $table = new DataTable();
         $table->addRowsFromArray(array(
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'nintendo', 'count' => 1)),
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'ask', 'count' => 2)),
-                                      array(Piwik_DataTable_Row::COLUMNS => array('label' => 'amazing')),
-                                      Piwik_DataTable::ID_SUMMARY_ROW => array(Piwik_DataTable_Row::COLUMNS => array('label' => 'summary', 'count' => 10)
+                                      array(Row::COLUMNS => array('label' => 'nintendo', 'count' => 1)),
+                                      array(Row::COLUMNS => array('label' => 'ask', 'count' => 2)),
+                                      array(Row::COLUMNS => array('label' => 'amazing')),
+                                      DataTable::ID_SUMMARY_ROW => array(Row::COLUMNS => array('label' => 'summary', 'count' => 10)
                                       )));
-        $filter = new Piwik_DataTable_Filter_Sort($table, 'count', 'desc');
+        $filter = new Sort($table, 'count', 'desc');
         $filter->filter($table);
         $expectedOrder = array('ask', 'nintendo', 'amazing', 'summary');
         $this->assertEquals($expectedOrder, $table->getColumn('label'));
@@ -105,8 +109,8 @@ class DataTable_Filter_SortTest extends PHPUnit_Framework_TestCase
      */
     public function testFilterSortString()
     {
-        $idcol = Piwik_DataTable_Row::COLUMNS;
-        $table = new Piwik_DataTable();
+        $idcol = Row::COLUMNS;
+        $table = new DataTable();
         $rows = array(
             array($idcol => array('label' => 'google')), //0
             array($idcol => array('label' => 'ask')), //1
@@ -117,7 +121,7 @@ class DataTable_Filter_SortTest extends PHPUnit_Framework_TestCase
             array($idcol => array('label' => 'Q*(%&*("$&%*(&"$*")"))')) //6
         );
         $table->addRowsFromArray($rows);
-        $expectedtable = new Piwik_DataTable();
+        $expectedtable = new DataTable();
         $rows = array(
             array($idcol => array('label' => '238975247578949')), //5
             array($idcol => array('label' => 'amazon')), //4
@@ -128,16 +132,16 @@ class DataTable_Filter_SortTest extends PHPUnit_Framework_TestCase
             array($idcol => array('label' => 'yahoo')) //3
         );
         $expectedtable->addRowsFromArray($rows);
-        $expectedtableReverse = new Piwik_DataTable();
+        $expectedtableReverse = new DataTable();
         $expectedtableReverse->addRowsFromArray(array_reverse($rows));
 
-        $filter = new Piwik_DataTable_Filter_Sort($table, 'label', 'asc');
+        $filter = new Sort($table, 'label', 'asc');
         $filter->filter($table);
-        $this->assertTrue(Piwik_DataTable::isEqual($expectedtable, $table));
+        $this->assertTrue(DataTable::isEqual($expectedtable, $table));
 
-        $filter = new Piwik_DataTable_Filter_Sort($table, 'label', 'desc');
+        $filter = new Sort($table, 'label', 'desc');
         $filter->filter($table);
-        $this->assertTrue(Piwik_DataTable::isEqual($table, $expectedtableReverse));
+        $this->assertTrue(DataTable::isEqual($table, $expectedtableReverse));
     }
 
     /**
@@ -150,8 +154,8 @@ class DataTable_Filter_SortTest extends PHPUnit_Framework_TestCase
      */
     public function testFilterSortNumeric()
     {
-        $idcol = Piwik_DataTable_Row::COLUMNS;
-        $table = new Piwik_DataTable();
+        $idcol = Row::COLUMNS;
+        $table = new DataTable();
         $rows = array(
             array($idcol => array('label' => 'google', 'nb_visits' => 897)), //0
             array($idcol => array('label' => 'ask', 'nb_visits' => -152)), //1
@@ -162,7 +166,7 @@ class DataTable_Filter_SortTest extends PHPUnit_Framework_TestCase
             array($idcol => array('label' => 'Q*(%&*', 'nb_visits' => 1)) //6
         );
         $table->addRowsFromArray($rows);
-        $expectedtable = new Piwik_DataTable();
+        $expectedtable = new DataTable();
         $rows = array(
             array($idcol => array('label' => 'ask', 'nb_visits' => -152)), //1
             array($idcol => array('label' => '238949', 'nb_visits' => 0)), //5
@@ -173,15 +177,15 @@ class DataTable_Filter_SortTest extends PHPUnit_Framework_TestCase
             array($idcol => array('label' => 'google', 'nb_visits' => 897)) //0
         );
         $expectedtable->addRowsFromArray($rows);
-        $expectedtableReverse = new Piwik_DataTable();
+        $expectedtableReverse = new DataTable();
         $expectedtableReverse->addRowsFromArray(array_reverse($rows));
 
-        $filter = new Piwik_DataTable_Filter_Sort($table, 'nb_visits', 'asc');
+        $filter = new Sort($table, 'nb_visits', 'asc');
         $filter->filter($table);
-        $this->assertTrue(Piwik_DataTable::isEqual($table, $expectedtable));
+        $this->assertTrue(DataTable::isEqual($table, $expectedtable));
 
-        $filter = new Piwik_DataTable_Filter_Sort($table, 'nb_visits', 'desc');
+        $filter = new Sort($table, 'nb_visits', 'desc');
         $filter->filter($table);
-        $this->assertTrue(Piwik_DataTable::isEqual($table, $expectedtableReverse));
+        $this->assertTrue(DataTable::isEqual($table, $expectedtableReverse));
     }
 }
diff --git a/tests/PHPUnit/Core/DataTable/Filter/TruncateTest.php b/tests/PHPUnit/Core/DataTable/Filter/TruncateTest.php
index 1d46658e63a1711467a59017b431fd985e505b65..c499350066b7a8d092080c2e494b7192169ba957 100644
--- a/tests/PHPUnit/Core/DataTable/Filter/TruncateTest.php
+++ b/tests/PHPUnit/Core/DataTable/Filter/TruncateTest.php
@@ -5,6 +5,10 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\DataTable;
+use Piwik\DataTable\Filter\Truncate;
+use Piwik\DataTable\Row;
+
 class DataTable_Filter_TruncateTest extends PHPUnit_Framework_TestCase
 {
     /**
@@ -17,20 +21,20 @@ class DataTable_Filter_TruncateTest extends PHPUnit_Framework_TestCase
     {
         // remark: this unit test would become invalid and would need to be rewritten if
         // AddSummaryRow filter stops calling getRowsCount() on the DataTable being filtered.
-        $mockedDataTable = $this->getMock('Piwik_DataTable', array('getRowsCount'));
+        $mockedDataTable = $this->getMock('\Piwik\DataTable', array('getRowsCount'));
         $mockedDataTable->expects($this->never())->method('getRowsCount');
 
-        $dataTableBeingFiltered = new Piwik_DataTable();
-        $rowBeingFiltered = new Piwik_DataTable_Row();
+        $dataTableBeingFiltered = new DataTable();
+        $rowBeingFiltered = new Row();
         $dataTableBeingFiltered->addRow($rowBeingFiltered);
 
-        // we simulate the fact that the value of Piwik_DataTable_Row::DATATABLE_ASSOCIATED retrieved
-        // from the database is in conflict with one of the Piwik_DataTable_Manager managed table identifiers.
+        // we simulate the fact that the value of Row::DATATABLE_ASSOCIATED retrieved
+        // from the database is in conflict with one of the Manager managed table identifiers.
         // This is a rare but legitimate case as identifiers are not thoroughly synchronized
         // when the expanded parameter is false.
-        $rowBeingFiltered->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] = $mockedDataTable->getId();
+        $rowBeingFiltered->c[Row::DATATABLE_ASSOCIATED] = $mockedDataTable->getId();
 
-        $filter = new Piwik_DataTable_Filter_Truncate($dataTableBeingFiltered, 1);
+        $filter = new Truncate($dataTableBeingFiltered, 1);
         $filter->filter($dataTableBeingFiltered);
     }
 
@@ -43,22 +47,22 @@ class DataTable_Filter_TruncateTest extends PHPUnit_Framework_TestCase
      */
     public function testForInfiniteRecursion()
     {
-        $dataTableBeingFiltered = new Piwik_DataTable();
+        $dataTableBeingFiltered = new DataTable();
 
         // remark: this unit test would become invalid and would need to be rewritten if
         // Truncate filter stops calling getIdSubDataTable() on rows associated with a SubDataTable
-        $rowBeingFiltered = $this->getMock('Piwik_DataTable_Row', array('getIdSubDataTable'));
+        $rowBeingFiltered = $this->getMock('Row', array('getIdSubDataTable'));
         $rowBeingFiltered->expects($this->never())->method('getIdSubDataTable');
 
         $dataTableBeingFiltered->addRow($rowBeingFiltered);
 
-        // we simulate a legitimate but rare circular reference between a Piwik_DataTable_Row and its
-        // enclosing Piwik_DataTable.
+        // we simulate a legitimate but rare circular reference between a Row and its
+        // enclosing DataTable.
         // This can happen because identifiers are not thoroughly synchronized when the expanded parameter
         // is false.
-        $rowBeingFiltered->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] = $dataTableBeingFiltered->getId();
+        $rowBeingFiltered->c[Row::DATATABLE_ASSOCIATED] = $dataTableBeingFiltered->getId();
 
-        $filter = new Piwik_DataTable_Filter_Truncate($dataTableBeingFiltered, 1);
+        $filter = new Truncate($dataTableBeingFiltered, 1);
         $filter->filter($dataTableBeingFiltered);
     }
 }
diff --git a/tests/PHPUnit/Core/DataTable/ArrayTest.php b/tests/PHPUnit/Core/DataTable/MapTest.php
old mode 100755
new mode 100644
similarity index 80%
rename from tests/PHPUnit/Core/DataTable/ArrayTest.php
rename to tests/PHPUnit/Core/DataTable/MapTest.php
index 2c1cc4e069df59d13e5e303fc912b2ecace85d09..2ac19275a9a10c1d9f3a9017b95491f276eb3f6d
--- a/tests/PHPUnit/Core/DataTable/ArrayTest.php
+++ b/tests/PHPUnit/Core/DataTable/MapTest.php
@@ -1,22 +1,25 @@
 <?php
 use Piwik\Config;
+use Piwik\DataTable;
+use Piwik\DataTable\Manager;
+use Piwik\DataTable\Row;
 
-class Test_Piwik_DataTable_Array extends PHPUnit_Framework_TestCase
+class Test_DataTable_Map extends PHPUnit_Framework_TestCase
 {
     public function setUp()
     {
         parent::setUp();
         Config::getInstance()->setTestEnvironment();
-        Piwik_DataTable_Manager::getInstance()->deleteAll();
+        Manager::getInstance()->deleteAll();
     }
 
     private function createTestDataTable()
     {
-        $result = new Piwik_DataTable();
+        $result = new DataTable();
 
         $result->addRowsFromArray(array(
-                                       array(Piwik_DataTable_Row::COLUMNS => array('label' => 'row1', 'col1' => 1)),
-                                       array(Piwik_DataTable_Row::COLUMNS => array('label' => 'row2', 'col1' => 2))
+                                       array(Row::COLUMNS => array('label' => 'row1', 'col1' => 1)),
+                                       array(Row::COLUMNS => array('label' => 'row2', 'col1' => 2))
                                   ));
 
         return $result;
@@ -24,7 +27,7 @@ class Test_Piwik_DataTable_Array extends PHPUnit_Framework_TestCase
 
     private function createInstanceWithDataTables()
     {
-        $dataTable = new Piwik_DataTable_Array();
+        $dataTable = new DataTable\Map();
 
         $subDataTable1 = $this->createTestDataTable();
         $dataTable->addTable($subDataTable1, 'subDataTable1');
@@ -37,7 +40,7 @@ class Test_Piwik_DataTable_Array extends PHPUnit_Framework_TestCase
 
     private function createInstanceWithDataTableArrays()
     {
-        $dataTable = new Piwik_DataTable_Array();
+        $dataTable = new DataTable\Map();
 
         $subDataTableArray1 = $this->createInstanceWithDataTables();
         $dataTable->addTable($subDataTableArray1, 'subArray1');
@@ -49,7 +52,7 @@ class Test_Piwik_DataTable_Array extends PHPUnit_Framework_TestCase
     }
 
     /**
-     * Tests that Piwik_DataTable_Array::mergeChildren works when the DataTable_Array contains DataTables.
+     * Tests that Set::mergeChildren works when the DataTable_Array contains DataTables.
      * @group Core
      * @group DataTable
      * @group DataTable_Array
@@ -61,7 +64,7 @@ class Test_Piwik_DataTable_Array extends PHPUnit_Framework_TestCase
         $result = $dataTable->mergeChildren();
 
         // check that the result is a DataTable w/ 4 rows
-        $this->assertInstanceOf('Piwik_DataTable', $result);
+        $this->assertInstanceOf('DataTable', $result);
         $this->assertEquals(4, $result->getRowsCount());
 
         // check that the first two rows have 'subDataTable1' as the label
@@ -80,7 +83,7 @@ class Test_Piwik_DataTable_Array extends PHPUnit_Framework_TestCase
     }
 
     /**
-     * Tests that Piwik_DataTable_Array::mergeChildren works when the DataTable_Array contains DataTable_Arrays.
+     * Tests that Set::mergeChildren works when the DataTable_Array contains DataTable_Arrays.
      * @group Core
      * @group DataTable
      * @group DataTable_Array
@@ -92,12 +95,12 @@ class Test_Piwik_DataTable_Array extends PHPUnit_Framework_TestCase
         $result = $dataTable->mergeChildren();
 
         // check that the result is a DataTable_Array w/ two DataTable children
-        $this->assertInstanceOf('Piwik_DataTable_Array', $result);
+        $this->assertInstanceOf('Set', $result);
         $this->assertEquals(2, $result->getRowsCount());
 
         // check that the first sub-DataTable is a DataTable with 4 rows
         $subDataTable1 = $result->getTable('subDataTable1');
-        $this->assertTrue($subDataTable1 instanceof Piwik_DataTable);
+        $this->assertTrue($subDataTable1 instanceof DataTable);
         $this->assertEquals(4, $subDataTable1->getRowsCount());
 
         // check that the first two rows of the first sub-table have 'subArray1' as the label
@@ -110,7 +113,7 @@ class Test_Piwik_DataTable_Array extends PHPUnit_Framework_TestCase
 
         // check that the second sub-DataTable is a DataTable with 4 rows
         $subDataTable2 = $result->getTable('subDataTable2');
-        $this->assertTrue($subDataTable2 instanceof Piwik_DataTable);
+        $this->assertTrue($subDataTable2 instanceof DataTable);
         $this->assertEquals(4, $subDataTable2->getRowsCount());
 
         // check that the first two rows of the second sub-table have 'subArray1' as the label
diff --git a/tests/PHPUnit/Core/DataTable/Renderer/CSVTest.php b/tests/PHPUnit/Core/DataTable/Renderer/CSVTest.php
index 27805342485094540da3e07421d2844b509b7c94..52320105f624440c6b4263c479d79481373ac9f1 100644
--- a/tests/PHPUnit/Core/DataTable/Renderer/CSVTest.php
+++ b/tests/PHPUnit/Core/DataTable/Renderer/CSVTest.php
@@ -5,12 +5,18 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\DataTable;
+use Piwik\DataTable\Manager;
+use Piwik\DataTable\Renderer\Csv;
+use Piwik\DataTable\Simple;
+use Piwik\DataTable\Row;
+
 class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
 {
     public function setUp()
     {
         parent::setUp();
-        Piwik_DataTable_Manager::getInstance()->deleteAll();
+        Manager::getInstance()->deleteAll();
     }
 
     /**
@@ -22,22 +28,22 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
      */
     protected function _getDataTableTest()
     {
-        $dataTable = new Piwik_DataTable();
+        $dataTable = new DataTable();
 
         $arraySubTableForRow2 = array(
-            array(Piwik_DataTable_Row::COLUMNS => array('label' => 'sub1', 'count' => 1, 'bool' => false)),
-            array(Piwik_DataTable_Row::COLUMNS => array('label' => 'sub2', 'count' => 2, 'bool' => true)),
+            array(Row::COLUMNS => array('label' => 'sub1', 'count' => 1, 'bool' => false)),
+            array(Row::COLUMNS => array('label' => 'sub2', 'count' => 2, 'bool' => true)),
         );
-        $subDataTableForRow2 = new Piwik_DataTable();
+        $subDataTableForRow2 = new DataTable();
         $subDataTableForRow2->addRowsFromArray($arraySubTableForRow2);
 
         $array = array(
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Google&copy;', 'bool' => false, 'goals' => array('idgoal=1' => array('revenue' => 5.5, 'nb_conversions' => 10)), 'nb_uniq_visitors' => 11, 'nb_visits' => 11, 'nb_actions' => 17, 'max_actions' => '5', 'sum_visit_length' => 517, 'bounce_count' => 9),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.google.com/display"and,properly', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png'),
+            array(Row::COLUMNS  => array('label' => 'Google&copy;', 'bool' => false, 'goals' => array('idgoal=1' => array('revenue' => 5.5, 'nb_conversions' => 10)), 'nb_uniq_visitors' => 11, 'nb_visits' => 11, 'nb_actions' => 17, 'max_actions' => '5', 'sum_visit_length' => 517, 'bounce_count' => 9),
+                  Row::METADATA => array('url' => 'http://www.google.com/display"and,properly', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png'),
             ),
-            array(Piwik_DataTable_Row::COLUMNS              => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'bool' => true, 'nb_visits' => 151, 'nb_actions' => 147, 'max_actions' => '50', 'sum_visit_length' => 517, 'bounce_count' => 90),
-                  Piwik_DataTable_Row::METADATA             => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png'),
-                  Piwik_DataTable_Row::DATATABLE_ASSOCIATED => $subDataTableForRow2,
+            array(Row::COLUMNS              => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'bool' => true, 'nb_visits' => 151, 'nb_actions' => 147, 'max_actions' => '50', 'sum_visit_length' => 517, 'bounce_count' => 90),
+                  Row::METADATA             => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png'),
+                  Row::DATATABLE_ASSOCIATED => $subDataTableForRow2,
             )
         );
         $dataTable->addRowsFromArray($array);
@@ -48,7 +54,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     {
         $array = array('max_actions' => 14.0, 'nb_uniq_visitors' => 57.0, 'nb_visits' => 66.0, 'nb_actions' => 151.0, 'sum_visit_length' => 5118.0, 'bounce_count' => 44.0,);
 
-        $table = new Piwik_DataTable_Simple;
+        $table = new Simple;
         $table->addRowsFromArray($array);
         return $table;
     }
@@ -57,21 +63,21 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     {
         $array = array('nb_visits' => 14.0);
 
-        $table = new Piwik_DataTable_Simple;
+        $table = new Simple;
         $table->addRowsFromArray($array);
         return $table;
     }
 
     protected function _getDataTableEmpty()
     {
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
         return $table;
     }
 
     protected function _getDataTableSimpleOneZeroRowTest()
     {
         $array = array('nb_visits' => 0);
-        $table = new Piwik_DataTable_Simple;
+        $table = new Simple;
         $table->addRowsFromArray($array);
         return $table;
     }
@@ -79,7 +85,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     protected function _getDataTableSimpleOneFalseRowTest()
     {
         $array = array('is_excluded' => false);
-        $table = new Piwik_DataTable_Simple;
+        $table = new Simple;
         $table->addRowsFromArray($array);
         return $table;
     }
@@ -95,7 +101,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     {
         $dataTable = $this->_getDataTableTest();
 
-        $render = new Piwik_DataTable_Renderer_Csv();
+        $render = new Csv();
         $render->setTable($dataTable);
         $render->convertToUnicode = false;
         $expected = "label,bool,goals_idgoal=1_revenue,goals_idgoal=1_nb_conversions,nb_uniq_visitors,nb_visits,nb_actions,max_actions,sum_visit_length,bounce_count,metadata_url,metadata_logo\n" .
@@ -115,7 +121,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     public function testCSVTest2()
     {
         $dataTable = $this->_getDataTableSimpleTest();
-        $render = new Piwik_DataTable_Renderer_Csv();
+        $render = new Csv();
         $render->setTable($dataTable);
         $render->convertToUnicode = false;
         $expected = "max_actions,nb_uniq_visitors,nb_visits,nb_actions,sum_visit_length,bounce_count\n14,57,66,151,5118,44";
@@ -132,7 +138,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     public function testCSVTest3()
     {
         $dataTable = $this->_getDataTableSimpleOneRowTest();
-        $render = new Piwik_DataTable_Renderer_Csv();
+        $render = new Csv();
         $render->setTable($dataTable);
         $render->convertToUnicode = false;
         $expected = "value\n14";
@@ -149,7 +155,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     public function testCSVTest4()
     {
         $dataTable = $this->_getDataTableEmpty();
-        $render = new Piwik_DataTable_Renderer_Csv();
+        $render = new Csv();
         $render->setTable($dataTable);
         $render->convertToUnicode = false;
         $expected = 'No data available';
@@ -166,7 +172,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     public function testCSVTest5()
     {
         $dataTable = $this->_getDataTableSimpleOneZeroRowTest();
-        $render = new Piwik_DataTable_Renderer_Csv();
+        $render = new Csv();
         $render->setTable($dataTable);
         $render->convertToUnicode = false;
         $expected = "value\n0";
@@ -183,7 +189,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     public function testCSVTest6()
     {
         $dataTable = $this->_getDataTableSimpleOneFalseRowTest();
-        $render = new Piwik_DataTable_Renderer_Csv();
+        $render = new Csv();
         $render->setTable($dataTable);
         $render->convertToUnicode = false;
         $expected = "value\n0";
@@ -199,32 +205,32 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     protected function _getDataTableArrayTest()
     {
         $array1 = array(
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Google', 'nb_uniq_visitors' => 11, 'nb_visits' => 11,),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.google.com', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png'),
+            array(Row::COLUMNS  => array('label' => 'Google', 'nb_uniq_visitors' => 11, 'nb_visits' => 11,),
+                  Row::METADATA => array('url' => 'http://www.google.com', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png'),
             ),
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'nb_visits' => 151,),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png'),
+            array(Row::COLUMNS  => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'nb_visits' => 151,),
+                  Row::METADATA => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png'),
             )
         );
-        $table1 = new Piwik_DataTable();
+        $table1 = new DataTable();
         $table1->addRowsFromArray($array1);
 
 
         $array2 = array(
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Google1&copy;', 'nb_uniq_visitors' => 110, 'nb_visits' => 110,),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.google.com1', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png1'),
+            array(Row::COLUMNS  => array('label' => 'Google1&copy;', 'nb_uniq_visitors' => 110, 'nb_visits' => 110,),
+                  Row::METADATA => array('url' => 'http://www.google.com1', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png1'),
             ),
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Yahoo!1', 'nb_uniq_visitors' => 150, 'nb_visits' => 1510,),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.yahoo.com1', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png1'),
+            array(Row::COLUMNS  => array('label' => 'Yahoo!1', 'nb_uniq_visitors' => 150, 'nb_visits' => 1510,),
+                  Row::METADATA => array('url' => 'http://www.yahoo.com1', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png1'),
             )
         );
-        $table2 = new Piwik_DataTable();
+        $table2 = new DataTable();
         $table2->addRowsFromArray($array2);
 
-        $table3 = new Piwik_DataTable();
+        $table3 = new DataTable();
 
 
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('testKey');
         $table->addTable($table1, 'date1');
         $table->addTable($table2, 'date2');
@@ -236,16 +242,16 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     protected function _getDataTableSimpleArrayTest()
     {
         $array1 = array('max_actions' => 14.0, 'nb_uniq_visitors' => 57.0,);
-        $table1 = new Piwik_DataTable_Simple;
+        $table1 = new Simple;
         $table1->addRowsFromArray($array1);
 
         $array2 = array('max_actions' => 140.0, 'nb_uniq_visitors' => 570.0,);
-        $table2 = new Piwik_DataTable_Simple;
+        $table2 = new Simple;
         $table2->addRowsFromArray($array2);
 
-        $table3 = new Piwik_DataTable_Simple;
+        $table3 = new Simple;
 
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('testKey');
         $table->addTable($table1, 'row1');
         $table->addTable($table2, 'row2');
@@ -257,15 +263,15 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     protected function _getDataTableSimpleOneRowArrayTest()
     {
         $array1 = array('nb_visits' => 14.0);
-        $table1 = new Piwik_DataTable_Simple;
+        $table1 = new Simple;
         $table1->addRowsFromArray($array1);
         $array2 = array('nb_visits' => 15.0);
-        $table2 = new Piwik_DataTable_Simple;
+        $table2 = new Simple;
         $table2->addRowsFromArray($array2);
 
-        $table3 = new Piwik_DataTable_Simple;
+        $table3 = new Simple;
 
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('testKey');
         $table->addTable($table1, 'row1');
         $table->addTable($table2, 'row2');
@@ -276,7 +282,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
 
     protected function _getDataTableArray_containsDataTableArray_normal()
     {
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('parentArrayKey');
         $table->addTable($this->_getDataTableArrayTest(), 'idSite');
         return $table;
@@ -284,7 +290,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
 
     protected function _getDataTableArray_containsDataTableArray_simple()
     {
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('parentArrayKey');
         $table->addTable($this->_getDataTableSimpleArrayTest(), 'idSite');
         return $table;
@@ -292,7 +298,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
 
     protected function _getDataTableArray_containsDataTableArray_simpleOneRow()
     {
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('parentArrayKey');
         $table->addTable($this->_getDataTableSimpleOneRowArrayTest(), 'idSite');
         return $table;
@@ -307,7 +313,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     public function testCSVArrayTest1()
     {
         $dataTable = $this->_getDataTableArrayTest();
-        $render = new Piwik_DataTable_Renderer_Csv();
+        $render = new Csv();
         $render->setTable($dataTable);
         $render->convertToUnicode = false;
         $expected = "testKey,label,nb_uniq_visitors,nb_visits,metadata_url,metadata_logo\n" .
@@ -329,7 +335,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     public function testCSVArrayTest2()
     {
         $dataTable = $this->_getDataTableSimpleArrayTest();
-        $render = new Piwik_DataTable_Renderer_Csv();
+        $render = new Csv();
         $render->setTable($dataTable);
         $render->convertToUnicode = false;
         $expected = "testKey,max_actions,nb_uniq_visitors\nrow1,14,57\nrow2,140,570";
@@ -347,7 +353,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     public function testCSVArrayTest3()
     {
         $dataTable = $this->_getDataTableSimpleOneRowArrayTest();
-        $render = new Piwik_DataTable_Renderer_Csv();
+        $render = new Csv();
         $render->setTable($dataTable);
         $render->convertToUnicode = false;
         $expected = "testKey,value\nrow1,14\nrow2,15";
@@ -364,7 +370,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     public function testCSVArrayisMadeOfArrayTest1()
     {
         $dataTable = $this->_getDataTableArray_containsDataTableArray_normal();
-        $render = new Piwik_DataTable_Renderer_Csv();
+        $render = new Csv();
         $render->setTable($dataTable);
         $render->convertToUnicode = false;
         $expected = "parentArrayKey,testKey,label,nb_uniq_visitors,nb_visits,metadata_url,metadata_logo\n" .
@@ -386,7 +392,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     public function testCSVArrayIsMadeOfArrayTest2()
     {
         $dataTable = $this->_getDataTableArray_containsDataTableArray_simple();
-        $render = new Piwik_DataTable_Renderer_Csv();
+        $render = new Csv();
         $render->setTable($dataTable);
         $render->convertToUnicode = false;
         $expected = "parentArrayKey,testKey,max_actions,nb_uniq_visitors\nidSite,row1,14,57\nidSite,row2,140,570";
@@ -404,7 +410,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     public function testCSVArrayIsMadeOfArrayTest3()
     {
         $dataTable = $this->_getDataTableArray_containsDataTableArray_simpleOneRow();
-        $render = new Piwik_DataTable_Renderer_Csv();
+        $render = new Csv();
         $render->setTable($dataTable);
         $render->convertToUnicode = false;
         $expected = "parentArrayKey,testKey,value\nidSite,row1,14\nidSite,row2,15";
@@ -422,7 +428,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     {
         $data = array();
 
-        $render = new Piwik_DataTable_Renderer_Csv();
+        $render = new Csv();
         $render->setTable($data);
         $render->convertToUnicode = false;
         $expected = 'No data available';
@@ -440,7 +446,7 @@ class DataTable_Renderer_CSVTest extends PHPUnit_Framework_TestCase
     {
         $data = array('a', 'b', 'c');
 
-        $render = new Piwik_DataTable_Renderer_Csv();
+        $render = new Csv();
         $render->setTable($data);
         $render->convertToUnicode = false;
         $expected = 'a
@@ -460,7 +466,7 @@ c';
     {
         $data = array('a' => 'b', 'c' => 'd', 'e' => 'f', 5 => 'g');
 
-        $render = new Piwik_DataTable_Renderer_Csv();
+        $render = new Csv();
         $render->setTable($data);
         $render->convertToUnicode = false;
         $expected = 'a,c,e,5
@@ -479,7 +485,7 @@ b,d,f,g';
     {
         $data = array('a' => 'b');
 
-        $render = new Piwik_DataTable_Renderer_Csv();
+        $render = new Csv();
         $render->setTable($data);
         $render->convertToUnicode = false;
         $expected = 'b';
diff --git a/tests/PHPUnit/Core/DataTable/Renderer/ConsoleTest.php b/tests/PHPUnit/Core/DataTable/Renderer/ConsoleTest.php
index 9af0b9b6404d9cbdc5dc26659518246af1762946..ddfb5562096646af323b66ed8367cfb678f04fd0 100644
--- a/tests/PHPUnit/Core/DataTable/Renderer/ConsoleTest.php
+++ b/tests/PHPUnit/Core/DataTable/Renderer/ConsoleTest.php
@@ -5,12 +5,17 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\DataTable;
+use Piwik\DataTable\Manager;
+use Piwik\DataTable\Renderer\Console;
+use Piwik\DataTable\Row;
+
 class DataTable_Renderer_ConsoleTest extends PHPUnit_Framework_TestCase
 {
     public function setUp()
     {
         parent::setUp();
-        Piwik_DataTable_Manager::getInstance()->deleteAll();
+        Manager::getInstance()->deleteAll();
     }
 
     /**
@@ -25,36 +30,36 @@ class DataTable_Renderer_ConsoleTest extends PHPUnit_Framework_TestCase
      */
     public function testConsole2SubLevelAnd2Different()
     {
-        $table = new Piwik_DataTable;
-        $table->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS  => array('visits' => 245, 'visitors' => 245),
-                                      Piwik_DataTable_Row::METADATA => array('logo' => 'test.png'),)
+        $table = new DataTable;
+        $table->addRowFromArray(array(Row::COLUMNS  => array('visits' => 245, 'visitors' => 245),
+                                      Row::METADATA => array('logo' => 'test.png'),)
 
         );
 
-        $subsubtable = new Piwik_DataTable;
+        $subsubtable = new DataTable;
         $idsubsubtable = $subsubtable->getId();
-        $subsubtable->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS => array('visits' => 2)));
+        $subsubtable->addRowFromArray(array(Row::COLUMNS => array('visits' => 2)));
 
-        $subtable = new Piwik_DataTable;
+        $subtable = new DataTable;
         $idsubtable1 = $subtable->getId();
-        $subtable->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS              => array('visits' => 1),
-                                         Piwik_DataTable_Row::DATATABLE_ASSOCIATED => $subsubtable));
+        $subtable->addRowFromArray(array(Row::COLUMNS              => array('visits' => 1),
+                                         Row::DATATABLE_ASSOCIATED => $subsubtable));
 
-        $table->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS              => array('visits' => 3),
-                                      Piwik_DataTable_Row::DATATABLE_ASSOCIATED => $subtable)
+        $table->addRowFromArray(array(Row::COLUMNS              => array('visits' => 3),
+                                      Row::DATATABLE_ASSOCIATED => $subtable)
         );
 
-        $subtable2 = new Piwik_DataTable;
+        $subtable2 = new DataTable;
         $idsubtable2 = $subtable2->getId();
-        $subtable2->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS => array('visits' => 5),));
+        $subtable2->addRowFromArray(array(Row::COLUMNS => array('visits' => 5),));
 
-        $table->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS              => array('visits' => 9),
-                                      Piwik_DataTable_Row::DATATABLE_ASSOCIATED => $subtable2)
+        $table->addRowFromArray(array(Row::COLUMNS              => array('visits' => 9),
+                                      Row::DATATABLE_ASSOCIATED => $subtable2)
         );
 
         $expected = "- 1 ['visits' => 245, 'visitors' => 245] ['logo' => 'test.png'] [idsubtable = ]<br />\n- 2 ['visits' => 3] [] [idsubtable = $idsubtable1]<br />\n*- 1 ['visits' => 1] [] [idsubtable = $idsubsubtable]<br />\n**- 1 ['visits' => 2] [] [idsubtable = ]<br />\n- 3 ['visits' => 9] [] [idsubtable = $idsubtable2]<br />\n*- 1 ['visits' => 5] [] [idsubtable = ]<br />\n";
 
-        $render = new Piwik_DataTable_Renderer_Console();
+        $render = new Console();
         $render->setTable($table);
         $render->setPrefixRow('*');
         $rendered = $render->render();
@@ -73,15 +78,15 @@ class DataTable_Renderer_ConsoleTest extends PHPUnit_Framework_TestCase
      */
     public function testConsoleSimple()
     {
-        $table = new Piwik_DataTable;
-        $table->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS  => array('visits' => 245, 'visitors' => 245),
-                                      Piwik_DataTable_Row::METADATA => array('logo' => 'test.png'),)
+        $table = new DataTable;
+        $table->addRowFromArray(array(Row::COLUMNS  => array('visits' => 245, 'visitors' => 245),
+                                      Row::METADATA => array('logo' => 'test.png'),)
 
         );
 
         $expected = "- 1 ['visits' => 245, 'visitors' => 245] ['logo' => 'test.png'] [idsubtable = ]<br />\n";
 
-        $render = new Piwik_DataTable_Renderer_Console();
+        $render = new Console();
         $render->setTable($table);
         $rendered = $render->render();
 
@@ -98,7 +103,7 @@ class DataTable_Renderer_ConsoleTest extends PHPUnit_Framework_TestCase
     {
         $data = array();
 
-        $render = new Piwik_DataTable_Renderer_Console();
+        $render = new Console();
         $render->setTable($data);
         $expected = 'Empty table<br />
 ';
@@ -116,7 +121,7 @@ class DataTable_Renderer_ConsoleTest extends PHPUnit_Framework_TestCase
     {
         $data = array('a', 'b', 'c');
 
-        $render = new Piwik_DataTable_Renderer_Console();
+        $render = new Console();
         $render->setTable($data);
         $expected = "- 1 ['0' => 'a'] [] [idsubtable = ]<br />
 - 2 ['0' => 'b'] [] [idsubtable = ]<br />
@@ -136,7 +141,7 @@ class DataTable_Renderer_ConsoleTest extends PHPUnit_Framework_TestCase
     {
         $data = array('a' => 'b', 'c' => 'd', 'e' => 'f', 5 => 'g');
 
-        $render = new Piwik_DataTable_Renderer_Console();
+        $render = new Console();
         $render->setTable($data);
         $expected = "- 1 ['a' => 'b', 'c' => 'd', 'e' => 'f', '5' => 'g'] [] [idsubtable = ]<br />
 ";
@@ -154,7 +159,7 @@ class DataTable_Renderer_ConsoleTest extends PHPUnit_Framework_TestCase
     {
         $data = array('a' => 'b');
 
-        $render = new Piwik_DataTable_Renderer_Console();
+        $render = new Console();
         $render->setTable($data);
         $expected = "- 1 ['0' => 'b'] [] [idsubtable = ]<br />
 ";
diff --git a/tests/PHPUnit/Core/DataTable/Renderer/JSONTest.php b/tests/PHPUnit/Core/DataTable/Renderer/JSONTest.php
index 1572ce1097c45de6658b541373f7e5d6d87de9a0..fa7597efeb3639559458bb4c4b2b4d17e9702196 100644
--- a/tests/PHPUnit/Core/DataTable/Renderer/JSONTest.php
+++ b/tests/PHPUnit/Core/DataTable/Renderer/JSONTest.php
@@ -5,12 +5,18 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\DataTable;
+use Piwik\DataTable\Manager;
+use Piwik\DataTable\Renderer\Json;
+use Piwik\DataTable\Simple;
+use Piwik\DataTable\Row;
+
 class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
 {
     public function setUp()
     {
         parent::setUp();
-        Piwik_DataTable_Manager::getInstance()->deleteAll();
+        Manager::getInstance()->deleteAll();
     }
 
     /**
@@ -22,22 +28,22 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
      */
     protected function _getDataTableTest()
     {
-        $dataTable = new Piwik_DataTable();
+        $dataTable = new DataTable();
 
         $arraySubTableForRow2 = array(
-            array(Piwik_DataTable_Row::COLUMNS => array('label' => 'sub1', 'count' => 1, 'bool' => false)),
-            array(Piwik_DataTable_Row::COLUMNS => array('label' => 'sub2', 'count' => 2, 'bool' => true)),
+            array(Row::COLUMNS => array('label' => 'sub1', 'count' => 1, 'bool' => false)),
+            array(Row::COLUMNS => array('label' => 'sub2', 'count' => 2, 'bool' => true)),
         );
-        $subDataTableForRow2 = new Piwik_DataTable();
+        $subDataTableForRow2 = new DataTable();
         $subDataTableForRow2->addRowsFromArray($arraySubTableForRow2);
 
         $array = array(
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Google&copy;', 'bool' => false, 'goals' => array('idgoal=1' => array('revenue' => 5.5, 'nb_conversions' => 10)), 'nb_uniq_visitors' => 11, 'nb_visits' => 11, 'nb_actions' => 17, 'max_actions' => '5', 'sum_visit_length' => 517, 'bounce_count' => 9),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.google.com/display"and,properly', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png'),
+            array(Row::COLUMNS  => array('label' => 'Google&copy;', 'bool' => false, 'goals' => array('idgoal=1' => array('revenue' => 5.5, 'nb_conversions' => 10)), 'nb_uniq_visitors' => 11, 'nb_visits' => 11, 'nb_actions' => 17, 'max_actions' => '5', 'sum_visit_length' => 517, 'bounce_count' => 9),
+                  Row::METADATA => array('url' => 'http://www.google.com/display"and,properly', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png'),
             ),
-            array(Piwik_DataTable_Row::COLUMNS              => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'bool' => true, 'nb_visits' => 151, 'nb_actions' => 147, 'max_actions' => '50', 'sum_visit_length' => 517, 'bounce_count' => 90),
-                  Piwik_DataTable_Row::METADATA             => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png'),
-                  Piwik_DataTable_Row::DATATABLE_ASSOCIATED => $subDataTableForRow2,
+            array(Row::COLUMNS              => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'bool' => true, 'nb_visits' => 151, 'nb_actions' => 147, 'max_actions' => '50', 'sum_visit_length' => 517, 'bounce_count' => 90),
+                  Row::METADATA             => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png'),
+                  Row::DATATABLE_ASSOCIATED => $subDataTableForRow2,
             )
         );
         $dataTable->addRowsFromArray($array);
@@ -48,7 +54,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     {
         $array = array('max_actions' => 14.0, 'nb_uniq_visitors' => 57.0, 'nb_visits' => 66.0, 'nb_actions' => 151.0, 'sum_visit_length' => 5118.0, 'bounce_count' => 44.0,);
 
-        $table = new Piwik_DataTable_Simple;
+        $table = new Simple;
         $table->addRowsFromArray($array);
         return $table;
     }
@@ -57,21 +63,21 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     {
         $array = array('nb_visits' => 14.0);
 
-        $table = new Piwik_DataTable_Simple;
+        $table = new Simple;
         $table->addRowsFromArray($array);
         return $table;
     }
 
     protected function _getDataTableEmpty()
     {
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
         return $table;
     }
 
     protected function _getDataTableSimpleOneZeroRowTest()
     {
         $array = array('nb_visits' => 0);
-        $table = new Piwik_DataTable_Simple;
+        $table = new Simple;
         $table->addRowsFromArray($array);
         return $table;
     }
@@ -79,7 +85,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     protected function _getDataTableSimpleOneFalseRowTest()
     {
         $array = array('is_excluded' => false);
-        $table = new Piwik_DataTable_Simple;
+        $table = new Simple;
         $table->addRowsFromArray($array);
         return $table;
     }
@@ -94,7 +100,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     public function testJSONTest1()
     {
         $dataTable = $this->_getDataTableTest();
-        $render = new Piwik_DataTable_Renderer_Json();
+        $render = new Json();
         $render->setTable($dataTable);
         $render->setRenderSubTables(true);
         $expected = '[{"label":"Google\u00a9","bool":false,"goals":{"idgoal=1":{"revenue":5.5,"nb_conversions":10}},"nb_uniq_visitors":11,"nb_visits":11,"nb_actions":17,"max_actions":"5","sum_visit_length":517,"bounce_count":9,"url":"http:\/\/www.google.com\/display\"and,properly","logo":".\/plugins\/Referers\/images\/searchEngines\/www.google.com.png"},{"label":"Yahoo!","nb_uniq_visitors":15,"bool":true,"nb_visits":151,"nb_actions":147,"max_actions":"50","sum_visit_length":517,"bounce_count":90,"url":"http:\/\/www.yahoo.com","logo":".\/plugins\/Referers\/images\/searchEngines\/www.yahoo.com.png","idsubdatatable":2,"subtable":[{"label":"sub1","count":1,"bool":false},{"label":"sub2","count":2,"bool":true}]}]';
@@ -112,7 +118,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     public function testJSONTest2()
     {
         $dataTable = $this->_getDataTableSimpleTest();
-        $render = new Piwik_DataTable_Renderer_Json();
+        $render = new Json();
         $render->setTable($dataTable);
         $expected = '{"max_actions":14,"nb_uniq_visitors":57,"nb_visits":66,"nb_actions":151,"sum_visit_length":5118,"bounce_count":44}';
 
@@ -128,7 +134,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     public function testJSONTest3()
     {
         $dataTable = $this->_getDataTableSimpleOneRowTest();
-        $render = new Piwik_DataTable_Renderer_Json();
+        $render = new Json();
         $render->setTable($dataTable);
         $expected = '{"value":14}';
         $this->assertEquals($expected, $render->render());
@@ -143,7 +149,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     public function testJSONTest4()
     {
         $dataTable = $this->_getDataTableEmpty();
-        $render = new Piwik_DataTable_Renderer_Json();
+        $render = new Json();
         $render->setTable($dataTable);
         $expected = '[]';
         $this->assertEquals($expected, $render->render());
@@ -158,7 +164,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     public function testJSONTest5()
     {
         $dataTable = $this->_getDataTableSimpleOneZeroRowTest();
-        $render = new Piwik_DataTable_Renderer_Json();
+        $render = new Json();
         $render->setTable($dataTable);
         $expected = '{"value":0}';
         $this->assertEquals($expected, $render->render());
@@ -173,7 +179,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     public function testJSONTest6()
     {
         $dataTable = $this->_getDataTableSimpleOneFalseRowTest();
-        $render = new Piwik_DataTable_Renderer_Json();
+        $render = new Json();
         $render->setTable($dataTable);
         $expected = '{"value":false}';
         $this->assertEquals($expected, $render->render());
@@ -187,32 +193,32 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     protected function _getDataTableArrayTest()
     {
         $array1 = array(
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Google', 'nb_uniq_visitors' => 11, 'nb_visits' => 11,),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.google.com', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png'),
+            array(Row::COLUMNS  => array('label' => 'Google', 'nb_uniq_visitors' => 11, 'nb_visits' => 11,),
+                  Row::METADATA => array('url' => 'http://www.google.com', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png'),
             ),
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'nb_visits' => 151,),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png'),
+            array(Row::COLUMNS  => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'nb_visits' => 151,),
+                  Row::METADATA => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png'),
             )
         );
-        $table1 = new Piwik_DataTable();
+        $table1 = new DataTable();
         $table1->addRowsFromArray($array1);
 
 
         $array2 = array(
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Google1&copy;', 'nb_uniq_visitors' => 110, 'nb_visits' => 110,),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.google.com1', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png1'),
+            array(Row::COLUMNS  => array('label' => 'Google1&copy;', 'nb_uniq_visitors' => 110, 'nb_visits' => 110,),
+                  Row::METADATA => array('url' => 'http://www.google.com1', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png1'),
             ),
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Yahoo!1', 'nb_uniq_visitors' => 150, 'nb_visits' => 1510,),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.yahoo.com1', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png1'),
+            array(Row::COLUMNS  => array('label' => 'Yahoo!1', 'nb_uniq_visitors' => 150, 'nb_visits' => 1510,),
+                  Row::METADATA => array('url' => 'http://www.yahoo.com1', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png1'),
             )
         );
-        $table2 = new Piwik_DataTable();
+        $table2 = new DataTable();
         $table2->addRowsFromArray($array2);
 
-        $table3 = new Piwik_DataTable();
+        $table3 = new DataTable();
 
 
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('testKey');
         $table->addTable($table1, 'date1');
         $table->addTable($table2, 'date2');
@@ -224,16 +230,16 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     protected function _getDataTableSimpleArrayTest()
     {
         $array1 = array('max_actions' => 14.0, 'nb_uniq_visitors' => 57.0,);
-        $table1 = new Piwik_DataTable_Simple;
+        $table1 = new Simple;
         $table1->addRowsFromArray($array1);
 
         $array2 = array('max_actions' => 140.0, 'nb_uniq_visitors' => 570.0,);
-        $table2 = new Piwik_DataTable_Simple;
+        $table2 = new Simple;
         $table2->addRowsFromArray($array2);
 
-        $table3 = new Piwik_DataTable_Simple;
+        $table3 = new Simple;
 
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('testKey');
         $table->addTable($table1, 'row1');
         $table->addTable($table2, 'row2');
@@ -245,15 +251,15 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     protected function _getDataTableSimpleOneRowArrayTest()
     {
         $array1 = array('nb_visits' => 14.0);
-        $table1 = new Piwik_DataTable_Simple;
+        $table1 = new Simple;
         $table1->addRowsFromArray($array1);
         $array2 = array('nb_visits' => 15.0);
-        $table2 = new Piwik_DataTable_Simple;
+        $table2 = new Simple;
         $table2->addRowsFromArray($array2);
 
-        $table3 = new Piwik_DataTable_Simple;
+        $table3 = new Simple;
 
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('testKey');
         $table->addTable($table1, 'row1');
         $table->addTable($table2, 'row2');
@@ -264,7 +270,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
 
     protected function _getDataTableArray_containsDataTableArray_normal()
     {
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('parentArrayKey');
         $table->addTable($this->_getDataTableArrayTest(), 'idSite');
         return $table;
@@ -272,7 +278,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
 
     protected function _getDataTableArray_containsDataTableArray_simple()
     {
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('parentArrayKey');
         $table->addTable($this->_getDataTableSimpleArrayTest(), 'idSite');
         return $table;
@@ -280,7 +286,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
 
     protected function _getDataTableArray_containsDataTableArray_simpleOneRow()
     {
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('parentArrayKey');
         $table->addTable($this->_getDataTableSimpleOneRowArrayTest(), 'idSite');
         return $table;
@@ -296,7 +302,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     public function testJSONArrayTest1()
     {
         $dataTable = $this->_getDataTableArrayTest();
-        $render = new Piwik_DataTable_Renderer_Json();
+        $render = new Json();
         $render->setTable($dataTable);
         $rendered = $render->render();
         $expected = '{"date1":[{"label":"Google","nb_uniq_visitors":11,"nb_visits":11,"url":"http:\/\/www.google.com","logo":".\/plugins\/Referers\/images\/searchEngines\/www.google.com.png"},{"label":"Yahoo!","nb_uniq_visitors":15,"nb_visits":151,"url":"http:\/\/www.yahoo.com","logo":".\/plugins\/Referers\/images\/searchEngines\/www.yahoo.com.png"}],"date2":[{"label":"Google1\u00a9","nb_uniq_visitors":110,"nb_visits":110,"url":"http:\/\/www.google.com1","logo":".\/plugins\/Referers\/images\/searchEngines\/www.google.com.png1"},{"label":"Yahoo!1","nb_uniq_visitors":150,"nb_visits":1510,"url":"http:\/\/www.yahoo.com1","logo":".\/plugins\/Referers\/images\/searchEngines\/www.yahoo.com.png1"}],"date3":[]}';
@@ -313,7 +319,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     public function testJSONArrayTest2()
     {
         $dataTable = $this->_getDataTableSimpleArrayTest();
-        $render = new Piwik_DataTable_Renderer_Json();
+        $render = new Json();
         $render->setTable($dataTable);
         $rendered = $render->render();
 
@@ -331,7 +337,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     public function testJSONArrayTest3()
     {
         $dataTable = $this->_getDataTableSimpleOneRowArrayTest();
-        $render = new Piwik_DataTable_Renderer_Json();
+        $render = new Json();
         $render->setTable($dataTable);
         $rendered = $render->render();
 
@@ -348,7 +354,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     public function testJSONArrayIsMadeOfArrayTest1()
     {
         $dataTable = $this->_getDataTableArray_containsDataTableArray_normal();
-        $render = new Piwik_DataTable_Renderer_Json();
+        $render = new Json();
         $render->setTable($dataTable);
         $rendered = $render->render();
         $expected = '{"idSite":{"date1":[{"label":"Google","nb_uniq_visitors":11,"nb_visits":11,"url":"http:\/\/www.google.com","logo":".\/plugins\/Referers\/images\/searchEngines\/www.google.com.png"},{"label":"Yahoo!","nb_uniq_visitors":15,"nb_visits":151,"url":"http:\/\/www.yahoo.com","logo":".\/plugins\/Referers\/images\/searchEngines\/www.yahoo.com.png"}],"date2":[{"label":"Google1\u00a9","nb_uniq_visitors":110,"nb_visits":110,"url":"http:\/\/www.google.com1","logo":".\/plugins\/Referers\/images\/searchEngines\/www.google.com.png1"},{"label":"Yahoo!1","nb_uniq_visitors":150,"nb_visits":1510,"url":"http:\/\/www.yahoo.com1","logo":".\/plugins\/Referers\/images\/searchEngines\/www.yahoo.com.png1"}],"date3":[]}}';
@@ -364,7 +370,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     public function testJSONArrayIsMadeOfArrayTest2()
     {
         $dataTable = $this->_getDataTableArray_containsDataTableArray_simple();
-        $render = new Piwik_DataTable_Renderer_Json();
+        $render = new Json();
         $render->setTable($dataTable);
         $rendered = $render->render();
 
@@ -382,7 +388,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     public function testJSONArrayIsMadeOfArrayTest3()
     {
         $dataTable = $this->_getDataTableArray_containsDataTableArray_simpleOneRow();
-        $render = new Piwik_DataTable_Renderer_Json();
+        $render = new Json();
         $render->setTable($dataTable);
 
         $expected = '{"idSite":{"row1":14,"row2":15,"row3":[]}}';
@@ -400,7 +406,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     {
         $data = array();
 
-        $render = new Piwik_DataTable_Renderer_Json();
+        $render = new Json();
         $render->setTable($data);
         $expected = '[]';
 
@@ -417,7 +423,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     {
         $data = array('a', 'b', 'c', array('a' => 'b'), array(1, 2));
 
-        $render = new Piwik_DataTable_Renderer_Json();
+        $render = new Json();
         $render->setTable($data);
         $expected = '["a","b","c",{"a":"b"},[1,2]]';
 
@@ -434,7 +440,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     {
         $data = array('a' => 'b', 'c' => 'd', 'e' => 'f', 5 => 'g');
 
-        $render = new Piwik_DataTable_Renderer_Json();
+        $render = new Json();
         $render->setTable($data);
         $expected = '[{"a":"b","c":"d","e":"f","5":"g"}]';
 
@@ -451,7 +457,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     {
         $data = array('a' => 'b', 'c' => array(1, 2, 3, 4), 'e' => array('f' => 'g', 'h' => 'i', 'j' => 'k'));
 
-        $render = new Piwik_DataTable_Renderer_Json();
+        $render = new Json();
         $render->setTable($data);
         $expected = '{"a":"b","c":[1,2,3,4],"e":{"f":"g","h":"i","j":"k"}}';
 
@@ -468,7 +474,7 @@ class DataTable_Renderer_JSONTest extends PHPUnit_Framework_TestCase
     {
         $data = array('a' => 'b');
 
-        $render = new Piwik_DataTable_Renderer_Json();
+        $render = new Json();
         $render->setTable($data);
         $expected = '[{"a":"b"}]';
 
diff --git a/tests/PHPUnit/Core/DataTable/Renderer/PHPTest.php b/tests/PHPUnit/Core/DataTable/Renderer/PHPTest.php
index 3058a513dd4f33393beca73e94b3da921282ed12..89db87e0122de1ce00f992e8fdcbf95d24f4176c 100644
--- a/tests/PHPUnit/Core/DataTable/Renderer/PHPTest.php
+++ b/tests/PHPUnit/Core/DataTable/Renderer/PHPTest.php
@@ -5,12 +5,18 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\DataTable;
+use Piwik\DataTable\Manager;
+use Piwik\DataTable\Renderer\Php;
+use Piwik\DataTable\Simple;
+use Piwik\DataTable\Row;
+
 class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
 {
     public function setUp()
     {
         parent::setUp();
-        Piwik_DataTable_Manager::getInstance()->deleteAll();
+        Manager::getInstance()->deleteAll();
     }
 
     /**
@@ -22,22 +28,22 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
      */
     protected function _getDataTableTest()
     {
-        $dataTable = new Piwik_DataTable();
+        $dataTable = new DataTable();
 
         $arraySubTableForRow2 = array(
-            array(Piwik_DataTable_Row::COLUMNS => array('label' => 'sub1', 'count' => 1, 'bool' => false)),
-            array(Piwik_DataTable_Row::COLUMNS => array('label' => 'sub2', 'count' => 2, 'bool' => true)),
+            array(Row::COLUMNS => array('label' => 'sub1', 'count' => 1, 'bool' => false)),
+            array(Row::COLUMNS => array('label' => 'sub2', 'count' => 2, 'bool' => true)),
         );
-        $subDataTableForRow2 = new Piwik_DataTable();
+        $subDataTableForRow2 = new DataTable();
         $subDataTableForRow2->addRowsFromArray($arraySubTableForRow2);
 
         $array = array(
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Google&copy;', 'bool' => false, 'goals' => array('idgoal=1' => array('revenue' => 5.5, 'nb_conversions' => 10)), 'nb_uniq_visitors' => 11, 'nb_visits' => 11, 'nb_actions' => 17, 'max_actions' => '5', 'sum_visit_length' => 517, 'bounce_count' => 9),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.google.com/display"and,properly', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png'),
+            array(Row::COLUMNS  => array('label' => 'Google&copy;', 'bool' => false, 'goals' => array('idgoal=1' => array('revenue' => 5.5, 'nb_conversions' => 10)), 'nb_uniq_visitors' => 11, 'nb_visits' => 11, 'nb_actions' => 17, 'max_actions' => '5', 'sum_visit_length' => 517, 'bounce_count' => 9),
+                  Row::METADATA => array('url' => 'http://www.google.com/display"and,properly', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png'),
             ),
-            array(Piwik_DataTable_Row::COLUMNS              => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'bool' => true, 'nb_visits' => 151, 'nb_actions' => 147, 'max_actions' => '50', 'sum_visit_length' => 517, 'bounce_count' => 90),
-                  Piwik_DataTable_Row::METADATA             => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png'),
-                  Piwik_DataTable_Row::DATATABLE_ASSOCIATED => $subDataTableForRow2,
+            array(Row::COLUMNS              => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'bool' => true, 'nb_visits' => 151, 'nb_actions' => 147, 'max_actions' => '50', 'sum_visit_length' => 517, 'bounce_count' => 90),
+                  Row::METADATA             => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png'),
+                  Row::DATATABLE_ASSOCIATED => $subDataTableForRow2,
             )
         );
         $dataTable->addRowsFromArray($array);
@@ -48,7 +54,7 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     {
         $array = array('max_actions' => 14.0, 'nb_uniq_visitors' => 57.0, 'nb_visits' => 66.0, 'nb_actions' => 151.0, 'sum_visit_length' => 5118.0, 'bounce_count' => 44.0,);
 
-        $table = new Piwik_DataTable_Simple;
+        $table = new Simple;
         $table->addRowsFromArray($array);
         return $table;
     }
@@ -57,21 +63,21 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     {
         $array = array('nb_visits' => 14.0);
 
-        $table = new Piwik_DataTable_Simple;
+        $table = new Simple;
         $table->addRowsFromArray($array);
         return $table;
     }
 
     protected function _getDataTableEmpty()
     {
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
         return $table;
     }
 
     protected function _getDataTableSimpleOneZeroRowTest()
     {
         $array = array('nb_visits' => 0);
-        $table = new Piwik_DataTable_Simple;
+        $table = new Simple;
         $table->addRowsFromArray($array);
         return $table;
     }
@@ -79,7 +85,7 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     protected function _getDataTableSimpleOneFalseRowTest()
     {
         $array = array('is_excluded' => false);
-        $table = new Piwik_DataTable_Simple;
+        $table = new Simple;
         $table->addRowsFromArray($array);
         return $table;
     }
@@ -94,7 +100,7 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     public function testPHPTest1()
     {
         $dataTable = $this->_getDataTableTest();
-        $render = new Piwik_DataTable_Renderer_Php();
+        $render = new Php();
         $render->setTable($dataTable);
         $render->setRenderSubTables(true);
 
@@ -161,7 +167,7 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     public function testPHPTest2()
     {
         $dataTable = $this->_getDataTableSimpleTest();
-        $render = new Piwik_DataTable_Renderer_Php();
+        $render = new Php();
         $render->setTable($dataTable);
         $expected = serialize(array(
                                    'max_actions'      => 14.0,
@@ -183,7 +189,7 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     public function testPHPTest3()
     {
         $dataTable = $this->_getDataTableSimpleOneRowTest();
-        $render = new Piwik_DataTable_Renderer_Php();
+        $render = new Php();
         $render->setTable($dataTable);
         $expected = serialize(14.0);
         $this->assertEquals($expected, $render->render());
@@ -198,7 +204,7 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     public function testPHPTest4()
     {
         $dataTable = $this->_getDataTableEmpty();
-        $render = new Piwik_DataTable_Renderer_Php();
+        $render = new Php();
         $render->setTable($dataTable);
         $expected = serialize(array());
         $this->assertEquals($expected, $render->render());
@@ -213,7 +219,7 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     public function testPHPTest5()
     {
         $dataTable = $this->_getDataTableSimpleOneZeroRowTest();
-        $render = new Piwik_DataTable_Renderer_Php();
+        $render = new Php();
         $render->setTable($dataTable);
         $expected = serialize(0);
         $this->assertEquals($expected, $render->render());
@@ -228,7 +234,7 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     public function testPHPTest6()
     {
         $dataTable = $this->_getDataTableSimpleOneFalseRowTest();
-        $render = new Piwik_DataTable_Renderer_Php();
+        $render = new Php();
         $render->setTable($dataTable);
         $expected = serialize(false);
         $this->assertEquals($expected, $render->render());
@@ -243,32 +249,32 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     protected function _getDataTableArrayTest()
     {
         $array1 = array(
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Google', 'nb_uniq_visitors' => 11, 'nb_visits' => 11,),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.google.com', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png'),
+            array(Row::COLUMNS  => array('label' => 'Google', 'nb_uniq_visitors' => 11, 'nb_visits' => 11,),
+                  Row::METADATA => array('url' => 'http://www.google.com', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png'),
             ),
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'nb_visits' => 151,),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png'),
+            array(Row::COLUMNS  => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'nb_visits' => 151,),
+                  Row::METADATA => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png'),
             )
         );
-        $table1 = new Piwik_DataTable();
+        $table1 = new DataTable();
         $table1->addRowsFromArray($array1);
 
 
         $array2 = array(
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Google1&copy;', 'nb_uniq_visitors' => 110, 'nb_visits' => 110,),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.google.com1', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png1'),
+            array(Row::COLUMNS  => array('label' => 'Google1&copy;', 'nb_uniq_visitors' => 110, 'nb_visits' => 110,),
+                  Row::METADATA => array('url' => 'http://www.google.com1', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png1'),
             ),
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Yahoo!1', 'nb_uniq_visitors' => 150, 'nb_visits' => 1510,),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.yahoo.com1', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png1'),
+            array(Row::COLUMNS  => array('label' => 'Yahoo!1', 'nb_uniq_visitors' => 150, 'nb_visits' => 1510,),
+                  Row::METADATA => array('url' => 'http://www.yahoo.com1', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png1'),
             )
         );
-        $table2 = new Piwik_DataTable();
+        $table2 = new DataTable();
         $table2->addRowsFromArray($array2);
 
-        $table3 = new Piwik_DataTable();
+        $table3 = new DataTable();
 
 
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('testKey');
         $table->addTable($table1, 'date1');
         $table->addTable($table2, 'date2');
@@ -280,16 +286,16 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     protected function _getDataTableSimpleArrayTest()
     {
         $array1 = array('max_actions' => 14.0, 'nb_uniq_visitors' => 57.0,);
-        $table1 = new Piwik_DataTable_Simple;
+        $table1 = new Simple;
         $table1->addRowsFromArray($array1);
 
         $array2 = array('max_actions' => 140.0, 'nb_uniq_visitors' => 570.0,);
-        $table2 = new Piwik_DataTable_Simple;
+        $table2 = new Simple;
         $table2->addRowsFromArray($array2);
 
-        $table3 = new Piwik_DataTable_Simple;
+        $table3 = new Simple;
 
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('testKey');
         $table->addTable($table1, 'row1');
         $table->addTable($table2, 'row2');
@@ -301,15 +307,15 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     protected function _getDataTableSimpleOneRowArrayTest()
     {
         $array1 = array('nb_visits' => 14.0);
-        $table1 = new Piwik_DataTable_Simple;
+        $table1 = new Simple;
         $table1->addRowsFromArray($array1);
         $array2 = array('nb_visits' => 15.0);
-        $table2 = new Piwik_DataTable_Simple;
+        $table2 = new Simple;
         $table2->addRowsFromArray($array2);
 
-        $table3 = new Piwik_DataTable_Simple;
+        $table3 = new Simple;
 
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('testKey');
         $table->addTable($table1, 'row1');
         $table->addTable($table2, 'row2');
@@ -320,7 +326,7 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
 
     protected function _getDataTableArray_containsDataTableArray_normal()
     {
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('parentArrayKey');
         $table->addTable($this->_getDataTableArrayTest(), 'idSite');
         return $table;
@@ -328,7 +334,7 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
 
     protected function _getDataTableArray_containsDataTableArray_simple()
     {
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('parentArrayKey');
         $table->addTable($this->_getDataTableSimpleArrayTest(), 'idSite');
         return $table;
@@ -336,7 +342,7 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
 
     protected function _getDataTableArray_containsDataTableArray_simpleOneRow()
     {
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('parentArrayKey');
         $table->addTable($this->_getDataTableSimpleOneRowArrayTest(), 'idSite');
         return $table;
@@ -352,7 +358,7 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     public function testPHPArrayTest1()
     {
         $dataTable = $this->_getDataTableArrayTest();
-        $render = new Piwik_DataTable_Renderer_Php();
+        $render = new Php();
         $render->setTable($dataTable);
         $rendered = $render->render();
 
@@ -409,7 +415,7 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     public function testPHPArrayTest2()
     {
         $dataTable = $this->_getDataTableSimpleArrayTest();
-        $render = new Piwik_DataTable_Renderer_Php();
+        $render = new Php();
         $render->setTable($dataTable);
         $rendered = $render->render();
 
@@ -439,7 +445,7 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     public function testPHPArrayTest3()
     {
         $dataTable = $this->_getDataTableSimpleOneRowArrayTest();
-        $render = new Piwik_DataTable_Renderer_Php();
+        $render = new Php();
         $render->setTable($dataTable);
         $rendered = $render->render();
 
@@ -460,7 +466,7 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     public function testPHPArrayIsMadeOfArrayTest1()
     {
         $dataTable = $this->_getDataTableArray_containsDataTableArray_normal();
-        $render = new Piwik_DataTable_Renderer_Php();
+        $render = new Php();
         $render->setTable($dataTable);
         $rendered = $render->render();
 
@@ -519,7 +525,7 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     public function testPHPArrayIsMadeOfArrayTest2()
     {
         $dataTable = $this->_getDataTableArray_containsDataTableArray_simple();
-        $render = new Piwik_DataTable_Renderer_Php();
+        $render = new Php();
         $render->setTable($dataTable);
         $rendered = $render->render();
 
@@ -550,7 +556,7 @@ class DataTable_Renderer_PHPTest extends PHPUnit_Framework_TestCase
     public function testPHPArrayIsMadeOfArrayTest3()
     {
         $dataTable = $this->_getDataTableArray_containsDataTableArray_simpleOneRow();
-        $render = new Piwik_DataTable_Renderer_Php();
+        $render = new Php();
         $render->setTable($dataTable);
         $rendered = $render->render();
 
diff --git a/tests/PHPUnit/Core/DataTable/Renderer/XMLTest.php b/tests/PHPUnit/Core/DataTable/Renderer/XMLTest.php
index d4e676f5eb93032ef649ede20c0559e5d61fdadd..205da80d098b0bd5bca5f7a8ffc42f9d63b966f5 100644
--- a/tests/PHPUnit/Core/DataTable/Renderer/XMLTest.php
+++ b/tests/PHPUnit/Core/DataTable/Renderer/XMLTest.php
@@ -5,12 +5,18 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\DataTable;
+use Piwik\DataTable\Manager;
+use Piwik\DataTable\Renderer\Xml;
+use Piwik\DataTable\Simple;
+use Piwik\DataTable\Row;
+
 class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
 {
     public function setUp()
     {
         parent::setUp();
-        Piwik_DataTable_Manager::getInstance()->deleteAll();
+        Manager::getInstance()->deleteAll();
     }
 
     /**
@@ -22,22 +28,22 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
      */
     protected function _getDataTableTest()
     {
-        $dataTable = new Piwik_DataTable();
+        $dataTable = new DataTable();
 
         $arraySubTableForRow2 = array(
-            array(Piwik_DataTable_Row::COLUMNS => array('label' => 'sub1', 'count' => 1, 'bool' => false)),
-            array(Piwik_DataTable_Row::COLUMNS => array('label' => 'sub2', 'count' => 2, 'bool' => true)),
+            array(Row::COLUMNS => array('label' => 'sub1', 'count' => 1, 'bool' => false)),
+            array(Row::COLUMNS => array('label' => 'sub2', 'count' => 2, 'bool' => true)),
         );
-        $subDataTableForRow2 = new Piwik_DataTable();
+        $subDataTableForRow2 = new DataTable();
         $subDataTableForRow2->addRowsFromArray($arraySubTableForRow2);
 
         $array = array(
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Google&copy;', 'bool' => false, 'goals' => array('idgoal=1' => array('revenue' => 5.5, 'nb_conversions' => 10)), 'nb_uniq_visitors' => 11, 'nb_visits' => 11, 'nb_actions' => 17, 'max_actions' => '5', 'sum_visit_length' => 517, 'bounce_count' => 9),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.google.com/display"and,properly', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png'),
+            array(Row::COLUMNS  => array('label' => 'Google&copy;', 'bool' => false, 'goals' => array('idgoal=1' => array('revenue' => 5.5, 'nb_conversions' => 10)), 'nb_uniq_visitors' => 11, 'nb_visits' => 11, 'nb_actions' => 17, 'max_actions' => '5', 'sum_visit_length' => 517, 'bounce_count' => 9),
+                  Row::METADATA => array('url' => 'http://www.google.com/display"and,properly', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png'),
             ),
-            array(Piwik_DataTable_Row::COLUMNS              => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'bool' => true, 'nb_visits' => 151, 'nb_actions' => 147, 'max_actions' => '50', 'sum_visit_length' => 517, 'bounce_count' => 90),
-                  Piwik_DataTable_Row::METADATA             => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png'),
-                  Piwik_DataTable_Row::DATATABLE_ASSOCIATED => $subDataTableForRow2,
+            array(Row::COLUMNS              => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'bool' => true, 'nb_visits' => 151, 'nb_actions' => 147, 'max_actions' => '50', 'sum_visit_length' => 517, 'bounce_count' => 90),
+                  Row::METADATA             => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png'),
+                  Row::DATATABLE_ASSOCIATED => $subDataTableForRow2,
             )
         );
         $dataTable->addRowsFromArray($array);
@@ -48,7 +54,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     {
         $array = array('max_actions' => 14.0, 'nb_uniq_visitors' => 57.0, 'nb_visits' => 66.0, 'nb_actions' => 151.0, 'sum_visit_length' => 5118.0, 'bounce_count' => 44.0,);
 
-        $table = new Piwik_DataTable_Simple;
+        $table = new Simple;
         $table->addRowsFromArray($array);
         return $table;
     }
@@ -57,21 +63,21 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     {
         $array = array('nb_visits' => 14.0);
 
-        $table = new Piwik_DataTable_Simple;
+        $table = new Simple;
         $table->addRowsFromArray($array);
         return $table;
     }
 
     protected function _getDataTableEmpty()
     {
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
         return $table;
     }
 
     protected function _getDataTableSimpleOneZeroRowTest()
     {
         $array = array('nb_visits' => 0);
-        $table = new Piwik_DataTable_Simple;
+        $table = new Simple;
         $table->addRowsFromArray($array);
         return $table;
     }
@@ -79,7 +85,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     protected function _getDataTableSimpleOneFalseRowTest()
     {
         $array = array('is_excluded' => false);
-        $table = new Piwik_DataTable_Simple;
+        $table = new Simple;
         $table->addRowsFromArray($array);
         return $table;
     }
@@ -94,7 +100,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     public function testXMLTest1()
     {
         $dataTable = $this->_getDataTableTest();
-        $render = new Piwik_DataTable_Renderer_Xml();
+        $render = new Xml();
         $render->setTable($dataTable);
         $render->setRenderSubTables(true);
         $expected = '<?xml version="1.0" encoding="utf-8" ?>
@@ -156,7 +162,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     public function testXMLTest2()
     {
         $dataTable = $this->_getDataTableSimpleTest();
-        $render = new Piwik_DataTable_Renderer_Xml();
+        $render = new Xml();
         $render->setTable($dataTable);
         $expected = '<?xml version="1.0" encoding="utf-8" ?>
 <result>
@@ -179,7 +185,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     public function testXMLTest3()
     {
         $dataTable = $this->_getDataTableSimpleOneRowTest();
-        $render = new Piwik_DataTable_Renderer_Xml();
+        $render = new Xml();
         $render->setTable($dataTable);
         $expected = '<?xml version="1.0" encoding="utf-8" ?>
 <result>14</result>';
@@ -195,7 +201,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     public function testXMLTest4()
     {
         $dataTable = $this->_getDataTableEmpty();
-        $render = new Piwik_DataTable_Renderer_Xml();
+        $render = new Xml();
         $render->setTable($dataTable);
         $expected = '<?xml version="1.0" encoding="utf-8" ?>
 <result />';
@@ -211,7 +217,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     public function testXMLTest5()
     {
         $dataTable = $this->_getDataTableSimpleOneZeroRowTest();
-        $render = new Piwik_DataTable_Renderer_Xml();
+        $render = new Xml();
         $render->setTable($dataTable);
         $expected = '<?xml version="1.0" encoding="utf-8" ?>
 <result>0</result>';
@@ -227,7 +233,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     public function testXMLTest6()
     {
         $dataTable = $this->_getDataTableSimpleOneFalseRowTest();
-        $render = new Piwik_DataTable_Renderer_Xml();
+        $render = new Xml();
         $render->setTable($dataTable);
         $expected = '<?xml version="1.0" encoding="utf-8" ?>
 <result>0</result>';
@@ -243,32 +249,32 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     protected function _getDataTableArrayTest()
     {
         $array1 = array(
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Google', 'nb_uniq_visitors' => 11, 'nb_visits' => 11,),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.google.com', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png'),
+            array(Row::COLUMNS  => array('label' => 'Google', 'nb_uniq_visitors' => 11, 'nb_visits' => 11,),
+                  Row::METADATA => array('url' => 'http://www.google.com', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png'),
             ),
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'nb_visits' => 151,),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png'),
+            array(Row::COLUMNS  => array('label' => 'Yahoo!', 'nb_uniq_visitors' => 15, 'nb_visits' => 151,),
+                  Row::METADATA => array('url' => 'http://www.yahoo.com', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png'),
             )
         );
-        $table1 = new Piwik_DataTable();
+        $table1 = new DataTable();
         $table1->addRowsFromArray($array1);
 
 
         $array2 = array(
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Google1&copy;', 'nb_uniq_visitors' => 110, 'nb_visits' => 110,),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.google.com1', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png1'),
+            array(Row::COLUMNS  => array('label' => 'Google1&copy;', 'nb_uniq_visitors' => 110, 'nb_visits' => 110,),
+                  Row::METADATA => array('url' => 'http://www.google.com1', 'logo' => './plugins/Referers/images/searchEngines/www.google.com.png1'),
             ),
-            array(Piwik_DataTable_Row::COLUMNS  => array('label' => 'Yahoo!1', 'nb_uniq_visitors' => 150, 'nb_visits' => 1510,),
-                  Piwik_DataTable_Row::METADATA => array('url' => 'http://www.yahoo.com1', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png1'),
+            array(Row::COLUMNS  => array('label' => 'Yahoo!1', 'nb_uniq_visitors' => 150, 'nb_visits' => 1510,),
+                  Row::METADATA => array('url' => 'http://www.yahoo.com1', 'logo' => './plugins/Referers/images/searchEngines/www.yahoo.com.png1'),
             )
         );
-        $table2 = new Piwik_DataTable();
+        $table2 = new DataTable();
         $table2->addRowsFromArray($array2);
 
-        $table3 = new Piwik_DataTable();
+        $table3 = new DataTable();
 
 
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('testKey');
         $table->addTable($table1, 'date1');
         $table->addTable($table2, 'date2');
@@ -280,16 +286,16 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     protected function _getDataTableSimpleArrayTest()
     {
         $array1 = array('max_actions' => 14.0, 'nb_uniq_visitors' => 57.0,);
-        $table1 = new Piwik_DataTable_Simple;
+        $table1 = new Simple;
         $table1->addRowsFromArray($array1);
 
         $array2 = array('max_actions' => 140.0, 'nb_uniq_visitors' => 570.0,);
-        $table2 = new Piwik_DataTable_Simple;
+        $table2 = new Simple;
         $table2->addRowsFromArray($array2);
 
-        $table3 = new Piwik_DataTable_Simple;
+        $table3 = new Simple;
 
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('testKey');
         $table->addTable($table1, 'row1');
         $table->addTable($table2, 'row2');
@@ -301,15 +307,15 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     protected function _getDataTableSimpleOneRowArrayTest()
     {
         $array1 = array('nb_visits' => 14.0);
-        $table1 = new Piwik_DataTable_Simple;
+        $table1 = new Simple;
         $table1->addRowsFromArray($array1);
         $array2 = array('nb_visits' => 15.0);
-        $table2 = new Piwik_DataTable_Simple;
+        $table2 = new Simple;
         $table2->addRowsFromArray($array2);
 
-        $table3 = new Piwik_DataTable_Simple;
+        $table3 = new Simple;
 
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('testKey');
         $table->addTable($table1, 'row1');
         $table->addTable($table2, 'row2');
@@ -320,7 +326,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
 
     protected function _getDataTableArray_containsDataTableArray_normal()
     {
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('parentArrayKey');
         $table->addTable($this->_getDataTableArrayTest(), 'idSite');
         return $table;
@@ -328,7 +334,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
 
     protected function _getDataTableArray_containsDataTableArray_simple()
     {
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('parentArrayKey');
         $table->addTable($this->_getDataTableSimpleArrayTest(), 'idSite');
         return $table;
@@ -336,7 +342,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
 
     protected function _getDataTableArray_containsDataTableArray_simpleOneRow()
     {
-        $table = new Piwik_DataTable_Array();
+        $table = new DataTable\Map();
         $table->setKeyName('parentArrayKey');
         $table->addTable($this->_getDataTableSimpleOneRowArrayTest(), 'idSite');
         return $table;
@@ -351,7 +357,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     public function testXMLArrayTest1()
     {
         $dataTable = $this->_getDataTableArrayTest();
-        $render = new Piwik_DataTable_Renderer_Xml();
+        $render = new Xml();
         $render->setTable($dataTable);
         $expected = '<?xml version="1.0" encoding="utf-8" ?>
 <results>
@@ -402,7 +408,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     {
         $dataTable = $this->_getDataTableArray_containsDataTableArray_normal();
 
-        $render = new Piwik_DataTable_Renderer_Xml();
+        $render = new Xml();
         $render->setTable($dataTable);
         $expected = '<?xml version="1.0" encoding="utf-8" ?>
 <results>
@@ -455,7 +461,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     public function testXMLArrayTest2()
     {
         $dataTable = $this->_getDataTableSimpleArrayTest();
-        $render = new Piwik_DataTable_Renderer_Xml();
+        $render = new Xml();
         $render->setTable($dataTable);
 
         $expected = '<?xml version="1.0" encoding="utf-8" ?>
@@ -482,7 +488,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     public function testXMLArrayIsMadeOfArrayTest2()
     {
         $dataTable = $this->_getDataTableArray_containsDataTableArray_simple();
-        $render = new Piwik_DataTable_Renderer_Xml();
+        $render = new Xml();
         $render->setTable($dataTable);
         $expected = '<?xml version="1.0" encoding="utf-8" ?>
 <results>
@@ -511,7 +517,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     public function testXMLArrayTest3()
     {
         $dataTable = $this->_getDataTableSimpleOneRowArrayTest();
-        $render = new Piwik_DataTable_Renderer_Xml();
+        $render = new Xml();
         $render->setTable($dataTable);
 
         $expected = '<?xml version="1.0" encoding="utf-8" ?>
@@ -533,7 +539,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     public function testXMLArrayIsMadeOfArrayTest3()
     {
         $dataTable = $this->_getDataTableArray_containsDataTableArray_simpleOneRow();
-        $render = new Piwik_DataTable_Renderer_Xml();
+        $render = new Xml();
         $render->setTable($dataTable);
         $expected = '<?xml version="1.0" encoding="utf-8" ?>
 <results>
@@ -557,7 +563,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     {
         $data = array();
 
-        $render = new Piwik_DataTable_Renderer_Xml();
+        $render = new Xml();
         $render->setTable($data);
         $expected = '<?xml version="1.0" encoding="utf-8" ?>
 <result />';
@@ -578,7 +584,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
                             "secondElement"),
                       "thirdElement");
 
-        $render = new Piwik_DataTable_Renderer_Xml();
+        $render = new Xml();
         $render->setTable($data);
         $expected = '<?xml version="1.0" encoding="utf-8" ?>
 <result>
@@ -603,7 +609,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     {
         $data = array('a' => 'b', 'c' => 'd', 'e' => 'f', 5 => 'g');
 
-        $render = new Piwik_DataTable_Renderer_Xml();
+        $render = new Xml();
         $render->setTable($data);
         $expected = '<?xml version="1.0" encoding="utf-8" ?>
 <result>
@@ -628,7 +634,7 @@ class DataTable_Renderer_XMLTest extends PHPUnit_Framework_TestCase
     {
         $data = array('c' => array(1, 2, 3, 4), 'e' => array('f' => 'g', 'h' => 'i', 'j' => 'k'));
 
-        $render = new Piwik_DataTable_Renderer_Xml();
+        $render = new Xml();
         $render->setTable($data);
         $expected = '<?xml version="1.0" encoding="utf-8" ?>
 <result>
diff --git a/tests/PHPUnit/Core/DataTable/RowTest.php b/tests/PHPUnit/Core/DataTable/RowTest.php
index 2effe961c4b5a4a4ba6203d3dda4c8eb84cb880d..1995fc0fdde94c42c50e133b7f200b3a5141aab9 100644
--- a/tests/PHPUnit/Core/DataTable/RowTest.php
+++ b/tests/PHPUnit/Core/DataTable/RowTest.php
@@ -5,51 +5,54 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\DataTable;
+use Piwik\DataTable\Row;
+
 class RowTest extends PHPUnit_Framework_TestCase
 {
     /**
      *
      * @group Core
      * @group DataTable
-     * @group Piwik_DataTable_Row
+     * @group Row
      */
     public function testDataTableAssociatedIsNegativeWhenSubDataTableInMemory()
     {
         $testRow = $this->getTestRowWithSubDataTableLoaded();
-        $this->assertTrue($testRow->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] < 0);
+        $this->assertTrue($testRow->c[Row::DATATABLE_ASSOCIATED] < 0);
     }
 
     /**
      *
      * @group Core
      * @group DataTable
-     * @group Piwik_DataTable_Row
+     * @group Row
      */
     public function testDataTableAssociatedIsNegativeWhenSubDataTableAdded()
     {
         $testRow = $this->getTestRowWithSubDataTableNotLoaded();
         $testRow->addSubtable($this->getTestSubDataTable());
-        $this->assertTrue($testRow->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] < 0);
+        $this->assertTrue($testRow->c[Row::DATATABLE_ASSOCIATED] < 0);
     }
 
     /**
      *
      * @group Core
      * @group DataTable
-     * @group Piwik_DataTable_Row
+     * @group Row
      */
     public function testDataTableAssociatedIsNegativeWhenSubDataTableSetted()
     {
         $testRow = $this->getTestRowWithSubDataTableNotLoaded();
         $testRow->setSubtable($this->getTestSubDataTable());
-        $this->assertTrue($testRow->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] < 0);
+        $this->assertTrue($testRow->c[Row::DATATABLE_ASSOCIATED] < 0);
     }
 
     /**
      *
      * @group Core
      * @group DataTable
-     * @group Piwik_DataTable_Row
+     * @group Row
      */
     public function testIdSubDataTabledIsPositiveWhenSubDataTableInMemory()
     {
@@ -61,7 +64,7 @@ class RowTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group DataTable
-     * @group Piwik_DataTable_Row
+     * @group Row
      */
     public function testDataTableAssociatedIsPositiveOnSerializedRow()
     {
@@ -73,13 +76,13 @@ class RowTest extends PHPUnit_Framework_TestCase
         $serializedTestRow = serialize($testRow);
         $unserializedTestRow = unserialize($serializedTestRow);
 
-        $this->assertTrue($unserializedTestRow->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] > 0);
+        $this->assertTrue($unserializedTestRow->c[Row::DATATABLE_ASSOCIATED] > 0);
     }
 
     /**
      * @group Core
      * @group DataTable
-     * @group Piwik_DataTable_Row
+     * @group Row
      */
     public function testDataTableAssociatedIsNegativeAfterSerialize()
     {
@@ -89,14 +92,14 @@ class RowTest extends PHPUnit_Framework_TestCase
 
         $testRow->cleanPostSerialize();
 
-        $this->assertTrue($testRow->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] < 0);
+        $this->assertTrue($testRow->c[Row::DATATABLE_ASSOCIATED] < 0);
     }
 
     /**
      *
      * @group Core
      * @group DataTable
-     * @group Piwik_DataTable_Row
+     * @group Row
      */
     public function testIsSubDataTableLoadedIsTrueWhenSubDataTableInMemory()
     {
@@ -108,7 +111,7 @@ class RowTest extends PHPUnit_Framework_TestCase
      *
      * @group Core
      * @group DataTable
-     * @group Piwik_DataTable_Row
+     * @group Row
      */
     public function testIsSubDataTableLoadedIsFalseWhenSubDataTableNotInMemory()
     {
@@ -120,9 +123,9 @@ class RowTest extends PHPUnit_Framework_TestCase
     {
         $testSubDataTable = $this->getTestSubDataTable();
 
-        $testRow = new Piwik_DataTable_Row(
+        $testRow = new Row(
             array(
-                 Piwik_DataTable_Row::DATATABLE_ASSOCIATED => $testSubDataTable
+                 Row::DATATABLE_ASSOCIATED => $testSubDataTable
             )
         );
 
@@ -131,14 +134,14 @@ class RowTest extends PHPUnit_Framework_TestCase
 
     protected function getTestSubDataTable()
     {
-        return new Piwik_DataTable();
+        return new DataTable();
     }
 
     protected function getTestRowWithSubDataTableNotLoaded()
     {
-        $testRow = new Piwik_DataTable_Row(
+        $testRow = new Row(
             array(
-                 Piwik_DataTable_Row::DATATABLE_ASSOCIATED => 50
+                 Row::DATATABLE_ASSOCIATED => 50
             )
         );
 
diff --git a/tests/PHPUnit/Core/DataTableTest.php b/tests/PHPUnit/Core/DataTableTest.php
index 2a7fdc1548bac15ae77ac2ffc6b102fb933df34e..95e2c8d2fcf0e4c7a6bc112aa8a5116d9daab167 100644
--- a/tests/PHPUnit/Core/DataTableTest.php
+++ b/tests/PHPUnit/Core/DataTableTest.php
@@ -1,13 +1,17 @@
 <?php
-
-use Piwik\Common;
-
 /**
  * Piwik - Open source web analytics
  *
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+
+use Piwik\Common;
+use Piwik\DataTable;
+use Piwik\DataTable\Manager;
+use Piwik\DataTable\Row;
+
+
 class DataTableTest extends PHPUnit_Framework_TestCase
 {
     /**
@@ -20,19 +24,19 @@ class DataTableTest extends PHPUnit_Framework_TestCase
         $this->assertEquals(4, $table->getRowsCount());
         $table->filter('Limit', array(2, 2));
         $this->assertEquals(2, $table->getRowsCount());
-        $table->filter('Piwik_DataTable_Filter_Limit', array(0, 1));
+        $table->filter('Limit', array(0, 1));
         $this->assertEquals(1, $table->getRowsCount());
     }
 
     protected function _getSimpleTestDataTable()
     {
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
         $table->addRowsFromArray(
             array(
-                 array(Piwik_DataTable_Row::COLUMNS => array('label' => 'ten', 'count' => 10)),
-                 array(Piwik_DataTable_Row::COLUMNS => array('label' => 'ninety', 'count' => 90)),
-                 array(Piwik_DataTable_Row::COLUMNS => array('label' => 'hundred', 'count' => 100)),
-                 Piwik_DataTable::ID_SUMMARY_ROW => array(Piwik_DataTable_Row::COLUMNS => array('label' => 'summary', 'count' => 200))
+                 array(Row::COLUMNS => array('label' => 'ten', 'count' => 10)),
+                 array(Row::COLUMNS => array('label' => 'ninety', 'count' => 90)),
+                 array(Row::COLUMNS => array('label' => 'hundred', 'count' => 100)),
+                 DataTable::ID_SUMMARY_ROW => array(Row::COLUMNS => array('label' => 'summary', 'count' => 200))
             )
         );
         return $table;
@@ -78,7 +82,7 @@ class DataTableTest extends PHPUnit_Framework_TestCase
         $this->assertFalse($table->getRowFromId($idToDelete));
 
         // summary row special case
-        $idToDelete = Piwik_DataTable::ID_SUMMARY_ROW;
+        $idToDelete = DataTable::ID_SUMMARY_ROW;
         $this->assertEquals(2, count($table->getRowFromId($idToDelete)->getColumns()));
         $table->deleteRow($idToDelete);
         $this->assertFalse($table->getRowFromId($idToDelete));
@@ -93,8 +97,8 @@ class DataTableTest extends PHPUnit_Framework_TestCase
         $table = $this->_getSimpleTestDataTable();
         $rowsCount = $table->getRowsCount();
 
-        $this->assertEquals($table->getLastRow(), $table->getRowFromId(Piwik_DataTable::ID_SUMMARY_ROW));
-        $table->deleteRow(Piwik_DataTable::ID_SUMMARY_ROW);
+        $this->assertEquals($table->getLastRow(), $table->getRowFromId(DataTable::ID_SUMMARY_ROW));
+        $table->deleteRow(DataTable::ID_SUMMARY_ROW);
 
         $this->assertEquals($table->getLastRow(), $table->getRowFromId($rowsCount - 2));
     }
@@ -129,8 +133,8 @@ class DataTableTest extends PHPUnit_Framework_TestCase
     public function testCountRowsSimple()
     {
 
-        $table = new Piwik_DataTable;
-        $idcol = Piwik_DataTable_Row::COLUMNS;
+        $table = new DataTable;
+        $idcol = Row::COLUMNS;
         $rows = array(
             array($idcol => array('label' => 'google')),
             array($idcol => array('label' => 'ask')),
@@ -160,11 +164,11 @@ class DataTableTest extends PHPUnit_Framework_TestCase
     public function testCountRowsComplex()
     {
 
-        $idcol = Piwik_DataTable_Row::COLUMNS;
-        $idsubtable = Piwik_DataTable_Row::DATATABLE_ASSOCIATED;
+        $idcol = Row::COLUMNS;
+        $idsubtable = Row::DATATABLE_ASSOCIATED;
 
         // table to go in the SUB table of RoW1
-        $tableSubOfSubOfRow1 = new Piwik_DataTable;
+        $tableSubOfSubOfRow1 = new DataTable;
         $rows1sub = array(
             array($idcol => array('label' => 'google')),
             array($idcol => array('label' => 'google78')),
@@ -177,7 +181,7 @@ class DataTableTest extends PHPUnit_Framework_TestCase
         $tableSubOfSubOfRow1->addRowsFromArray($rows1sub);
 
         // table to go in row1
-        $tableSubOfRow1 = new Piwik_DataTable;
+        $tableSubOfRow1 = new DataTable;
         $rows1 = array(
             array($idcol => array('label' => 'google'), $idsubtable => $tableSubOfSubOfRow1),
             array($idcol => array('label' => 'ask')),
@@ -186,7 +190,7 @@ class DataTableTest extends PHPUnit_Framework_TestCase
         $tableSubOfRow1->addRowsFromArray($rows1);
 
         // table to go in row2
-        $tableSubOfRow2 = new Piwik_DataTable;
+        $tableSubOfRow2 = new DataTable;
         $rows2 = array(
             array($idcol => array('label' => 'google')),
             array($idcol => array('label' => 'ask')),
@@ -197,7 +201,7 @@ class DataTableTest extends PHPUnit_Framework_TestCase
         $tableSubOfRow2->addRowsFromArray($rows2);
 
         // main parent table
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
         $rows = array(
             array($idcol => array('label' => 'row1')),
             array($idcol      => array('label' => 'row2'),
@@ -227,11 +231,11 @@ class DataTableTest extends PHPUnit_Framework_TestCase
         $metadata = array('logo'  => 'piwik.png',
                           'super' => array('this column has an array value, amazing'));
         $arrayRow = array(
-            Piwik_DataTable_Row::COLUMNS  => $columns,
-            Piwik_DataTable_Row::METADATA => $metadata,
+            Row::COLUMNS  => $columns,
+            Row::METADATA => $metadata,
             'fake useless key'            => 38959,
             43905724897                   => 'value');
-        $row = new Piwik_DataTable_Row($arrayRow);
+        $row = new Row($arrayRow);
 
         $this->assertEquals($columns, $row->getColumns());
         $this->assertEquals($metadata, $row->getMetadata());
@@ -257,11 +261,11 @@ class DataTableTest extends PHPUnit_Framework_TestCase
         $metadata = array('logo'  => 'piwik.png',
                           'super' => array('this column has an array value, amazing'));
         $arrayRow = array(
-            Piwik_DataTable_Row::COLUMNS  => $columns,
-            Piwik_DataTable_Row::METADATA => $metadata,
+            Row::COLUMNS  => $columns,
+            Row::METADATA => $metadata,
             'fake useless key'            => 38959,
             43905724897                   => 'value');
-        $row1 = new Piwik_DataTable_Row($arrayRow);
+        $row1 = new Row($arrayRow);
 
         $columns2 = array('test_int'          => 5,
                           'test_float'        => 4.5,
@@ -270,7 +274,7 @@ class DataTableTest extends PHPUnit_Framework_TestCase
                           0925824             => 'toto',
                           'integerArrayToSum' => array(1 => 5, 2 => 5.5, 3 => array(2 => 4)),
         );
-        $finalRow = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => $columns2));
+        $finalRow = new Row(array(Row::COLUMNS => $columns2));
         $finalRow->sumRow($row1);
         $columnsWanted = array('test_int'          => 150,
                                'test_float'        => 150.0,
@@ -283,19 +287,29 @@ class DataTableTest extends PHPUnit_Framework_TestCase
         );
 
         // Also testing that metadata is copied over
-        $rowWanted = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => $columnsWanted, Piwik_DataTable_Row::METADATA => $metadata));
-        $this->assertTrue(Piwik_DataTable_Row::isEqual($rowWanted, $finalRow));
+        $rowWanted = new Row(array(Row::COLUMNS => $columnsWanted, Row::METADATA => $metadata));
+        $this->assertTrue(Row::isEqual($rowWanted, $finalRow));
 
 
         // testing that, 'sumRow' does not result in extra unwanted attributes being serialized
-        $expectedRow = 'O:19:"Piwik_DataTable_Row":1:{s:1:"c";a:3:{i:0;a:8:{s:8:"test_int";i:150;s:10:"test_float";d:150;s:11:"test_float2";d:14.5;s:14:"test_stringint";i:150;i:0;s:4:"toto";s:17:"integerArrayToSum";a:3:{i:1;i:6;i:2;d:15.5;i:3;a:2:{i:2;i:7;i:1;i:2;}}s:11:"test_float3";d:1.5;s:4:"test";s:11:"string fake";}i:1;a:2:{s:4:"logo";s:9:"piwik.png";s:5:"super";a:1:{i:0;s:39:"this column has an array value, amazing";}}i:3;N;}}';
-        $this->assertEquals(serialize($finalRow), $expectedRow);
+        $expectedRow = 'O:19:"Piwik\DataTable\Row":1:{s:1:"c";a:3:{i:0;a:8:{s:8:"test_int";i:150;s:10:"test_float";d:150;s:11:"test_float2";d:14.5;s:14:"test_stringint";i:150;i:0;s:4:"toto";s:17:"integerArrayToSum";a:3:{i:1;i:6;i:2;d:15.5;i:3;a:2:{i:2;i:7;i:1;i:2;}}s:11:"test_float3";d:1.5;s:4:"test";s:11:"string fake";}i:1;a:2:{s:4:"logo";s:9:"piwik.png";s:5:"super";a:1:{i:0;s:39:"this column has an array value, amazing";}}i:3;N;}}';
+        $this->assertEquals($expectedRow, serialize($finalRow));
 
         // Testing sumRow with disabled metadata sum
-        $rowWanted = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => $columnsWanted)); // no metadata
-        $finalRow = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => $columns2));
+        $rowWanted = new Row(array(Row::COLUMNS => $columnsWanted)); // no metadata
+        $finalRow = new Row(array(Row::COLUMNS => $columns2));
         $finalRow->sumRow($row1, $enableCopyMetadata = false);
-        $this->assertTrue(Piwik_DataTable_Row::isEqual($rowWanted, $finalRow));
+        $this->assertTrue(Row::isEqual($rowWanted, $finalRow));
+    }
+
+    public function test_unserializeWorks_WhenDataTableFormatPriorPiwik2()
+    {
+        // Prior Piwik 2.0, we didn't use namespaces. Some
+        $oldSerialized = 'O:19:"Piwik_DataTable_Row":1:{s:1:"c";a:3:{i:0;a:8:{s:8:"test_int";i:150;s:10:"test_float";d:150;s:11:"test_float2";d:14.5;
+        s:14:"test_stringint";i:150;i:0;s:4:"toto";s:17:"integerArrayToSum";a:3:{i:1;i:6;i:2;d:15.5;i:3;a:2:{i:2;i:7;i:1;i:2;}}s:11:"test_float3";d:1.5;s:4:"test";s:11:"string fake";}i:1;a:2:{s:4:"logo";s:9:"piwik.png";s:5:"super";a:1:{i:0;s:39:"this column has an array value, amazing";}}i:3;N;}}';
+
+
+
     }
 
     /**
@@ -309,12 +323,12 @@ class DataTableTest extends PHPUnit_Framework_TestCase
         $columns = array(
             'super' => array('this column has an array string that will be 0 when algorithm sums the value'),
         );
-        $row1 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => $columns));
+        $row1 = new Row(array(Row::COLUMNS => $columns));
 
         $columns2 = array(
             'super' => array('this column has geagaean array value, amazing'),
         );
-        $row2 = new Piwik_DataTable_Row(array(Piwik_DataTable_Row::COLUMNS => $columns2));
+        $row2 = new Row(array(Row::COLUMNS => $columns2));
 
         // TODO: when phpunit 3.7 is released, can do check w/ "@expectedException Exception"
         try {
@@ -335,9 +349,9 @@ class DataTableTest extends PHPUnit_Framework_TestCase
     public function testSerializeWithInfiniteRecursion()
     {
         try {
-            $table = new Piwik_DataTable;
-            $table->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS              => array('visits' => 245, 'visitors' => 245),
-                                          Piwik_DataTable_Row::DATATABLE_ASSOCIATED => $table,));
+            $table = new DataTable;
+            $table->addRowFromArray(array(Row::COLUMNS              => array('visits' => 245, 'visitors' => 245),
+                                          Row::DATATABLE_ASSOCIATED => $table,));
 
             $table->getSerialized();
         } catch (Exception $e) {
@@ -356,9 +370,9 @@ class DataTableTest extends PHPUnit_Framework_TestCase
     public function testFilterQueueSortString()
     {
 
-        $idcol = Piwik_DataTable_Row::COLUMNS;
+        $idcol = Row::COLUMNS;
 
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
         $rows = array(
             array($idcol => array('label' => 'google')), //0
             array($idcol => array('label' => 'tsk')), //1
@@ -366,7 +380,7 @@ class DataTableTest extends PHPUnit_Framework_TestCase
         );
         $table->addRowsFromArray($rows);
 
-        $expectedtable = new Piwik_DataTable;
+        $expectedtable = new DataTable;
         $rows = array(
             array($idcol => array('label' => 'google')), //0
             array($idcol => array('label' => 'Q*(%&*("$&%*(&"$*")"))')), //2
@@ -374,31 +388,31 @@ class DataTableTest extends PHPUnit_Framework_TestCase
         );
         $expectedtable->addRowsFromArray($rows);
 
-        $expectedtableReverse = new Piwik_DataTable;
+        $expectedtableReverse = new DataTable;
         $expectedtableReverse->addRowsFromArray(array_reverse($rows));
 
         $tableCopy = clone $table;
-        $this->assertTrue(Piwik_DataTable::isEqual($tableCopy, $table));
+        $this->assertTrue(DataTable::isEqual($tableCopy, $table));
 
         // queue the filter and check the table didnt change
         $table->queueFilter("Sort", array('label', 'asc'));
-        $this->assertTrue(Piwik_DataTable::isEqual($tableCopy, $table));
+        $this->assertTrue(DataTable::isEqual($tableCopy, $table));
 
         // apply filter and check the table is sorted
         $table->applyQueuedFilters();
-        $this->assertTrue(Piwik_DataTable::isEqual($expectedtable, $table));
+        $this->assertTrue(DataTable::isEqual($expectedtable, $table));
 
         // apply one more filter check it hasnt changed
         $table->queueFilter("Sort", array('label', 'desc'));
-        $this->assertTrue(Piwik_DataTable::isEqual($expectedtable, $table));
+        $this->assertTrue(DataTable::isEqual($expectedtable, $table));
 
         // now apply the second sort and check it is correctly sorted
         $table->applyQueuedFilters();
-        $this->assertTrue(Piwik_DataTable::isEqual($expectedtableReverse, $table));
+        $this->assertTrue(DataTable::isEqual($expectedtableReverse, $table));
 
         // do one more time to make sure it doesnt change
         $table->applyQueuedFilters();
-        $this->assertTrue(Piwik_DataTable::isEqual($expectedtableReverse, $table));
+        $this->assertTrue(DataTable::isEqual($expectedtableReverse, $table));
     }
 
     /**
@@ -417,8 +431,8 @@ class DataTableTest extends PHPUnit_Framework_TestCase
          * create some fake tables to make sure that the serialized array of the first TABLE
          * does not take in consideration those tables
          */
-        $useless1 = new Piwik_DataTable;
-        $useless1->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS => array(13,),));
+        $useless1 = new DataTable;
+        $useless1->addRowFromArray(array(Row::COLUMNS => array(13,),));
         /*
          * end fake tables
          */
@@ -426,8 +440,8 @@ class DataTableTest extends PHPUnit_Framework_TestCase
         /*
          * MAIN TABLE
          */
-        $table = new Piwik_DataTable;
-        $subtable = new Piwik_DataTable;
+        $table = new DataTable;
+        $subtable = new DataTable;
         $idtable = $table->getId();
         $idsubtable = $subtable->getId();
 
@@ -436,42 +450,42 @@ class DataTableTest extends PHPUnit_Framework_TestCase
          * does not take in consideration those tables
          * -> we check that the DataTable_Manager is not impacting DataTable 
          */
-        $useless2 = new Piwik_DataTable;
-        $useless1->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS => array(8487,),));
-        $useless3 = new Piwik_DataTable;
-        $useless3->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS => array(8487,),));
+        $useless2 = new DataTable;
+        $useless1->addRowFromArray(array(Row::COLUMNS => array(8487,),));
+        $useless3 = new DataTable;
+        $useless3->addRowFromArray(array(Row::COLUMNS => array(8487,),));
         /*
          * end fake tables
          */
 
-        $row = array(Piwik_DataTable_Row::COLUMNS  => array(0 => 1554, 1 => 42, 2 => 657, 3 => 155744,),
-                     Piwik_DataTable_Row::METADATA => array('logo' => 'test.png'));
-        $row = new Piwik_DataTable_Row($row);
+        $row = array(Row::COLUMNS  => array(0 => 1554, 1 => 42, 2 => 657, 3 => 155744,),
+                     Row::METADATA => array('logo' => 'test.png'));
+        $row = new Row($row);
 
         $table->addRow($row);
-        $table->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS  => array(0 => 1554, 1 => 42,),
-                                      Piwik_DataTable_Row::METADATA => array('url' => 'piwik.org')));
+        $table->addRowFromArray(array(Row::COLUMNS  => array(0 => 1554, 1 => 42,),
+                                      Row::METADATA => array('url' => 'piwik.org')));
 
-        $table->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS              => array(0 => 787877888787,),
-                                      Piwik_DataTable_Row::METADATA             => array('url' => 'OUPLA ADDED'),
-                                      Piwik_DataTable_Row::DATATABLE_ASSOCIATED => $subtable));
+        $table->addRowFromArray(array(Row::COLUMNS              => array(0 => 787877888787,),
+                                      Row::METADATA             => array('url' => 'OUPLA ADDED'),
+                                      Row::DATATABLE_ASSOCIATED => $subtable));
 
         /*
          * SUB TABLE
          */
 
 
-        $row = array(Piwik_DataTable_Row::COLUMNS  => array(0 => 1554,),
-                     Piwik_DataTable_Row::METADATA => array('searchengine' => 'google'),
+        $row = array(Row::COLUMNS  => array(0 => 1554,),
+                     Row::METADATA => array('searchengine' => 'google'),
         );
         $subtable->addRowFromArray($row);
 
-        $row = array(Piwik_DataTable_Row::COLUMNS  => array(0 => 84894,),
-                     Piwik_DataTable_Row::METADATA => array('searchengine' => 'yahoo'),
+        $row = array(Row::COLUMNS  => array(0 => 84894,),
+                     Row::METADATA => array('searchengine' => 'yahoo'),
         );
         $subtable->addRowFromArray($row);
-        $row = array(Piwik_DataTable_Row::COLUMNS  => array(0 => 4898978989,),
-                     Piwik_DataTable_Row::METADATA => array('searchengine' => 'ask'),
+        $row = array(Row::COLUMNS  => array(0 => 4898978989,),
+                     Row::METADATA => array('searchengine' => 'ask'),
         );
         $subtable->addRowFromArray($row);
 
@@ -479,18 +493,18 @@ class DataTableTest extends PHPUnit_Framework_TestCase
         /*
          * SUB SUB TABLE
          */
-        $subsubtable = new Piwik_DataTable;
-        $subsubtable->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS  => array(245),
-                                            Piwik_DataTable_Row::METADATA => array('yes' => 'subsubmetadata1'),)
+        $subsubtable = new DataTable;
+        $subsubtable->addRowFromArray(array(Row::COLUMNS  => array(245),
+                                            Row::METADATA => array('yes' => 'subsubmetadata1'),)
         );
 
-        $subsubtable->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS  => array(13,),
-                                            Piwik_DataTable_Row::METADATA => array('yes' => 'subsubmetadata2'),)
+        $subsubtable->addRowFromArray(array(Row::COLUMNS  => array(13,),
+                                            Row::METADATA => array('yes' => 'subsubmetadata2'),)
         );
 
-        $row = array(Piwik_DataTable_Row::COLUMNS              => array(0 => 666666666666666,),
-                     Piwik_DataTable_Row::METADATA             => array('url' => 'NEW ROW ADDED'),
-                     Piwik_DataTable_Row::DATATABLE_ASSOCIATED => $subsubtable);
+        $row = array(Row::COLUMNS              => array(0 => 666666666666666,),
+                     Row::METADATA             => array('url' => 'NEW ROW ADDED'),
+                     Row::DATATABLE_ASSOCIATED => $subsubtable);
 
         $subtable->addRowFromArray($row);
 
@@ -510,26 +524,26 @@ class DataTableTest extends PHPUnit_Framework_TestCase
         foreach ($table->getRows() as $currentRow) {
             $expectedTableRow = clone $currentRow;
 
-            $currentRowAssociatedDatatableId = $currentRow->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED];
+            $currentRowAssociatedDatatableId = $currentRow->c[Row::DATATABLE_ASSOCIATED];
             if ($currentRowAssociatedDatatableId != null) {
                 // making DATATABLE_ASSOCIATED ids positive
-                $expectedTableRow->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] = -1 * $currentRowAssociatedDatatableId;
+                $expectedTableRow->c[Row::DATATABLE_ASSOCIATED] = -1 * $currentRowAssociatedDatatableId;
             }
 
             $expectedTableRows[] = $expectedTableRow;
         }
 
-        $tableAfter = new Piwik_DataTable;
+        $tableAfter = new DataTable;
         $tableAfter->addRowsFromSerializedArray($serialized[0]);
 
         $this->assertEquals($expectedTableRows, $tableAfter->getRows());
 
-        $subsubtableAfter = new Piwik_DataTable;
+        $subsubtableAfter = new DataTable;
         $subsubtableAfter->addRowsFromSerializedArray($serialized[$idsubsubtable]);
         $this->assertEquals($subsubtable->getRows(), $subsubtableAfter->getRows());
 
-        $this->assertEquals($table, Piwik_DataTable_Manager::getInstance()->getTable($idtable));
-        $this->assertEquals($subsubtable, Piwik_DataTable_Manager::getInstance()->getTable($idsubsubtable));
+        $this->assertEquals($table, Manager::getInstance()->getTable($idtable));
+        $this->assertEquals($subsubtable, Manager::getInstance()->getTable($idsubsubtable));
     }
 
     /**
@@ -550,10 +564,10 @@ class DataTableTest extends PHPUnit_Framework_TestCase
     public function testAddSimpleNoRowTable2()
     {
         $table = $this->_getDataTable1ForTest();
-        $tableEmpty = new Piwik_DataTable;
+        $tableEmpty = new DataTable;
         $tableAfter = clone $table;
         $tableAfter->addDataTable($tableEmpty);
-        $this->assertTrue(Piwik_DataTable::isEqual($table, $tableAfter));
+        $this->assertTrue(DataTable::isEqual($table, $tableAfter));
     }
 
     /**
@@ -565,9 +579,9 @@ class DataTableTest extends PHPUnit_Framework_TestCase
     public function testAddSimpleNoRowTable1()
     {
         $table = $this->_getDataTable1ForTest();
-        $tableEmpty = new Piwik_DataTable;
+        $tableEmpty = new DataTable;
         $tableEmpty->addDataTable($table);
-        $this->assertTrue(Piwik_DataTable::isEqual($tableEmpty, $table));
+        $this->assertTrue(DataTable::isEqual($tableEmpty, $table));
     }
 
     /**
@@ -584,10 +598,10 @@ class DataTableTest extends PHPUnit_Framework_TestCase
         $table1->addDataTable($table2);
 
         $rowsExpected = array_merge($this->_getRowsDataTable1ForTest(), $this->_getRowsDataTable2ForTest());
-        $tableExpected = new Piwik_DataTable;
+        $tableExpected = new DataTable;
         $tableExpected->addRowsFromArray($rowsExpected);
 
-        $this->assertTrue(Piwik_DataTable::isEqual($table1, $tableExpected));
+        $this->assertTrue(DataTable::isEqual($table1, $tableExpected));
     }
 
     /**
@@ -599,15 +613,15 @@ class DataTableTest extends PHPUnit_Framework_TestCase
     public function testAddSimpleSomeCommonRow()
     {
 
-        $idcol = Piwik_DataTable_Row::COLUMNS;
+        $idcol = Row::COLUMNS;
 
         $rows = array(
             array($idcol => array('label' => 'google', 'visits' => 1)),
             array($idcol => array('label' => 'ask', 'visits' => 2)),
             array($idcol => array('label' => '123', 'visits' => 2)),
-            Piwik_DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 7))
+            DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => DataTable::LABEL_SUMMARY_ROW, 'visits' => 7))
         );
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
         $table->addRowsFromArray($rows);
 
         $rows2 = array(
@@ -616,7 +630,7 @@ class DataTableTest extends PHPUnit_Framework_TestCase
             array($idcol => array('label' => ' google ', 'visits' => 5)),
             array($idcol => array('label' => '123', 'visits' => 2)),
         );
-        $table2 = new Piwik_DataTable;
+        $table2 = new DataTable;
         $table2->addRowsFromArray($rows2);
 
         $table->addDataTable($table2);
@@ -627,12 +641,12 @@ class DataTableTest extends PHPUnit_Framework_TestCase
             array($idcol => array('label' => '123', 'visits' => 4)),
             array($idcol => array('label' => 'test', 'visits' => 1)),
             array($idcol => array('label' => ' google ', 'visits' => 5)),
-            Piwik_DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 7))
+            DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => DataTable::LABEL_SUMMARY_ROW, 'visits' => 7))
         );
-        $tableExpected = new Piwik_DataTable;
+        $tableExpected = new DataTable;
         $tableExpected->addRowsFromArray($rowsExpected);
 
-        $this->assertTrue(Piwik_DataTable::isEqual($table, $tableExpected));
+        $this->assertTrue(DataTable::isEqual($table, $tableExpected));
     }
 
     /**
@@ -643,24 +657,24 @@ class DataTableTest extends PHPUnit_Framework_TestCase
      */
     public function testAddSimpleAllCommonRow()
     {
-        $idcol = Piwik_DataTable_Row::COLUMNS;
+        $idcol = Row::COLUMNS;
 
         $rows = array(
             array($idcol => array('label' => 'google', 'visits' => 1)),
             array($idcol => array('label' => 'ask', 'visits' => 2)),
             array($idcol => array('label' => '123', 'visits' => 2)),
-            Piwik_DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 7))
+            DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => DataTable::LABEL_SUMMARY_ROW, 'visits' => 7))
         );
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
         $table->addRowsFromArray($rows);
 
         $rows2 = array(
             array($idcol => array('label' => 'google', 'visits' => -1)),
             array($idcol => array('label' => 'ask', 'visits' => 0)),
             array($idcol => array('label' => '123', 'visits' => 1.5)),
-            Piwik_DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 8))
+            DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => DataTable::LABEL_SUMMARY_ROW, 'visits' => 8))
         );
-        $table2 = new Piwik_DataTable;
+        $table2 = new DataTable;
         $table2->addRowsFromArray($rows2);
 
         $table->addDataTable($table2);
@@ -669,12 +683,12 @@ class DataTableTest extends PHPUnit_Framework_TestCase
             array($idcol => array('label' => 'google', 'visits' => 0)),
             array($idcol => array('label' => 'ask', 'visits' => 2)),
             array($idcol => array('label' => '123', 'visits' => 3.5)),
-            Piwik_DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 15))
+            DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => DataTable::LABEL_SUMMARY_ROW, 'visits' => 15))
         );
-        $tableExpected = new Piwik_DataTable;
+        $tableExpected = new DataTable;
         $tableExpected->addRowsFromArray($rowsExpected);
 
-        $this->assertTrue(Piwik_DataTable::isEqual($table, $tableExpected));
+        $this->assertTrue(DataTable::isEqual($table, $tableExpected));
     }
 
     /**
@@ -686,15 +700,15 @@ class DataTableTest extends PHPUnit_Framework_TestCase
     public function testAddDataTable2times()
     {
 
-        $idcol = Piwik_DataTable_Row::COLUMNS;
+        $idcol = Row::COLUMNS;
 
         $rows = array(
             array($idcol => array('label' => 'google', 'visits' => 1)),
             array($idcol => array('label' => 'ask', 'visits' => 0)),
             array($idcol => array('label' => '123', 'visits' => 2)),
-            Piwik_DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 1))
+            DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => DataTable::LABEL_SUMMARY_ROW, 'visits' => 1))
         );
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
         $table->addRowsFromArray($rows);
 
         $rows2 = array(
@@ -702,16 +716,16 @@ class DataTableTest extends PHPUnit_Framework_TestCase
             array($idcol => array('label' => 'ask', 'visits' => 100)),
             array($idcol => array('label' => '123456', 'visits' => 1.5)),
         );
-        $table2 = new Piwik_DataTable;
+        $table2 = new DataTable;
         $table2->addRowsFromArray($rows2);
 
         $rows3 = array(
             array($idcol => array('label' => 'google2', 'visits' => -1)),
             array($idcol => array('label' => 'ask', 'visits' => -10)),
             array($idcol => array('label' => '123ab', 'visits' => 1.5)),
-            Piwik_DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 3))
+            DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => DataTable::LABEL_SUMMARY_ROW, 'visits' => 3))
         );
-        $table3 = new Piwik_DataTable;
+        $table3 = new DataTable;
         $table3->addRowsFromArray($rows3);
 
         // add the 2 tables
@@ -725,12 +739,12 @@ class DataTableTest extends PHPUnit_Framework_TestCase
             array($idcol => array('label' => 'google2', 'visits' => -2)),
             array($idcol => array('label' => '123456', 'visits' => 1.5)),
             array($idcol => array('label' => '123ab', 'visits' => 1.5)),
-            Piwik_DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 4))
+            DataTable::ID_SUMMARY_ROW => array($idcol => array('label' => DataTable::LABEL_SUMMARY_ROW, 'visits' => 4))
         );
-        $tableExpected = new Piwik_DataTable;
+        $tableExpected = new DataTable;
         $tableExpected->addRowsFromArray($rowsExpected);
 
-        $this->assertTrue(Piwik_DataTable::isEqual($table, $tableExpected));
+        $this->assertTrue(DataTable::isEqual($table, $tableExpected));
     }
 
 
@@ -740,16 +754,16 @@ class DataTableTest extends PHPUnit_Framework_TestCase
      */
     public function testUnrelatedDataTableNotDestructed()
     {
-        $mockedDataTable = $this->getMock('Piwik_DataTable', array('__destruct'));
+        $mockedDataTable = $this->getMock('\Piwik\DataTable', array('__destruct'));
         $mockedDataTable->expects($this->never())->method('__destruct');
 
-        $rowBeingDestructed = new Piwik_DataTable_Row();
+        $rowBeingDestructed = new Row();
 
-        // we simulate the fact that the value of Piwik_DataTable_Row::DATATABLE_ASSOCIATED retrieved
-        // from the database is in conflict with one of the Piwik_DataTable_Manager managed table identifiers.
+        // we simulate the fact that the value of Row::DATATABLE_ASSOCIATED retrieved
+        // from the database is in conflict with one of the Manager managed table identifiers.
         // This is a rare but legitimate case as identifiers are not thoroughly synchronized
         // when the expanded parameter is false.
-        $rowBeingDestructed->c[Piwik_DataTable_Row::DATATABLE_ASSOCIATED] = $mockedDataTable->getId();
+        $rowBeingDestructed->c[Row::DATATABLE_ASSOCIATED] = $mockedDataTable->getId();
 
         Common::destroy($rowBeingDestructed);
     }
@@ -760,10 +774,10 @@ class DataTableTest extends PHPUnit_Framework_TestCase
      */
     public function testGetSerializedCallsCleanPostSerialize()
     {
-        $mockedDataTableRow = $this->getMock('Piwik_DataTable_Row', array('cleanPostSerialize'));
+        $mockedDataTableRow = $this->getMock('Row', array('cleanPostSerialize'));
         $mockedDataTableRow->expects($this->once())->method('cleanPostSerialize');
 
-        $dataTableBeingSerialized = new Piwik_DataTable();
+        $dataTableBeingSerialized = new DataTable();
         $dataTableBeingSerialized->addRow($mockedDataTableRow);
 
         $dataTableBeingSerialized->getSerialized();
@@ -775,10 +789,10 @@ class DataTableTest extends PHPUnit_Framework_TestCase
      */
     public function testSubDataTableIsDestructed()
     {
-        $mockedDataTable = $this->getMock('Piwik_DataTable', array('__destruct'));
+        $mockedDataTable = $this->getMock('\Piwik\DataTable', array('__destruct'));
         $mockedDataTable->expects($this->once())->method('__destruct');
 
-        $rowBeingDestructed = new Piwik_DataTable_Row();
+        $rowBeingDestructed = new Row();
         $rowBeingDestructed->setSubtable($mockedDataTable);
 
         Common::destroy($rowBeingDestructed);
@@ -787,7 +801,7 @@ class DataTableTest extends PHPUnit_Framework_TestCase
     protected function _getDataTable1ForTest()
     {
         $rows = $this->_getRowsDataTable1ForTest();
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
         $table->addRowsFromArray($rows);
         return $table;
     }
@@ -795,7 +809,7 @@ class DataTableTest extends PHPUnit_Framework_TestCase
     protected function _getDataTable2ForTest()
     {
         $rows = $this->_getRowsDataTable2ForTest();
-        $table = new Piwik_DataTable;
+        $table = new DataTable;
         $table->addRowsFromArray($rows);
         return $table;
     }
@@ -803,10 +817,10 @@ class DataTableTest extends PHPUnit_Framework_TestCase
     protected function _getRowsDataTable1ForTest()
     {
         $rows = array(
-            array(Piwik_DataTable_Row::COLUMNS => array('label' => 'google', 'visits' => 1)),
-            array(Piwik_DataTable_Row::COLUMNS => array('label' => 'ask', 'visits' => 2)),
-            array(Piwik_DataTable_Row::COLUMNS => array('label' => '123', 'visits' => 2)),
-            Piwik_DataTable::ID_SUMMARY_ROW => array(Piwik_DataTable_Row::COLUMNS => array('label' => Piwik_DataTable::LABEL_SUMMARY_ROW, 'visits' => 4))
+            array(Row::COLUMNS => array('label' => 'google', 'visits' => 1)),
+            array(Row::COLUMNS => array('label' => 'ask', 'visits' => 2)),
+            array(Row::COLUMNS => array('label' => '123', 'visits' => 2)),
+            DataTable::ID_SUMMARY_ROW => array(Row::COLUMNS => array('label' => DataTable::LABEL_SUMMARY_ROW, 'visits' => 4))
 
         );
         return $rows;
@@ -815,9 +829,9 @@ class DataTableTest extends PHPUnit_Framework_TestCase
     protected function _getRowsDataTable2ForTest()
     {
         $rows = array(
-            array(Piwik_DataTable_Row::COLUMNS => array('label' => 'test', 'visits' => 1)),
-            array(Piwik_DataTable_Row::COLUMNS => array('label' => ' google ', 'visits' => 3)),
-            array(Piwik_DataTable_Row::COLUMNS => array('label' => '123a', 'visits' => 2)),
+            array(Row::COLUMNS => array('label' => 'test', 'visits' => 1)),
+            array(Row::COLUMNS => array('label' => ' google ', 'visits' => 3)),
+            array(Row::COLUMNS => array('label' => '123a', 'visits' => 2)),
         );
         return $rows;
     }
diff --git a/tests/PHPUnit/Core/DateTest.php b/tests/PHPUnit/Core/DateTest.php
index 4b80aa3abd3713995ef89a47b0adfd67591824c5..0f9d70601118146860552426026181d357d35271 100644
--- a/tests/PHPUnit/Core/DateTest.php
+++ b/tests/PHPUnit/Core/DateTest.php
@@ -1,12 +1,13 @@
 <?php
-use Piwik\Piwik;
-
 /**
  * Piwik - Open source web analytics
  *
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Piwik;
+use Piwik\Date;
+
 class DateTest extends PHPUnit_Framework_TestCase
 {
     /**
@@ -17,7 +18,7 @@ class DateTest extends PHPUnit_Framework_TestCase
      */
     public function testToday()
     {
-        $date = Piwik_Date::today();
+        $date = Date::today();
         $this->assertEquals(strtotime(date("Y-m-d ") . " 00:00:00"), $date->getTimestamp());
 
         // test getDatetime()
@@ -34,7 +35,7 @@ class DateTest extends PHPUnit_Framework_TestCase
      */
     public function testYesterday()
     {
-        $date = Piwik_Date::yesterday();
+        $date = Date::yesterday();
         $this->assertEquals(strtotime(date("Y-m-d", strtotime('-1day')) . " 00:00:00"), $date->getTimestamp());
     }
 
@@ -45,7 +46,7 @@ class DateTest extends PHPUnit_Framework_TestCase
     public function testInvalidDateThrowsException()
     {
         try {
-            Piwik_Date::factory('0001-01-01');
+            Date::factory('0001-01-01');
         } catch (Exception $e) {
             return;
         }
@@ -59,28 +60,28 @@ class DateTest extends PHPUnit_Framework_TestCase
     public function testFactoryTimezone()
     {
         // now in UTC converted to UTC+10 means adding 10 hours 
-        $date = Piwik_Date::factory('now', 'UTC+10');
-        $dateExpected = Piwik_Date::now()->addHour(10);
+        $date = Date::factory('now', 'UTC+10');
+        $dateExpected = Date::now()->addHour(10);
         $this->assertEquals($dateExpected->getDatetime(), $date->getDatetime());
 
         // Congo is in UTC+1 all year long (no DST)
-        $date = Piwik_Date::factory('now', 'Africa/Brazzaville');
-        $dateExpected = Piwik_Date::factory('now')->addHour(1);
+        $date = Date::factory('now', 'Africa/Brazzaville');
+        $dateExpected = Date::factory('now')->addHour(1);
         $this->assertEquals($dateExpected->getDatetime(), $date->getDatetime());
 
         // yesterday same time in Congo is the same as today in Congo - 24 hours
-        $date = Piwik_Date::factory('yesterdaySameTime', 'Africa/Brazzaville');
-        $dateExpected = Piwik_Date::factory('now', 'Africa/Brazzaville')->subHour(24);
+        $date = Date::factory('yesterdaySameTime', 'Africa/Brazzaville');
+        $dateExpected = Date::factory('now', 'Africa/Brazzaville')->subHour(24);
         $this->assertEquals($dateExpected->getDatetime(), $date->getDatetime());
 
         if (Piwik::isTimezoneSupportEnabled()) {
             // convert to/from local time
             $now = time();
-            $date = Piwik_Date::factory($now, 'America/New_York');
+            $date = Date::factory($now, 'America/New_York');
             $time = $date->getTimestamp();
             $this->assertTrue($time < $now);
 
-            $date = Piwik_Date::factory($time)->setTimezone('America/New_York');
+            $date = Date::factory($time)->setTimezone('America/New_York');
             $time = $date->getTimestamp();
             $this->assertEquals($now, $time);
         }
@@ -92,7 +93,7 @@ class DateTest extends PHPUnit_Framework_TestCase
      */
     public function testSetTimezoneDayInUTC()
     {
-        $date = Piwik_Date::factory('2010-01-01');
+        $date = Date::factory('2010-01-01');
 
         $dayStart = '2010-01-01 00:00:00';
         $dayEnd = '2010-01-01 23:59:59';
@@ -143,7 +144,7 @@ class DateTest extends PHPUnit_Framework_TestCase
      */
     public function testModifyDateWithTimezone()
     {
-        $date = Piwik_Date::factory('2010-01-01');
+        $date = Date::factory('2010-01-01');
         $date = $date->setTimezone('UTC-1');
 
         $timestamp = $date->getTimestamp();
@@ -152,7 +153,7 @@ class DateTest extends PHPUnit_Framework_TestCase
 
 
         if (Piwik::isTimezoneSupportEnabled()) {
-            $date = Piwik_Date::factory('2010-01-01')->setTimezone('Europe/Paris');
+            $date = Date::factory('2010-01-01')->setTimezone('Europe/Paris');
             $dateExpected = clone $date;
             $date = $date->addHour(2);
             $dateExpected = $dateExpected->addHour(1.1)->addHour(0.9)->addHour(1)->subHour(1);
@@ -167,7 +168,7 @@ class DateTest extends PHPUnit_Framework_TestCase
     public function testGetDateStartUTCEndDuringDstTimezone()
     {
         if (Piwik::isTimezoneSupportEnabled()) {
-            $date = Piwik_Date::factory('2010-03-28');
+            $date = Date::factory('2010-03-28');
 
             $date = $date->setTimezone('Europe/Paris');
             $utcDayStart = '2010-03-27 23:00:00';
@@ -187,19 +188,19 @@ class DateTest extends PHPUnit_Framework_TestCase
         // add partial hours less than 1
         $dayStart = '2010-03-28 00:00:00';
         $dayExpected = '2010-03-28 00:18:00';
-        $date = Piwik_Date::factory($dayStart)->addHour(0.3);
+        $date = Date::factory($dayStart)->addHour(0.3);
         $this->assertEquals($dayExpected, $date->getDatetime());
         $date = $date->subHour(0.3);
         $this->assertEquals($dayStart, $date->getDatetime());
 
         // add partial hours
         $dayExpected = '2010-03-28 05:45:00';
-        $date = Piwik_Date::factory($dayStart)->addHour(5.75);
+        $date = Date::factory($dayStart)->addHour(5.75);
         $this->assertEquals($dayExpected, $date->getDatetime());
 
         // remove partial hours
         $dayExpected = '2010-03-27 18:15:00';
-        $date = Piwik_Date::factory($dayStart)->subHour(5.75);
+        $date = Date::factory($dayStart)->subHour(5.75);
         $this->assertEquals($dayExpected, $date->getDatetime());
     }
 
@@ -211,8 +212,8 @@ class DateTest extends PHPUnit_Framework_TestCase
     {
         $dateTime = '2010-01-03 11:22:33';
         $expectedTime = '2010-01-05 11:28:33';
-        $this->assertEquals($expectedTime, Piwik_Date::factory($dateTime)->addHour(48.1)->getDatetime());
-        $this->assertEquals($dateTime, Piwik_Date::factory($dateTime)->addHour(48.1)->subHour(48.1)->getDatetime());
+        $this->assertEquals($expectedTime, Date::factory($dateTime)->addHour(48.1)->getDatetime());
+        $this->assertEquals($dateTime, Date::factory($dateTime)->addHour(48.1)->subHour(48.1)->getDatetime());
     }
 
     /**
@@ -221,13 +222,13 @@ class DateTest extends PHPUnit_Framework_TestCase
      */
     public function testAddPeriod()
     {
-        $date = Piwik_Date::factory('2010-01-01');
-        $dateExpected = Piwik_Date::factory('2010-01-06');
+        $date = Date::factory('2010-01-01');
+        $dateExpected = Date::factory('2010-01-06');
         $date = $date->addPeriod(5, 'day');
         $this->assertEquals($dateExpected->getTimestamp(), $date->getTimestamp());
 
-        $date = Piwik_Date::factory('2010-03-01');
-        $dateExpected = Piwik_Date::factory('2010-04-05');
+        $date = Date::factory('2010-03-01');
+        $dateExpected = Date::factory('2010-04-05');
         $date = $date->addPeriod(5, 'week');
         $this->assertEquals($dateExpected->getTimestamp(), $date->getTimestamp());
     }
@@ -238,13 +239,13 @@ class DateTest extends PHPUnit_Framework_TestCase
      */
     public function testSubPeriod()
     {
-        $date = Piwik_Date::factory('2010-03-01');
-        $dateExpected = Piwik_Date::factory('2010-02-15');
+        $date = Date::factory('2010-03-01');
+        $dateExpected = Date::factory('2010-02-15');
         $date = $date->subPeriod(2, 'week');
         $this->assertEquals($dateExpected->getTimestamp(), $date->getTimestamp());
 
-        $date = Piwik_Date::factory('2010-12-15');
-        $dateExpected = Piwik_Date::factory('2005-12-15');
+        $date = Date::factory('2010-12-15');
+        $dateExpected = Date::factory('2005-12-15');
         $date = $date->subPeriod(5, 'year');
         $this->assertEquals($dateExpected->getTimestamp(), $date->getTimestamp());
     }
diff --git a/tests/PHPUnit/Core/Period/DayTest.php b/tests/PHPUnit/Core/Period/DayTest.php
index 41117c4177ffc17eb0fea6a9c20d138e143accd8..9a55298569f3c396eabee7f87089952d6b7daa53 100644
--- a/tests/PHPUnit/Core/Period/DayTest.php
+++ b/tests/PHPUnit/Core/Period/DayTest.php
@@ -5,6 +5,10 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
+use Piwik\Period\Day;
+use Piwik\Translate;
+
 /**
  * Testing Period_Day
  */
@@ -18,7 +22,7 @@ class Period_DayTest extends PHPUnit_Framework_TestCase
     public function testInvalidDate()
     {
         try {
-            $period = new Piwik_Period_Day('Invalid Date');
+            $period = new Day('Invalid Date');
         } catch (Exception $e) {
             return;
         }
@@ -32,7 +36,7 @@ class Period_DayTest extends PHPUnit_Framework_TestCase
      */
     public function testToString()
     {
-        $period = new Piwik_Period_Day(Piwik_Date::today());
+        $period = new Day(Date::today());
         $this->assertEquals(date("Y-m-d"), $period->getPrettyString());
         $this->assertEquals(date("Y-m-d"), (string)$period);
         $this->assertEquals(date("Y-m-d"), $period->toString());
@@ -46,7 +50,7 @@ class Period_DayTest extends PHPUnit_Framework_TestCase
      */
     public function testDayIsFinishedToday()
     {
-        $period = new Piwik_Period_Day(Piwik_Date::today());
+        $period = new Day(Date::today());
         $this->assertEquals(date("Y-m-d"), $period->toString());
         $this->assertEquals(array(), $period->getSubperiods());
         $this->assertEquals(0, $period->getNumberOfSubperiods());
@@ -61,7 +65,7 @@ class Period_DayTest extends PHPUnit_Framework_TestCase
     public function testDayIsFinishedYesterday()
     {
 
-        $period = new Piwik_Period_Day(Piwik_Date::yesterday());
+        $period = new Day(Date::yesterday());
         $this->assertEquals(date("Y-m-d", time() - 86400), $period->toString());
         $this->assertEquals(array(), $period->getSubperiods());
         $this->assertEquals(0, $period->getNumberOfSubperiods());
@@ -75,7 +79,7 @@ class Period_DayTest extends PHPUnit_Framework_TestCase
      */
     public function testDayIsFinishedTomorrow()
     {
-        $period = new Piwik_Period_Day(Piwik_Date::factory(date("Y-m-d", time() + 86400)));
+        $period = new Day(Date::factory(date("Y-m-d", time() + 86400)));
         $this->assertEquals(date("Y-m-d", time() + 86400), $period->toString());
         $this->assertEquals(array(), $period->getSubperiods());
         $this->assertEquals(0, $period->getNumberOfSubperiods());
@@ -89,7 +93,7 @@ class Period_DayTest extends PHPUnit_Framework_TestCase
      */
     public function testDayIsFinished31stfeb()
     {
-        $period = new Piwik_Period_Day(Piwik_Date::factory("2007-02-31"));
+        $period = new Day(Date::factory("2007-02-31"));
         $this->assertEquals("2007-03-03", $period->toString());
         $this->assertEquals(array(), $period->getSubperiods());
         $this->assertEquals(0, $period->getNumberOfSubperiods());
@@ -104,7 +108,7 @@ class Period_DayTest extends PHPUnit_Framework_TestCase
     public function testDayGetDateStart1()
     {
         // create the period
-        $period = new Piwik_Period_Day(Piwik_Date::factory("2007-02-31"));
+        $period = new Day(Date::factory("2007-02-31"));
 
         // start date
         $startDate = $period->getDateStart();
@@ -125,7 +129,7 @@ class Period_DayTest extends PHPUnit_Framework_TestCase
     public function testDayGetDateStart2()
     {
         // create the period
-        $period = new Piwik_Period_Day(Piwik_Date::factory("2007-01-03"));
+        $period = new Day(Date::factory("2007-01-03"));
 
         // start date
         $startDate = $period->getDateStart();
@@ -146,7 +150,7 @@ class Period_DayTest extends PHPUnit_Framework_TestCase
     public function testDayGetDateStart3()
     {
         // create the period
-        $period = new Piwik_Period_Day(Piwik_Date::factory("2007-12-31"));
+        $period = new Day(Date::factory("2007-12-31"));
 
         // start date
         $startDate = $period->getDateStart();
@@ -167,7 +171,7 @@ class Period_DayTest extends PHPUnit_Framework_TestCase
     public function testDayGetDateEnd1()
     {
         // create the period
-        $period = new Piwik_Period_Day(Piwik_Date::factory("2007-02-31"));
+        $period = new Day(Date::factory("2007-02-31"));
 
         // end date
         $endDate = $period->getDateEnd();
@@ -185,7 +189,7 @@ class Period_DayTest extends PHPUnit_Framework_TestCase
     public function testDayGetDateEnd2()
     {
         // create the period
-        $period = new Piwik_Period_Day(Piwik_Date::factory("2007-04-15"));
+        $period = new Day(Date::factory("2007-04-15"));
 
         // end date
         $endDate = $period->getDateEnd();
@@ -203,7 +207,7 @@ class Period_DayTest extends PHPUnit_Framework_TestCase
     public function testDayGetDateEnd3()
     {
         // create the period
-        $period = new Piwik_Period_Day(Piwik_Date::factory("2007-12-31"));
+        $period = new Day(Date::factory("2007-12-31"));
 
         // end date
         $endDate = $period->getDateEnd();
@@ -221,7 +225,7 @@ class Period_DayTest extends PHPUnit_Framework_TestCase
     public function testAddSubperiodFails()
     {
         // create the period
-        $period = new Piwik_Period_Day(Piwik_Date::factory("2007-12-31"));
+        $period = new Day(Date::factory("2007-12-31"));
 
         try {
             $period->addSubperiod('');
@@ -239,8 +243,8 @@ class Period_DayTest extends PHPUnit_Framework_TestCase
      */
     public function testGetLocalizedShortString()
     {
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
-        $month = new Piwik_Period_Day(Piwik_Date::factory('2024-10-09'));
+        Translate::getInstance()->loadEnglishTranslation();
+        $month = new Day(Date::factory('2024-10-09'));
         $shouldBe = 'Wed 9 Oct';
         $this->assertEquals($shouldBe, $month->getLocalizedShortString());
     }
@@ -252,8 +256,8 @@ class Period_DayTest extends PHPUnit_Framework_TestCase
      */
     public function testGetLocalizedLongString()
     {
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
-        $month = new Piwik_Period_Day(Piwik_Date::factory('2024-10-09'));
+        Translate::getInstance()->loadEnglishTranslation();
+        $month = new Day(Date::factory('2024-10-09'));
         $shouldBe = 'Wednesday 9 October 2024';
         $this->assertEquals($shouldBe, $month->getLocalizedLongString());
     }
@@ -265,8 +269,8 @@ class Period_DayTest extends PHPUnit_Framework_TestCase
      */
     public function testGetPrettyString()
     {
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
-        $month = new Piwik_Period_Day(Piwik_Date::factory('2024-10-09'));
+        Translate::getInstance()->loadEnglishTranslation();
+        $month = new Day(Date::factory('2024-10-09'));
         $shouldBe = '2024-10-09';
         $this->assertEquals($shouldBe, $month->getPrettyString());
     }
diff --git a/tests/PHPUnit/Core/Period/MonthTest.php b/tests/PHPUnit/Core/Period/MonthTest.php
index 4d74cbc434c3d55ffd40f9b8db8ddf4145a02de9..1996863a03f68f2ace554b5727c7d704d11f5a9e 100644
--- a/tests/PHPUnit/Core/Period/MonthTest.php
+++ b/tests/PHPUnit/Core/Period/MonthTest.php
@@ -5,6 +5,10 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
+use Piwik\Period\Month;
+use Piwik\Translate;
+
 /**
  * Testing Period_Month
  */
@@ -18,7 +22,7 @@ class Period_MonthTest extends PHPUnit_Framework_TestCase
      */
     public function testMonthDec()
     {
-        $month = new Piwik_Period_Month(Piwik_Date::factory("2006-12-31"));
+        $month = new Month(Date::factory("2006-12-31"));
         $correct = array(
             "2006-12-01",
             "2006-12-02",
@@ -63,7 +67,7 @@ class Period_MonthTest extends PHPUnit_Framework_TestCase
      */
     public function testMonthFebLeap()
     {
-        $month = new Piwik_Period_Month(Piwik_Date::factory("2024-02-11"));
+        $month = new Month(Date::factory("2024-02-11"));
         $correct = array(
             "2024-02-01",
             "2024-02-02",
@@ -106,7 +110,7 @@ class Period_MonthTest extends PHPUnit_Framework_TestCase
      */
     public function testMonthFebNonLeap()
     {
-        $month = new Piwik_Period_Month(Piwik_Date::factory("2023-02-11"));
+        $month = new Month(Date::factory("2023-02-11"));
         $correct = array(
             "2023-02-01",
             "2023-02-02",
@@ -148,7 +152,7 @@ class Period_MonthTest extends PHPUnit_Framework_TestCase
      */
     public function testMonthJan()
     {
-        $month = new Piwik_Period_Month(Piwik_Date::factory("2007-01-01"));
+        $month = new Month(Date::factory("2007-01-01"));
         $correct = array(
             "2007-01-01",
             "2007-01-02",
@@ -193,7 +197,7 @@ class Period_MonthTest extends PHPUnit_Framework_TestCase
      */
     public function testMonthDSTChangeMarch()
     {
-        $month = new Piwik_Period_Month(Piwik_Date::factory("2007-02-31"));
+        $month = new Month(Date::factory("2007-02-31"));
         $correct = array(
             "2007-03-01",
             "2007-03-02",
@@ -237,7 +241,7 @@ class Period_MonthTest extends PHPUnit_Framework_TestCase
      */
     public function testMonthDSTChangeOct()
     {
-        $month = new Piwik_Period_Month(Piwik_Date::factory("2017-10-31"));
+        $month = new Month(Date::factory("2017-10-31"));
         $correct = array(
             "2017-10-01",
             "2017-10-02",
@@ -281,8 +285,8 @@ class Period_MonthTest extends PHPUnit_Framework_TestCase
      */
     public function testGetLocalizedShortString()
     {
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
-        $month = new Piwik_Period_Month(Piwik_Date::factory('2024-10-09'));
+        Translate::getInstance()->loadEnglishTranslation();
+        $month = new Month(Date::factory('2024-10-09'));
         $shouldBe = 'Oct 2024';
         $this->assertEquals($shouldBe, $month->getLocalizedShortString());
     }
@@ -294,8 +298,8 @@ class Period_MonthTest extends PHPUnit_Framework_TestCase
      */
     public function testGetLocalizedLongString()
     {
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
-        $month = new Piwik_Period_Month(Piwik_Date::factory('2024-10-09'));
+        Translate::getInstance()->loadEnglishTranslation();
+        $month = new Month(Date::factory('2024-10-09'));
         $shouldBe = '2024, October';
         $this->assertEquals($shouldBe, $month->getLocalizedLongString());
     }
@@ -307,8 +311,8 @@ class Period_MonthTest extends PHPUnit_Framework_TestCase
      */
     public function testGetPrettyString()
     {
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
-        $month = new Piwik_Period_Month(Piwik_Date::factory('2024-10-09'));
+        Translate::getInstance()->loadEnglishTranslation();
+        $month = new Month(Date::factory('2024-10-09'));
         $shouldBe = '2024-10';
         $this->assertEquals($shouldBe, $month->getPrettyString());
     }
diff --git a/tests/PHPUnit/Core/Period/RangeTest.php b/tests/PHPUnit/Core/Period/RangeTest.php
index 8103e3abae9dd74ed18aa054eaf63b8f4401ab61..dc7799e732f4b89fb8057ddc23b3009b08f3d30d 100644
--- a/tests/PHPUnit/Core/Period/RangeTest.php
+++ b/tests/PHPUnit/Core/Period/RangeTest.php
@@ -5,7 +5,11 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
-use Piwik\Period_Range;
+use Piwik\Period\Month;
+use Piwik\Period\Week;
+use Piwik\Period\Range;
+use Piwik\Date;
+use Piwik\Translate;
 
 class Period_RangeTest extends PHPUnit_Framework_TestCase
 {
@@ -13,12 +17,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testRangeToday()
     {
-        $range = new Period_Range('day', 'last1');
-        $today = Piwik_Date::today();
+        $range = new Range('day', 'last1');
+        $today = Date::today();
 
         $correct = array(
             $today->toString(),
@@ -32,13 +36,13 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testRangeTodayUtcPlus12()
     {
         // rather ugly test, UTC+23 doesn't exist, but it's a way to test that last1 in UTC+23 will be "our" UTC tomorrow
-        $range = new Period_Range('day', 'last1', 'UTC+23');
-        $today = Piwik_Date::now()->addHour(23);
+        $range = new Range('day', 'last1', 'UTC+23');
+        $today = Date::now()->addHour(23);
 
         $correct = array(
             $today->toString(),
@@ -53,12 +57,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testRange2days()
     {
-        $range = new Period_Range('day', 'last2');
-        $today = Piwik_Date::today();
+        $range = new Range('day', 'last2');
+        $today = Date::today();
 
         $correct = array(
             $today->toString(),
@@ -74,12 +78,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testRange5days()
     {
-        $range = new Period_Range('day', 'last50');
-        $today = Piwik_Date::today();
+        $range = new Range('day', 'last50');
+        $today = Date::today();
 
         $correct = array();
         for ($i = 0; $i < 50; $i++) {
@@ -95,12 +99,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testRangePrevious3days()
     {
-        $range = new Period_Range('day', 'previous3');
-        $yesterday = Piwik_Date::yesterday();
+        $range = new Range('day', 'previous3');
+        $yesterday = Date::yesterday();
 
         $correct = array();
         for ($i = 0; $i < 3; $i++) {
@@ -116,12 +120,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testRangeComma1()
     {
 
-        $range = new Period_Range('day', '2008-01-01,2008-01-03');
+        $range = new Range('day', '2008-01-01,2008-01-03');
 
         $correct = array(
             '2008-01-01',
@@ -137,12 +141,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testRangeComma2()
     {
 
-        $range = new Period_Range('day', '2007-12-22,2008-01-03');
+        $range = new Range('day', '2007-12-22,2008-01-03');
 
         $correct = array(
             '2007-12-22',
@@ -168,12 +172,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testRangeWeekcomma1()
     {
-        $range = new Period_Range('week', '2007-12-22,2008-01-03');
-        $range2 = new Period_Range('week', '2007-12-19,2008-01-03');
+        $range = new Range('week', '2007-12-22,2008-01-03');
+        $range2 = new Range('week', '2007-12-19,2008-01-03');
 
         $correct = array(
             array(
@@ -215,11 +219,11 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testRangeYearcomma1()
     {
-        $range = new Period_Range('year', '2006-12-22,2007-01-03');
+        $range = new Range('year', '2006-12-22,2007-01-03');
 
         $correct = array(
             array(
@@ -260,11 +264,11 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testRangeMonthcomma1()
     {
-        $range = new Period_Range('month', '2006-12-22,2007-01-03');
+        $range = new Range('month', '2006-12-22,2007-01-03');
 
         $correct = array(
             array(
@@ -343,17 +347,17 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testRangeWeek()
     {
-        $range = new Period_Range('week', 'last50');
-        $today = Piwik_Date::today();
+        $range = new Range('week', 'last50');
+        $today = Date::today();
 
         $correct = array();
         for ($i = 0; $i < 50; $i++) {
             $date = $today->subDay($i * 7);
-            $week = new Piwik_Period_Week($date);
+            $week = new Week($date);
 
             $correct[] = $week->toString();
         }
@@ -368,12 +372,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testRangeWeekLast1()
     {
-        $range = new Period_Range('week', 'last1');
-        $currentWeek = new Piwik_Period_Week(Piwik_Date::today());
+        $range = new Range('week', 'last1');
+        $currentWeek = new Week(Date::today());
         $this->assertEquals(1, $range->getNumberOfSubperiods());
         $this->assertEquals(array($currentWeek->toString()), $range->toString());
     }
@@ -382,17 +386,17 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testRangeMonth()
     {
-        $range = new Period_Range('month', 'last20');
-        $today = Piwik_Date::today();
+        $range = new Range('month', 'last20');
+        $today = Date::today();
 
         $correct = array();
         for ($i = 0; $i < 20; $i++) {
             $date = $today->subMonth($i);
-            $week = new Piwik_Period_Month($date);
+            $week = new Month($date);
 
             $correct[] = $week->toString();
         }
@@ -406,12 +410,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testRangeMonthLast1()
     {
-        $range = new Period_Range('month', 'last1');
-        $month = new Piwik_Period_Month(Piwik_Date::today());
+        $range = new Range('month', 'last1');
+        $month = new Month(Date::today());
         $this->assertEquals(1, $range->getNumberOfSubperiods());
         $this->assertEquals(array($month->toString()), $range->toString());
     }
@@ -420,18 +424,18 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testRangePreviousmonth()
     {
-        $range = new Period_Range('month', 'previous10');
-        $end = Piwik_Date::today();
+        $range = new Range('month', 'previous10');
+        $end = Date::today();
         $end = $end->subMonth(1);
 
         $correct = array();
         for ($i = 0; $i < 10; $i++) {
             $date = $end->subMonth($i);
-            $week = new Piwik_Period_Month($date);
+            $week = new Month($date);
 
             $correct[] = $week->toString();
         }
@@ -446,12 +450,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testRangeYear()
     {
-        $range = new Period_Range('year', 'last10');
-        $today = Piwik_Date::today();
+        $range = new Range('year', 'last10');
+        $today = Date::today();
 
         $correct = array();
         for ($i = 0; $i < 10; $i++) {
@@ -470,12 +474,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testRangeYearLast1()
     {
-        $range = new Period_Range('year', 'last1');
-        $currentYear = new Piwik_Period_Year(Piwik_Date::today());
+        $range = new Range('year', 'last1');
+        $currentYear = new Piwik_Period_Year(Date::today());
         $this->assertEquals(1, $range->getNumberOfSubperiods());
         $this->assertEquals(array($currentYear->toString()), $range->toString());
     }
@@ -483,11 +487,11 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testCustomRangeWeekInsideEndingToday()
     {
-        $range = new Period_Range('range', '2007-12-22,2008-01-03', 'UTC', Piwik_Date::factory('2008-01-03'));
+        $range = new Range('range', '2007-12-22,2008-01-03', 'UTC', Date::factory('2008-01-03'));
 
         $correct = array(
             '2007-12-22',
@@ -518,20 +522,20 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testCustomRangeWeekInsideEndingYesterday()
     {
         $todays = array(
-            Piwik_Date::factory('2008-01-04'),
-            Piwik_Date::factory('2008-01-05'),
-            Piwik_Date::factory('2008-01-14'),
-            Piwik_Date::factory('2008-02-14'),
-            Piwik_Date::factory('2009-02-14'),
+            Date::factory('2008-01-04'),
+            Date::factory('2008-01-05'),
+            Date::factory('2008-01-14'),
+            Date::factory('2008-02-14'),
+            Date::factory('2009-02-14'),
         );
 
         foreach ($todays as $today) {
-            $range = new Period_Range('range', '2007-12-22,2008-01-03', 'UTC', $today);
+            $range = new Range('range', '2007-12-22,2008-01-03', 'UTC', $today);
 
             $correct = array(
                 '2007-12-22',
@@ -558,11 +562,11 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testCustomRangeOnlyDaysLessThanOneWeek()
     {
-        $range = new Period_Range('range', '2007-12-30,2008-01-01');
+        $range = new Range('range', '2007-12-30,2008-01-01');
 
         $correct = array(
             '2007-12-30',
@@ -576,11 +580,11 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testCustomRangeOneWeekOnly()
     {
-        $range = new Period_Range('range', '2007-12-31,2008-01-06');
+        $range = new Range('range', '2007-12-31,2008-01-06');
 
         $correct = array(
             array(
@@ -600,11 +604,11 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testCustomRangeStartsWithWeek()
     {
-        $range = new Period_Range('range', '2007-12-31,2008-01-08');
+        $range = new Range('range', '2007-12-31,2008-01-08');
 
         $correct = array(
             array(
@@ -626,11 +630,11 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testCustomRangeEndsWithWeek()
     {
-        $range = new Period_Range('range', '2007-12-21,2008-01-06');
+        $range = new Range('range', '2007-12-21,2008-01-06');
 
         $correct = array(
             '2007-12-21',
@@ -662,11 +666,11 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testCustomRangeContainsMonthAndWeek()
     {
-        $range = new Period_Range('range', '2011-09-18,2011-11-02', 'UTC', Piwik_Date::factory('2012-01-01'));
+        $range = new Range('range', '2011-09-18,2011-11-02', 'UTC', Date::factory('2012-01-01'));
 
         $correct = array(
 
@@ -729,22 +733,22 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testCustomRangeContainsSeveralMonthsAndWeeksStartingWithMonth()
     {
         // Testing when "today" is in the same month, or later in the future
         $todays = array(
-            Piwik_Date::factory('2011-10-18'),
-            Piwik_Date::factory('2011-10-19'),
-            Piwik_Date::factory('2011-10-24'),
-            Piwik_Date::factory('2011-11-01'),
-            Piwik_Date::factory('2011-11-30'),
-            Piwik_Date::factory('2011-12-31'),
-            Piwik_Date::factory('2021-10-18')
+            Date::factory('2011-10-18'),
+            Date::factory('2011-10-19'),
+            Date::factory('2011-10-24'),
+            Date::factory('2011-11-01'),
+            Date::factory('2011-11-30'),
+            Date::factory('2011-12-31'),
+            Date::factory('2021-10-18')
         );
         foreach ($todays as $today) {
-            $range = new Period_Range('range', '2011-08-01,2011-10-17', 'UTC', $today);
+            $range = new Range('range', '2011-08-01,2011-10-17', 'UTC', $today);
 
             $correct = array(
 
@@ -845,11 +849,11 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testCustomRangeOneMonthOnly()
     {
-        $range = new Period_Range('range', '2011-09-01,2011-09-30');
+        $range = new Range('range', '2011-09-01,2011-09-30');
 
         $correct = array(
             array(
@@ -891,11 +895,11 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function test_CustomRange_startsWithWeek_EndsWithMonth()
     {
-        $range = new Period_Range('range', '2011-07-25,2011-08-31');
+        $range = new Range('range', '2011-07-25,2011-08-31');
 
         $correct = array(
 
@@ -948,12 +952,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testCustomRangeBeforeIsAfterYearRight()
     {
         try {
-            $range = new Period_Range('range', '2007-02-09,2007-02-01');
+            $range = new Range('range', '2007-02-09,2007-02-01');
             $this->assertEquals(0, $range->getNumberOfSubperiods());
             $this->assertEquals(array(), $range->toString());
 
@@ -967,12 +971,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testCustomRangeLastN()
     {
-        $range = new Period_Range('range', 'last4');
-        $range->setDefaultEndDate(Piwik_Date::factory('2008-01-03'));
+        $range = new Range('range', 'last4');
+        $range->setDefaultEndDate(Date::factory('2008-01-03'));
         $correct = array(
             '2007-12-31',
             '2008-01-01',
@@ -986,12 +990,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testCustomRangePreviousN()
     {
-        $range = new Period_Range('range', 'previous3');
-        $range->setDefaultEndDate(Piwik_Date::factory('2008-01-03'));
+        $range = new Range('range', 'previous3');
+        $range->setDefaultEndDate(Date::factory('2008-01-03'));
         $correct = array(
             '2007-12-31',
             '2008-01-01',
@@ -1004,11 +1008,11 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testCustomRangePreviousNEndToday()
     {
-        $range = new Period_Range('range', 'previous3');
+        $range = new Range('range', 'previous3');
         $correct = array(
             date('Y-m-d', time() - 86400 * 3),
             date('Y-m-d', time() - 86400 * 2),
@@ -1021,12 +1025,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testInvalidRangeThrows()
     {
         try {
-            $range = new Period_Range('range', '0001-01-01,today');
+            $range = new Range('range', '0001-01-01,today');
             $range->getLocalizedLongString();
         } catch (Exception $e) {
             return;
@@ -1037,12 +1041,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testGetLocalizedShortString()
     {
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
-        $month = new Period_Range('range', '2000-12-09,2001-02-01');
+        Translate::getInstance()->loadEnglishTranslation();
+        $month = new Range('range', '2000-12-09,2001-02-01');
         $shouldBe = '9 Dec 00 - 1 Feb 01';
         $this->assertEquals($shouldBe, $month->getLocalizedShortString());
     }
@@ -1050,12 +1054,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testGetLocalizedLongString()
     {
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
-        $month = new Period_Range('range', '2023-05-09,2023-05-21');
+        Translate::getInstance()->loadEnglishTranslation();
+        $month = new Range('range', '2023-05-09,2023-05-21');
         $shouldBe = '8 May 23 - 21 May 23';
         $this->assertEquals($shouldBe, $month->getLocalizedLongString());
     }
@@ -1063,12 +1067,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      */
     public function testGetPrettyString()
     {
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
-        $month = new Period_Range('range', '2007-02-09,2007-03-15');
+        Translate::getInstance()->loadEnglishTranslation();
+        $month = new Range('range', '2007-02-09,2007-03-15');
         $shouldBe = 'From 2007-02-09 to 2007-03-15';
         $this->assertEquals($shouldBe, $month->getPrettyString());
     }
@@ -1087,12 +1091,12 @@ class Period_RangeTest extends PHPUnit_Framework_TestCase
     /**
      * @group Core
      * @group Period
-     * @group Period_Range
+     * @group Range
      * @dataProvider getDataForLastNLimitsTest
      */
     public function testLastNLimits($period, $lastN, $expectedLastN)
     {
-        $range = new Period_Range($period, 'last' . $lastN);
+        $range = new Range($period, 'last' . $lastN);
         $this->assertEquals($expectedLastN, $range->getNumberOfSubperiods());
     }
 }
diff --git a/tests/PHPUnit/Core/Period/WeekTest.php b/tests/PHPUnit/Core/Period/WeekTest.php
index a6f1c758e253d8749379d728e162b1b81093879b..2fda0433c9c7b7e4a527c25a9286c77ae4f269d2 100644
--- a/tests/PHPUnit/Core/Period/WeekTest.php
+++ b/tests/PHPUnit/Core/Period/WeekTest.php
@@ -5,6 +5,10 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
+use Piwik\Period\Week;
+use Piwik\Translate;
+
 /**
  * Testing Period_Week
  */
@@ -18,7 +22,7 @@ class Period_WeekTest extends PHPUnit_Framework_TestCase
      */
     public function testWeekBetween2years()
     {
-        $week = new Piwik_Period_Week(Piwik_Date::factory("2006-01-01"));
+        $week = new Week(Date::factory("2006-01-01"));
         $correct = array(
             "2005-12-26",
             "2005-12-27",
@@ -39,7 +43,7 @@ class Period_WeekTest extends PHPUnit_Framework_TestCase
      */
     public function testWeekBetween2month()
     {
-        $week = new Piwik_Period_Week(Piwik_Date::factory("2006-05-29"));
+        $week = new Week(Date::factory("2006-05-29"));
         $correct = array(
             "2006-05-29",
             "2006-05-30",
@@ -69,10 +73,10 @@ class Period_WeekTest extends PHPUnit_Framework_TestCase
             '2023-03-04',
             '2023-03-05',);
 
-        $week = new Piwik_Period_Week(Piwik_Date::factory('2023-02-27'));
+        $week = new Week(Date::factory('2023-02-27'));
         $this->assertEquals($correct, $week->toString());
         $this->assertEquals(7, $week->getNumberOfSubperiods());
-        $week = new Piwik_Period_Week(Piwik_Date::factory('2023-03-01'));
+        $week = new Week(Date::factory('2023-03-01'));
         $this->assertEquals($correct, $week->toString());
         $this->assertEquals(7, $week->getNumberOfSubperiods());
     }
@@ -94,10 +98,10 @@ class Period_WeekTest extends PHPUnit_Framework_TestCase
             '2024-03-02',
             '2024-03-03',);
 
-        $week = new Piwik_Period_Week(Piwik_Date::factory('2024-02-27'));
+        $week = new Week(Date::factory('2024-02-27'));
         $this->assertEquals($correct, $week->toString());
         $this->assertEquals(7, $week->getNumberOfSubperiods());
-        $week = new Piwik_Period_Week(Piwik_Date::factory('2024-03-01'));
+        $week = new Week(Date::factory('2024-03-01'));
         $this->assertEquals($correct, $week->toString());
         $this->assertEquals(7, $week->getNumberOfSubperiods());
     }
@@ -119,7 +123,7 @@ class Period_WeekTest extends PHPUnit_Framework_TestCase
             '2024-10-12',
             '2024-10-13',);
 
-        $week = new Piwik_Period_Week(Piwik_Date::factory('2024-10-09'));
+        $week = new Week(Date::factory('2024-10-09'));
         $this->assertEquals($correct, $week->toString());
         $this->assertEquals(7, $week->getNumberOfSubperiods());
     }
@@ -131,8 +135,8 @@ class Period_WeekTest extends PHPUnit_Framework_TestCase
      */
     public function testGetLocalizedShortString()
     {
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
-        $week = new Piwik_Period_Week(Piwik_Date::factory('2024-10-09'));
+        Translate::getInstance()->loadEnglishTranslation();
+        $week = new Week(Date::factory('2024-10-09'));
         $shouldBe = '7 Oct - 13 Oct 24';
         $this->assertEquals($shouldBe, $week->getLocalizedShortString());
     }
@@ -144,8 +148,8 @@ class Period_WeekTest extends PHPUnit_Framework_TestCase
      */
     public function testGetLocalizedLongString()
     {
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
-        $week = new Piwik_Period_Week(Piwik_Date::factory('2024-10-09'));
+        Translate::getInstance()->loadEnglishTranslation();
+        $week = new Week(Date::factory('2024-10-09'));
         $shouldBe = 'Week 7 October - 13 October 2024';
         $this->assertEquals($shouldBe, $week->getLocalizedLongString());
     }
@@ -157,8 +161,8 @@ class Period_WeekTest extends PHPUnit_Framework_TestCase
      */
     public function testGetPrettyString()
     {
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
-        $week = new Piwik_Period_Week(Piwik_Date::factory('2024-10-09'));
+        Translate::getInstance()->loadEnglishTranslation();
+        $week = new Week(Date::factory('2024-10-09'));
         $shouldBe = 'From 2024-10-07 to 2024-10-13';
         $this->assertEquals($shouldBe, $week->getPrettyString());
     }
diff --git a/tests/PHPUnit/Core/Period/YearTest.php b/tests/PHPUnit/Core/Period/YearTest.php
index 11ea08b2b09656e8c2d4f536adf7e968b38e0f4a..191790424e3de1e097b22e9aa636b5a3d2ab840a 100644
--- a/tests/PHPUnit/Core/Period/YearTest.php
+++ b/tests/PHPUnit/Core/Period/YearTest.php
@@ -5,6 +5,9 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
+use Piwik\Translate;
+
 /**
  * Testing Period_Year
  */
@@ -32,7 +35,7 @@ class Period_YearTest extends PHPUnit_Framework_TestCase
             '2024-11-01',
             '2024-12-01',);
 
-        $year = new Piwik_Period_Year(Piwik_Date::factory('2024-10-09'));
+        $year = new Piwik_Period_Year(Date::factory('2024-10-09'));
         $this->assertEquals(12, $year->getNumberOfSubperiods());
         $this->assertEquals($correct, $year->toString());
     }
@@ -60,7 +63,7 @@ class Period_YearTest extends PHPUnit_Framework_TestCase
             '2000-12-01',
         );
 
-        $year = new Piwik_Period_Year(Piwik_Date::factory('2000-02-15'));
+        $year = new Piwik_Period_Year(Date::factory('2000-02-15'));
         $this->assertEquals(12, $year->getNumberOfSubperiods());
         $this->assertEquals($correct, $year->toString());
     }
@@ -72,8 +75,8 @@ class Period_YearTest extends PHPUnit_Framework_TestCase
      */
     public function testGetLocalizedShortString()
     {
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
-        $year = new Piwik_Period_Year(Piwik_Date::factory('2024-10-09'));
+        Translate::getInstance()->loadEnglishTranslation();
+        $year = new Piwik_Period_Year(Date::factory('2024-10-09'));
         $shouldBe = '2024';
         $this->assertEquals($shouldBe, $year->getLocalizedShortString());
     }
@@ -85,8 +88,8 @@ class Period_YearTest extends PHPUnit_Framework_TestCase
      */
     public function testGetLocalizedLongString()
     {
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
-        $year = new Piwik_Period_Year(Piwik_Date::factory('2024-10-09'));
+        Translate::getInstance()->loadEnglishTranslation();
+        $year = new Piwik_Period_Year(Date::factory('2024-10-09'));
         $shouldBe = '2024';
         $this->assertEquals($shouldBe, $year->getLocalizedLongString());
     }
@@ -98,8 +101,8 @@ class Period_YearTest extends PHPUnit_Framework_TestCase
      */
     public function testGetPrettyString()
     {
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
-        $year = new Piwik_Period_Year(Piwik_Date::factory('2024-10-09'));
+        Translate::getInstance()->loadEnglishTranslation();
+        $year = new Piwik_Period_Year(Date::factory('2024-10-09'));
         $shouldBe = '2024';
         $this->assertEquals($shouldBe, $year->getPrettyString());
     }
diff --git a/tests/PHPUnit/Core/PeriodTest.php b/tests/PHPUnit/Core/PeriodTest.php
index 60212182140825a11a1afca767119b2f43718f12..0b315b2527d52ac9b541bd498da978c1d2662767 100644
--- a/tests/PHPUnit/Core/PeriodTest.php
+++ b/tests/PHPUnit/Core/PeriodTest.php
@@ -6,6 +6,10 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 use Piwik\Period;
+use Piwik\Date;
+use Piwik\Period\Month;
+use Piwik\Period\Day;
+use Piwik\Period\Week;
 
 class PeriodTest extends PHPUnit_Framework_TestCase
 {
@@ -15,13 +19,13 @@ class PeriodTest extends PHPUnit_Framework_TestCase
      */
     public function testGetId()
     {
-        $period = new Piwik_Period_Day(Piwik_Date::today());
+        $period = new Day(Date::today());
         $this->assertNotEquals(0, $period->getId());
-        $period = new Piwik_Period_Week(Piwik_Date::today());
+        $period = new Week(Date::today());
         $this->assertNotEquals(0, $period->getId());
-        $period = new Piwik_Period_Month(Piwik_Date::today());
+        $period = new Month(Date::today());
         $this->assertNotEquals(0, $period->getId());
-        $period = new Piwik_Period_Year(Piwik_Date::today());
+        $period = new Piwik_Period_Year(Date::today());
         $this->assertNotEquals(0, $period->getId());
     }
 
@@ -31,19 +35,19 @@ class PeriodTest extends PHPUnit_Framework_TestCase
      */
     public function testGetLabel()
     {
-        $period = new Piwik_Period_Day(Piwik_Date::today());
+        $period = new Day(Date::today());
         $label = $period->getLabel();
         $this->assertInternalType('string', $label);
         $this->assertNotEmpty($label);
-        $period = new Piwik_Period_Week(Piwik_Date::today());
+        $period = new Week(Date::today());
         $label = $period->getLabel();
         $this->assertInternalType('string', $label);
         $this->assertNotEmpty($label);
-        $period = new Piwik_Period_Month(Piwik_Date::today());
+        $period = new Month(Date::today());
         $label = $period->getLabel();
         $this->assertInternalType('string', $label);
         $this->assertNotEmpty($label);
-        $period = new Piwik_Period_Year(Piwik_Date::today());
+        $period = new Piwik_Period_Year(Date::today());
         $label = $period->getLabel();
         $this->assertInternalType('string', $label);
         $this->assertNotEmpty($label);
@@ -55,8 +59,8 @@ class PeriodTest extends PHPUnit_Framework_TestCase
      */
     public function testFactoryDay()
     {
-        $period = Period::factory('day', Piwik_Date::today());
-        $this->assertInstanceOf('Piwik_Period_Day', $period);
+        $period = Period::factory('day', Date::today());
+        $this->assertInstanceOf('Day', $period);
     }
 
     /**
@@ -65,8 +69,8 @@ class PeriodTest extends PHPUnit_Framework_TestCase
      */
     public function testFactoryMonth()
     {
-        $period = Period::factory('month', Piwik_Date::today());
-        $this->assertInstanceOf('Piwik_Period_Month', $period);
+        $period = Period::factory('month', Date::today());
+        $this->assertInstanceOf('Month', $period);
     }
 
     /**
@@ -75,8 +79,8 @@ class PeriodTest extends PHPUnit_Framework_TestCase
      */
     public function testFactoryWeek()
     {
-        $period = Period::factory('week', Piwik_Date::today());
-        $this->assertInstanceOf('Piwik_Period_Week', $period);
+        $period = Period::factory('week', Date::today());
+        $this->assertInstanceOf('Week', $period);
     }
 
     /**
@@ -85,7 +89,7 @@ class PeriodTest extends PHPUnit_Framework_TestCase
      */
     public function testFactoryYear()
     {
-        $period = Period::factory('year', Piwik_Date::today());
+        $period = Period::factory('year', Date::today());
         $this->assertInstanceOf('Piwik_Period_Year', $period);
     }
 
@@ -96,7 +100,7 @@ class PeriodTest extends PHPUnit_Framework_TestCase
     public function testFactoryInvalid()
     {
         try {
-            $period = Period::factory('inValid', Piwik_Date::today());
+            $period = Period::factory('inValid', Date::today());
         } catch (Exception $e) {
             return;
         }
diff --git a/tests/PHPUnit/Core/PiwikTest.php b/tests/PHPUnit/Core/PiwikTest.php
index e1697dde83990117bb34bcd7c4e84d1d9f913871..26a0339309fc4bdd1230e8b9e617cccc36625111 100644
--- a/tests/PHPUnit/Core/PiwikTest.php
+++ b/tests/PHPUnit/Core/PiwikTest.php
@@ -1,13 +1,14 @@
 <?php
-use Piwik\Piwik;
-use Piwik\Access;
-
 /**
  * Piwik - Open source web analytics
  *
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Piwik;
+use Piwik\Access;
+use Piwik\Translate;
+
 class PiwikTest extends DatabaseTestCase
 {
     /**
@@ -113,14 +114,14 @@ class PiwikTest extends DatabaseTestCase
             $this->markTestSkipped("Will not pass on 32-bit machine.");
         }
         
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
+        Translate::getInstance()->loadEnglishTranslation();
 
         $sentenceExpected = str_replace(' ', '&nbsp;', $expected[0]);
         $numericExpected = $expected[1];
         $this->assertEquals($sentenceExpected, Piwik::getPrettyTimeFromSeconds($seconds, $sentence = true));
         $this->assertEquals($numericExpected, Piwik::getPrettyTimeFromSeconds($seconds, $sentence = false));
 
-        Piwik_Translate::getInstance()->unloadEnglishTranslation();
+        Translate::getInstance()->unloadEnglishTranslation();
     }
 
     /**
@@ -211,7 +212,7 @@ class PiwikTest extends DatabaseTestCase
      */
     public function testGetPrettyValue($columnName, $value, $expected)
     {
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
+        Translate::getInstance()->loadEnglishTranslation();
 
         $access = Access::getInstance();
         $access->setSuperUser(true);
@@ -223,7 +224,7 @@ class PiwikTest extends DatabaseTestCase
             Piwik::getPrettyValue($idsite, $columnName, $value, false, false)
         );
 
-        Piwik_Translate::getInstance()->unloadEnglishTranslation();
+        Translate::getInstance()->unloadEnglishTranslation();
     }
 
     /**
diff --git a/tests/PHPUnit/Core/TaskSchedulerTest.php b/tests/PHPUnit/Core/TaskSchedulerTest.php
index 1e582af3ef4638089b0f0eadd2c163fe44139f7f..4ae0c32140218a8b699133d53f10af2c3326ede2 100644
--- a/tests/PHPUnit/Core/TaskSchedulerTest.php
+++ b/tests/PHPUnit/Core/TaskSchedulerTest.php
@@ -5,6 +5,8 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\EventDispatcher;
+
 class TaskSchedulerTest extends PHPUnit_Framework_TestCase
 {
     private static function getTestTimetable()
@@ -50,7 +52,7 @@ class TaskSchedulerTest extends PHPUnit_Framework_TestCase
         $getTimetableFromOptionValue = new ReflectionMethod(
             'Piwik_TaskScheduler', 'getTimetableFromOptionValue'
         );
-        $getTimetableFromOptionValue->setAccessible(TRUE);
+        $getTimetableFromOptionValue->setAccessible(true);
 
         $this->assertEquals($expectedTimetable, $getTimetableFromOptionValue->invoke(new Piwik_TaskScheduler(), $option));
     }
@@ -79,7 +81,7 @@ class TaskSchedulerTest extends PHPUnit_Framework_TestCase
         $taskHasBeenScheduledOnce = new ReflectionMethod(
             'Piwik_TaskScheduler', 'taskHasBeenScheduledOnce'
         );
-        $taskHasBeenScheduledOnce->setAccessible(TRUE);
+        $taskHasBeenScheduledOnce->setAccessible(true);
 
         $this->assertEquals($expectedDecision, $taskHasBeenScheduledOnce->invoke(new Piwik_TaskScheduler(), $taskName, $timetable));
     }
@@ -142,7 +144,7 @@ class TaskSchedulerTest extends PHPUnit_Framework_TestCase
         $taskShouldBeExecuted = new ReflectionMethod(
             'Piwik_TaskScheduler', 'taskShouldBeExecuted'
         );
-        $taskShouldBeExecuted->setAccessible(TRUE);
+        $taskShouldBeExecuted->setAccessible(true);
 
         $this->assertEquals($expectedDecision, $taskShouldBeExecuted->invoke(new Piwik_TaskScheduler(), $taskName, $timetable));
     }
@@ -171,7 +173,7 @@ class TaskSchedulerTest extends PHPUnit_Framework_TestCase
         $mock->expects($this->once())->method($methodName)->with($this->equalTo($parameterValue));
 
         $executeTask = new ReflectionMethod('Piwik_TaskScheduler', 'executeTask');
-        $executeTask->setAccessible(TRUE);
+        $executeTask->setAccessible(true);
 
         $this->assertNotEmpty($executeTask->invoke(
             new Piwik_TaskScheduler(),
@@ -278,9 +280,9 @@ class TaskSchedulerTest extends PHPUnit_Framework_TestCase
     public function testRunTasks($expectedTimetable, $expectedExecutedTasks, $timetableBeforeTaskExecution, $configuredTasks)
     {
         // temporarily unload plugins
-        $plugins = PluginsManager::getInstance()->getLoadedPlugins();
+        $plugins = \Piwik\PluginsManager::getInstance()->getLoadedPlugins();
         $plugins = array_map(function ($p) { return $p->getPluginName(); }, $plugins);
-        PluginsManager::getInstance()->unloadPlugins();
+        \Piwik\PluginsManager::getInstance()->unloadPlugins();
         
         // make sure the get tasks event returns our configured tasks
         Piwik_AddAction(Piwik_TaskScheduler::GET_TASKS_EVENT, function(&$tasks) use($configuredTasks) {
@@ -307,8 +309,8 @@ class TaskSchedulerTest extends PHPUnit_Framework_TestCase
         $this->assertEquals($expectedTimetable, $getTimetableFromOptionTable->invoke(new Piwik_TaskScheduler()));
 
         // restore loaded plugins & piwik options
-        Piwik_EventDispatcher::getInstance()->clearObservers(Piwik_TaskScheduler::GET_TASKS_EVENT);
-        PluginsManager::getInstance()->loadPlugins($plugins);
+        EventDispatcher::getInstance()->clearObservers(Piwik_TaskScheduler::GET_TASKS_EVENT);
+        \Piwik\PluginsManager::getInstance()->loadPlugins($plugins);
         self::resetPiwikOption();
     }
 
diff --git a/tests/PHPUnit/Core/Tracker/ActionTest.php b/tests/PHPUnit/Core/Tracker/ActionTest.php
index 4a608d574539806fe30a622933360998fd0f6bb4..95a8fee7b46fed572ab2dfbc7550bd8bf620aefd 100644
--- a/tests/PHPUnit/Core/Tracker/ActionTest.php
+++ b/tests/PHPUnit/Core/Tracker/ActionTest.php
@@ -1,6 +1,7 @@
 <?php
 use Piwik\Config;
 use Piwik\Access;
+use Piwik\Translate;
 
 /**
  * Piwik - Open source web analytics
@@ -18,9 +19,9 @@ class Tracker_ActionTest extends DatabaseTestCase
         $config->clear();
         $config->setTestEnvironment($userFile, false);
 
-        PluginsManager::getInstance()->loadPlugins(array('SitesManager'));
+        \Piwik\PluginsManager::getInstance()->loadPlugins(array('SitesManager'));
         
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
+        Translate::getInstance()->loadEnglishTranslation();
     }
 
     protected function setUpRootAccess()
diff --git a/tests/PHPUnit/Core/Tracker/VisitTest.php b/tests/PHPUnit/Core/Tracker/VisitTest.php
index 3a3bbd415d783015b46c9543cc75a8b4d84daffa..762900a9352d3d2b487138e55a49f424e8d4c4c6 100644
--- a/tests/PHPUnit/Core/Tracker/VisitTest.php
+++ b/tests/PHPUnit/Core/Tracker/VisitTest.php
@@ -18,7 +18,7 @@ class Tracker_VisitTest extends DatabaseTestCase
         FakeAccess::$superUser = true;
         Access::setSingletonInstance($pseudoMockAccess);
 
-        PluginsManager::getInstance()->loadPlugins(array('SitesManager'));
+        \Piwik\PluginsManager::getInstance()->loadPlugins(array('SitesManager'));
     }
 
     /**
diff --git a/tests/PHPUnit/DatabaseTestCase.php b/tests/PHPUnit/DatabaseTestCase.php
index c1e84918ca0c20328bb2e87eb5dcab90c7c2ff31..ba848c85fd84cf7872e59449609afd81e04658fa 100644
--- a/tests/PHPUnit/DatabaseTestCase.php
+++ b/tests/PHPUnit/DatabaseTestCase.php
@@ -6,6 +6,8 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 use Piwik\Config;
+use Piwik\DataAccess\ArchiveTableCreator;
+use Piwik\DataTable\Manager;
 use Piwik\Piwik;
 use Piwik\Site;
 
@@ -43,7 +45,7 @@ class DatabaseTestCase extends PHPUnit_Framework_TestCase
             Piwik::createTables();
             Piwik::createLogObject();
 
-//            PluginsManager::getInstance()->loadPlugins(array());
+//            \Piwik\PluginsManager::getInstance()->loadPlugins(array());
             IntegrationTestCase::loadAllPlugins();
 
         } catch (Exception $e) {
@@ -65,13 +67,13 @@ class DatabaseTestCase extends PHPUnit_Framework_TestCase
         parent::tearDown();
         IntegrationTestCase::unloadAllPlugins();
         Piwik::dropDatabase();
-        Piwik_DataTable_Manager::getInstance()->deleteAll();
+        Manager::getInstance()->deleteAll();
         Piwik_Option::getInstance()->clearCache();
         Piwik_PDFReports_API::$cache = array();
         Site::clearCache();
         Piwik_Tracker_Cache::deleteTrackerCache();
         Config::getInstance()->clear();
-        Piwik_DataAccess_ArchiveTableCreator::clear();
+        ArchiveTableCreator::clear();
         Zend_Registry::_unsetInstance();
     }
 
diff --git a/tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorId.php b/tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorId.php
index 3768205fc68433f32294e61e6e60ea008a205c30..b1f7828610f265f090036fbba343deeedab49a60 100644
--- a/tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorId.php
+++ b/tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorId.php
@@ -5,6 +5,7 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Adds one site and tracks a couple visits using a custom visitor ID.
@@ -48,13 +49,13 @@ class Test_Piwik_Fixture_FewVisitsWithSetVisitorId extends Test_Piwik_BaseFixtur
 
         // VISITOR B: few minutes later, we trigger the same tracker but with a custom visitor ID,
         // => this will create a new visit B
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.05)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.05)->getDatetime());
         $t->setUrl('http://example.org/index2.htm');
         $t->setVisitorId(Piwik_Tracker_Visit::generateUniqueVisitorId());
         self::checkResponse($t->doTrackPageView('incredible title!'));
 
         // This new visit B will have 2 page views
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.1)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.1)->getDatetime());
         $t->setUrl('http://example.org/index3.htm');
         self::checkResponse($t->doTrackPageView('incredible title!'));
 
diff --git a/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php b/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php
index 9458ccb12ebcfc08ce428313f37469e46c48d129..074433d85fe96eff26ca32605a4216ef8ae4e615 100644
--- a/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php
+++ b/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php
@@ -6,6 +6,8 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 
+use Piwik\Date;
+
 require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/MockLocationProvider.php';
 
 /**
@@ -89,7 +91,7 @@ class Test_Piwik_Fixture_ManyVisitsWithGeoIP extends Test_Piwik_BaseFixture
             }
 
             // first visit
-            $date = Piwik_Date::factory($dateTime)->addDay($i);
+            $date = Date::factory($dateTime)->addDay($i);
             $t->setForceVisitDateTime($date->getDatetime());
             $t->setUrl("http://piwik.net/grue/lair");
             $t->setCustomVariable(1, 'Cvar 1 name', 'Cvar1 value is ' .$i , 'visit');
@@ -151,7 +153,7 @@ class Test_Piwik_Fixture_ManyVisitsWithGeoIP extends Test_Piwik_BaseFixture
         $t = self::getTracker($idSite, $dateTime, $defaultInit = true);
         $t->setVisitorId('fed33392d3a48ab2');
         $t->setTokenAuth(self::getTokenAuth());
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addDay(20)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addDay(20)->getDatetime());
         $t->setIp('194.57.91.215');
         $t->setCountry('us');
         $t->setRegion('CA');
diff --git a/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php b/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php
index 1d7d2f240b53cb7b1add639845367920d9171673..be3d29c30fc5117362e72452a8b728ead73e846d 100644
--- a/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php
+++ b/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php
@@ -6,6 +6,8 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 
+use Piwik\Date;
+
 require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/MockLocationProvider.php';
 
 /**
@@ -19,7 +21,7 @@ class Test_Piwik_Fixture_ManyVisitsWithMockLocationProvider extends Test_Piwik_B
 
     public function __construct()
     {
-        $this->nextDay = Piwik_Date::factory($this->dateTime)->addDay(1)->getDatetime();
+        $this->nextDay = Date::factory($this->dateTime)->addDay(1)->getDatetime();
     }
 
     public function setUp()
@@ -122,7 +124,7 @@ class Test_Piwik_Fixture_ManyVisitsWithMockLocationProvider extends Test_Piwik_B
                                   $referrers = null, $customVars = null)
     {
         for ($i = 0; $i != 5; ++$i, ++$visitorCounter) {
-            $visitDate = Piwik_Date::factory($this->dateTime);
+            $visitDate = Date::factory($this->dateTime);
 
             $t->setNewVisitorId();
             $t->setIp("156.5.3.$visitorCounter");
@@ -171,7 +173,7 @@ class Test_Piwik_Fixture_ManyVisitsWithMockLocationProvider extends Test_Piwik_B
     
     private function trackOrders($t)
     {
-        $nextDay = Piwik_Date::factory($this->nextDay);
+        $nextDay = Date::factory($this->nextDay);
         $t->setForceVisitDateTime($nextDay);
         
         for ($i = 0; $i != 25; ++$i) {
diff --git a/tests/PHPUnit/Fixtures/ManyVisitsWithSubDirReferrersAndCustomVars.php b/tests/PHPUnit/Fixtures/ManyVisitsWithSubDirReferrersAndCustomVars.php
index 44f19e66644e3ab3db8ffc7a8e7eb562d59598e1..f5512fa254aae512a2dfe0551200c1f0deb796f4 100644
--- a/tests/PHPUnit/Fixtures/ManyVisitsWithSubDirReferrersAndCustomVars.php
+++ b/tests/PHPUnit/Fixtures/ManyVisitsWithSubDirReferrersAndCustomVars.php
@@ -6,6 +6,7 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 #
+use Piwik\Date;
 
 /**
  * Adds one site and tracks 13 visits all with custom variables and referrer URLs
@@ -40,7 +41,7 @@ class Test_Piwik_Fixture_ManyVisitsWithSubDirReferrersAndCustomVars extends Test
         for ($referrerSite = 1; $referrerSite < 4; $referrerSite++) {
             for ($referrerPage = 1; $referrerPage < 3; $referrerPage++) {
                 $offset = $referrerSite * 3 + $referrerPage;
-                $t = self::getTracker($idSite, Piwik_Date::factory($dateTime)->addHour($offset)->getDatetime());
+                $t = self::getTracker($idSite, Date::factory($dateTime)->addHour($offset)->getDatetime());
                 $t->setUrlReferrer('http://www.referrer' . $referrerSite . '.com/sub/dir/page' . $referrerPage . '.html');
                 $t->setCustomVariable(1, 'CustomVarVisit', 'CustomVarValue' . $referrerPage, 'visit');
                 for ($page = 0; $page < 3; $page++) {
@@ -52,7 +53,7 @@ class Test_Piwik_Fixture_ManyVisitsWithSubDirReferrersAndCustomVars extends Test
             }
         }
 
-        $t = self::getTracker($idSite, Piwik_Date::factory($dateTime)->addHour(24)->getDatetime());
+        $t = self::getTracker($idSite, Date::factory($dateTime)->addHour(24)->getDatetime());
         $t->setCustomVariable(1, 'CustomVarVisit', 'CustomVarValue1', 'visit');
         $t->setUrl('http://example.org/sub/dir/dir1/page1.html');
         $t->setCustomVariable(1, 'CustomVarPage', 'CustomVarValue1', 'page');
diff --git a/tests/PHPUnit/Fixtures/OneVisitSeveralPageViews.php b/tests/PHPUnit/Fixtures/OneVisitSeveralPageViews.php
index 5570057dea12219b78984cb919115d229f11ec12..53c8dfb5385627246fcf1d1418bc3dbd3217a27e 100644
--- a/tests/PHPUnit/Fixtures/OneVisitSeveralPageViews.php
+++ b/tests/PHPUnit/Fixtures/OneVisitSeveralPageViews.php
@@ -5,6 +5,7 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Adds one site and tracks one visit with several pageviews.
@@ -42,22 +43,22 @@ class Test_Piwik_Fixture_OneVisitSeveralPageViews extends Test_Piwik_BaseFixture
         self::checkResponse($t->doTrackPageView('incredible title! <>,;'));
 
         $t->setUrl('http://example.org/dir/file.php?foo=bar&foo2=bar');
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.2)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.2)->getDatetime());
         $t->setGenerationTime(123);
         self::checkResponse($t->doTrackPageView('incredible title! <>,;'));
 
         $t->setUrl('http://example.org/dir/file.php?foo=bar&foo2=bar2');
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.3)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.3)->getDatetime());
         $t->setGenerationTime(153);
         self::checkResponse($t->doTrackPageView('incredible parent title! <>,; / subtitle <>,;'));
 
         $t->setUrl('http://example.org/dir2/file.php?foo=bar&foo2=bar');
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.4)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.4)->getDatetime());
         $t->setGenerationTime(1233);
         self::checkResponse($t->doTrackPageView('incredible title! <>,;'));
 
         $t->setUrl('http://example.org/dir2/sub/0/file.php');
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.4)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.4)->getDatetime());
 
         // Very high Generation time should be ignored
         $t->setGenerationTime(6350000);
@@ -65,7 +66,7 @@ class Test_Piwik_Fixture_OneVisitSeveralPageViews extends Test_Piwik_BaseFixture
 
 
         $t->setUrl('http://example.org/0');
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.4)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.4)->getDatetime());
         $t->setGenerationTime(635);
         self::checkResponse($t->doTrackPageView('I am URL zero!'));
 
diff --git a/tests/PHPUnit/Fixtures/OneVisitWithAbnormalPageviewUrls.php b/tests/PHPUnit/Fixtures/OneVisitWithAbnormalPageviewUrls.php
index ac67e3cb0f5912dced89d1e4bcc501efbc166a6d..638a35d5b2886bd789ef21fd55607d2a1f7c4b0d 100644
--- a/tests/PHPUnit/Fixtures/OneVisitWithAbnormalPageviewUrls.php
+++ b/tests/PHPUnit/Fixtures/OneVisitWithAbnormalPageviewUrls.php
@@ -5,6 +5,7 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Adds one site and tracks one visit w/ pageview URLs that are not normalized.
@@ -42,23 +43,23 @@ class Test_Piwik_Fixture_OneVisitWithAbnormalPageviewUrls extends Test_Piwik_Bas
         self::checkResponse($t->doTrackPageView('http://incredible.title/'));
 
         $t->setUrl('https://example.org/foo/bar.html');
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.2)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.2)->getDatetime());
         self::checkResponse($t->doTrackPageView('https://incredible.title/'));
 
         $t->setUrl('https://wWw.example.org/foo/bar2.html');
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.3)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.3)->getDatetime());
         self::checkResponse($t->doTrackPageView('http://www.incredible.title/'));
 
         $t->setUrl('http://WwW.example.org/foo/bar2.html');
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.4)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.4)->getDatetime());
         self::checkResponse($t->doTrackPageView('https://www.incredible.title/'));
 
         $t->setUrl('http://www.example.org/foo/bar3.html');
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.5)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.5)->getDatetime());
         self::checkResponse($t->doTrackPageView('incredible.title/'));
 
         $t->setUrl('https://example.org/foo/bar4.html');
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.6)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.6)->getDatetime());
         self::checkResponse($t->doTrackPageView('incredible.title/'));
     }
 }
diff --git a/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php b/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php
index fa4f246e942c1c07472490ebd8c5e8062d089034..64c3312628fe9c61d0b224f66abca7f5b86f532c 100644
--- a/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php
+++ b/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php
@@ -5,6 +5,7 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * This fixture adds one website and tracks two visits by one visitor.
@@ -81,54 +82,54 @@ class Test_Piwik_Fixture_OneVisitorTwoVisits extends Test_Piwik_BaseFixture
 
         // testing that / and index.htm above record with different URLs
         // Recording the 2nd page after 3 minutes
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.05)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.05)->getDatetime());
         $t->setUrl('http://example.org/');
 		$t->setGenerationTime(224);
         self::checkResponse($t->doTrackPageView('Second page view - should be registered as URL /'));
 
         // Click on external link after 6 minutes (3rd action)
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.1)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.1)->getDatetime());
         self::checkResponse($t->doTrackAction('http://dev.piwik.org/svn', 'link'));
 
         // Click on file download after 12 minutes (4th action)
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.2)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.2)->getDatetime());
         self::checkResponse($t->doTrackAction('http://piwik.org/path/again/latest.zip', 'download'));
 
         // Click on two more external links, one the same as before (5th & 6th actions)
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.22)->getDateTime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.22)->getDateTime());
         self::checkResponse($t->doTrackAction('http://outlinks.org/other_outlink', 'link'));
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.25)->getDateTime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.25)->getDateTime());
         self::checkResponse($t->doTrackAction('http://dev.piwik.org/svn', 'link'));
 
         // Create Goal 1: Triggered by JS, after 18 minutes
         $idGoal = Piwik_Goals_API::getInstance()->addGoal($idSite, 'triggered js', 'manually', '', '');
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.3)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.3)->getDatetime());
 
         // Change to Thai  browser to ensure the conversion is credited to FR instead (the visitor initial country)
         $t->setBrowserLanguage('th');
         self::checkResponse($t->doTrackGoal($idGoal, $revenue = 42));
 
         // Track same Goal twice (after 24 minutes), should only be tracked once
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.4)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.4)->getDatetime());
         self::checkResponse($t->doTrackGoal($idGoal, $revenue = 42));
 
         $t->setBrowserLanguage('fr');
 
         if ($this->useSiteSearch) {
             // Site Search request
-            $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.42)->getDatetime());
+            $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.42)->getDatetime());
             $t->setUrl('http://example.org/index.htm?q=Banks Own The World');
 			$t->setGenerationTime(812);
             self::checkResponse($t->doTrackPageView('Site Search request'));
 
             // Final page view (after 27 min)
-            $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.45)->getDatetime());
+            $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.45)->getDatetime());
             $t->setUrl('http://example.org/index.htm');
 			$t->setGenerationTime(24);
             self::checkResponse($t->doTrackPageView('Looking at homepage after site search...'));
         } else {
             // Final page view (after 27 min)
-            $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.45)->getDatetime());
+            $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.45)->getDatetime());
             $t->setUrl('http://example.org/index.htm#ignoredFragment#');
 			$t->setGenerationTime(23);
             self::checkResponse($t->doTrackPageView('Looking at homepage (again)...'));
@@ -142,7 +143,7 @@ class Test_Piwik_Fixture_OneVisitorTwoVisits extends Test_Piwik_BaseFixture
 
         // -
         // Start of returning visit, 1 hour after first page view
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(1)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(1)->getDatetime());
         $t->setUrl('http://example.org/store/purchase.htm');
         $t->setUrlReferrer('http://search.yahoo.com/search?p=purchase');
         // Temporary, until we implement 1st party cookies in PiwikTracker
diff --git a/tests/PHPUnit/Fixtures/SomeVisitsAllConversions.php b/tests/PHPUnit/Fixtures/SomeVisitsAllConversions.php
index 670bc635dfee067447ad1715e4fc411c1bfe7779..ad47b32696a3c264e25977b671421448b6ce9e33 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsAllConversions.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsAllConversions.php
@@ -5,6 +5,7 @@
  * @link    http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Adds one site and tracks a couple conversions.
@@ -55,15 +56,15 @@ class Piwik_Test_Fixture_SomeVisitsAllConversions extends Test_Piwik_BaseFixture
 
         // Record 1st goal, should only have 1 conversion
         $t->setUrl('http://example.org/index.htm');
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.3)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.3)->getDatetime());
         self::checkResponse($t->doTrackPageView('Thank you mate'));
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.4)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.4)->getDatetime());
         self::checkResponse($t->doTrackGoal($idGoal_OneConversionPerVisit, $revenue = 10000000));
 
         // Record 2nd goal, should record both conversions
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.5)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.5)->getDatetime());
         self::checkResponse($t->doTrackGoal($idGoal_MultipleConversionPerVisit, $revenue = 300));
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.6)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.6)->getDatetime());
         self::checkResponse($t->doTrackGoal($idGoal_MultipleConversionPerVisit, $revenue = 366));
 
         // Update & set to not allow multiple
@@ -74,7 +75,7 @@ class Piwik_Test_Fixture_SomeVisitsAllConversions extends Test_Piwik_BaseFixture
         self::assertTrue($goal['allow_multiple'] == 1);
 
         // 1st goal should Now be tracked
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.61)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.61)->getDatetime());
         self::checkResponse($t->doTrackGoal($idGoal_OneConversionPerVisit, $revenue = 656));
     }
 }
diff --git a/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php b/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php
index a3752ad05c7cfebc57f5a43a3b37e5876fc8525c..be0e42eed9e8b7f0723df88ed9af02cc947ebf1e 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php
@@ -5,6 +5,7 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Add one site and track many visits with custom variables & campaign IDs and
@@ -76,13 +77,13 @@ class Test_Piwik_Fixture_SomeVisitsCustomVariablesCampaignsNotHeuristics extends
         $t2->setVisitorId($visitorId);
 
         // And Record a Goal: The previous visit should be updated rather than a new visit Created 
-        $t2->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.3)->getDatetime());
+        $t2->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.3)->getDatetime());
         self::checkResponse($t2->doTrackGoal($idGoal, $revenue = 42.256));
 
         // Yet another visitor, this time with a manual goal conversion, which should be credited to the campaign
         $t3 = self::getTracker($idSite, $dateTime);
         $t3->setUrlReferrer('http://example.org/referrer');
-        $t3->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(1.3)->getDatetime());
+        $t3->setForceVisitDateTime(Date::factory($dateTime)->addHour(1.3)->getDatetime());
         // fake a website ref cookie, the campaign should be credited for conversion, not referrer.example.com nor example.org 
         $t3->DEBUG_APPEND_URL = '&_ref=http%3A%2F%2Freferrer.example.com%2Fpage%2Fsub%3Fquery%3Dtest%26test2%3Dtest3';
         $t3->setUrl('http://example.org/index.htm#pk_campaign=CREDITED TO GOAL PLEASE');
@@ -90,27 +91,27 @@ class Test_Piwik_Fixture_SomeVisitsCustomVariablesCampaignsNotHeuristics extends
 
         // visitor #4, test for blank referrer campaign keyword
         $t4 = self::getTracker($idSite, $dateTime);
-        $t4->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(3)->getDatetime());
+        $t4->setForceVisitDateTime(Date::factory($dateTime)->addHour(3)->getDatetime());
         $t4->setUrlReferrer('http://bing.com/search?q=whatever');
         $t4->setUrl('http://example.org/index.html?utm_campaign=GA+Campaign');
         self::checkResponse($t4->doTrackPageView('first page'));
 
         // No campaign keyword specified, will use the referrer hostname
-        $t4->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(4)->getDatetime());
+        $t4->setForceVisitDateTime(Date::factory($dateTime)->addHour(4)->getDatetime());
         $t4->setUrlReferrer('http://thing1.com/a/b/c.html?a=b&d=c');
         $t4->setUrl('http://example.org/index.html?utm_campaign=GA+Campaign');
         self::checkResponse($t4->doTrackPageView('second page'));
 
         // Test with Google adsense type URL:
         $adsenseRefererUrl = 'http://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-12345&output=html&h=280&slotname=123&w=336&lmt=1359388321&202&url=http%3A%2F%2Fwww.adsense-publisher-website.org%2F&dt=123&bpp=13&shv=r22&jsv=1565606614&correlator=ss&ga_vid=aaa&ga_sid=1359435122&ga_hid=1801871121&ga_fc=0&u_tz=780&u_his=4&u_java=1&u_h=900&u_w=1600&u_ah=876&u_aw=1551&u_cd=24&u_nplug=4&u_nmime=5&dff=georgia&dfs=16&adx=33&ady=201&biw=1551&bih=792&oid=3&fu=0&ifi=1&dtd=608&p=http%3A//www.adsense-publisher-website.com';
-        $t4->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(5)->getDatetime());
+        $t4->setForceVisitDateTime(Date::factory($dateTime)->addHour(5)->getDatetime());
         $t4->setUrlReferrer($adsenseRefererUrl);
         $t4->setUrl('http://example.org/index.html?utm_campaign=Adsense campaign');
         self::checkResponse($t4->doTrackPageView('second page'));
 
         // Test with google Adwords URL
         $adwordsUrl = 'http://www.google.co.nz/aclk?sa=L&ai=uYmFyiZgAf0oO0J&num=3&sig=EpOCR4xQ&ved=ENEM&adurl=http://pixel.everesttech.net/3163/cq%3Fev_sid%3D3%26ev_cmpid%3D33%26ev_ln%3Dused%2520wii%2520consoles%26ev_crx%528386%26ev_mt%3Db%26ev_n%3Dg%26ev_ltx%3D%26ev_pl%3D%26ev_pos%3D1s2%26url%3Dhttp%253A//au.shopping.com/used%2520wii%2520consoles/products%253Flinkin_id%253D8077872&rct=j&q=nintendo+consoles+second+hand';
-        $t4->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(6)->getDatetime());
+        $t4->setForceVisitDateTime(Date::factory($dateTime)->addHour(6)->getDatetime());
         $t4->setUrlReferrer($adwordsUrl);
         $t4->setUrl('http://example.org/index.html?utm_campaign=Adwords campaign');
         self::checkResponse($t4->doTrackPageView('second page'));
diff --git a/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php b/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php
index e669ccc638e4c3c2ecb7aaab50a6b9920670157d..e0d3de9e6d761066f6bf44854a350d65ac4ed76a 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php
@@ -5,6 +5,7 @@
  * @link    http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Adds one site and tracks a couple visits with many pageviews. The
@@ -101,7 +102,7 @@ class Test_Piwik_Fixture_SomeVisitsManyPageviewsWithTransitions extends Test_Piw
         $this->trackPageView($tracker, 0.6, 'to/outlink/page2.html', $this->dateTime, $pageViewType = 'outlink');
         
         // perform new searches/outlinks before & after in later date to test 'month' period
-        $laterDate = Piwik_Date::factory($this->dateTime)->addDay(8)->getDatetime();
+        $laterDate = Date::factory($this->dateTime)->addDay(8)->getDatetime();
         $tracker->setIp('156.5.3.7');
         $tracker->setNewVisitorId();
         $this->trackPageView($tracker, 0, 'page/search.html#q=thirdkwd', $laterDate, $pageViewType = 'site-search',
@@ -132,7 +133,7 @@ class Test_Piwik_Fixture_SomeVisitsManyPageviewsWithTransitions extends Test_Piw
 
         /** @var $visit PiwikTracker */
         $visit->setUrl($prefix . 'example.org/' . $path);
-        $visit->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour($timeOffset)->getDatetime());
+        $visit->setForceVisitDateTime(Date::factory($dateTime)->addHour($timeOffset)->getDatetime());
         
         if ($pageViewType == 'normal') {
             self::assertTrue($visit->doTrackPageView('page title - ' . $path));
diff --git a/tests/PHPUnit/Fixtures/SomeVisitsWithLongUrls.php b/tests/PHPUnit/Fixtures/SomeVisitsWithLongUrls.php
index 9eb839ad537f4cf1aeb826af2f149c14114b8ad8..c78a3fb9da0a6222074ce37518a888da5c89e743 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsWithLongUrls.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsWithLongUrls.php
@@ -5,6 +5,7 @@
  * @link    http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Adds one site and tracks 7 visits w/ some long-ish urls (as page urls and
@@ -70,32 +71,32 @@ class Test_Piwik_Fixture_SomeVisitsWithLongUrls extends Test_Piwik_BaseFixture
         self::checkResponse($t->doTrackPageView('Hello'));
 
         // VISIT 2 = Another keyword
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(1)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(1)->getDatetime());
         $t->setUrlReferrer('http://www.google.com.vn/url?q=Salut');
         self::checkResponse($t->doTrackPageView('incredible title!'));
 
         // Visit 3 = Another keyword
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(2)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(2)->getDatetime());
         $t->setUrlReferrer('http://www.google.com.vn/url?q=Kia Ora');
         self::checkResponse($t->doTrackPageView('incredible title!'));
 
         // Visit 4 = Kia Ora again
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(3)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(3)->getDatetime());
         $t->setUrlReferrer('http://www.google.com.vn/url?q=Kia Ora');
         self::checkResponse($t->doTrackPageView('incredible title!'));
 
         // Visit 5 = Another search engine
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(4)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(4)->getDatetime());
         $t->setUrlReferrer('http://nz.search.yahoo.com/search?p=Kia Ora');
         self::checkResponse($t->doTrackPageView('incredible title!'));
 
         // Visit 6 = Another search engine
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(5)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(5)->getDatetime());
         $t->setUrlReferrer('http://images.search.yahoo.com/search/images;_ylt=A2KcWcNKJzF?p=Kia%20Ora%20');
         self::checkResponse($t->doTrackPageView('incredible title!'));
 
         // Visit 7 = Another search engine
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(6)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(6)->getDatetime());
         $t->setUrlReferrer('http://nz.bing.com/images/search?q=+++Kia+ora+++');
         self::checkResponse($t->doTrackPageView('incredible title!'));
     }
diff --git a/tests/PHPUnit/Fixtures/SomeVisitsWithNonUnicodePageTitles.php b/tests/PHPUnit/Fixtures/SomeVisitsWithNonUnicodePageTitles.php
index b0dac3c1a84abc9f488892d51479abb035f3288a..199fc691232f149da8a266ad0a195d9b3c9ce31d 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsWithNonUnicodePageTitles.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsWithNonUnicodePageTitles.php
@@ -5,6 +5,7 @@
  * @link    http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Adds one website and some visits with non unicode page titles.
@@ -33,7 +34,7 @@ class Test_Piwik_Fixture_SomeVisitsWithNonUnicodePageTitles extends Test_Piwik_B
     private function setUpWebsites()
     {
         Piwik_SitesManager_API::getInstance()->setGlobalSearchParameters($searchKeywordParameters = 'gkwd', $searchCategoryParameters = 'gcat');
-        self::createWebsite(Piwik_Date::factory($this->dateTime)->getDatetime(), 0, "Site 1 - Site search", $siteurl = false, $search = 1, $searchKwd = 'q,mykwd,p', $searchCat = 'cats');
+        self::createWebsite(Date::factory($this->dateTime)->getDatetime(), 0, "Site 1 - Site search", $siteurl = false, $search = 1, $searchKwd = 'q,mykwd,p', $searchCat = 'cats');
     }
 
     private function trackVisits()
@@ -48,7 +49,7 @@ class Test_Piwik_Fixture_SomeVisitsWithNonUnicodePageTitles extends Test_Piwik_B
         $visitor = self::getTracker($idSite1, $dateTime, $defaultInit = true);
 
         // Test w/ iso-8859-15
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.3)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.3)->getDatetime());
         $visitor->setUrlReferrer('http://anothersite.com/whatever.html?whatever=Ato%FC');
         // Also testing that the value is encoded when passed as an array
         $visitor->setUrl('http://example.org/index.htm?random=param&mykwd[]=Search 2%FC&test&cats= Search Kategory &search_count=INCORRECT!');
@@ -58,13 +59,13 @@ class Test_Piwik_Fixture_SomeVisitsWithNonUnicodePageTitles extends Test_Piwik_B
 
         // Test w/ windows-1251
         $visitor = self::getTracker($idSite1, $dateTime, $defaultInit = true);
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.3)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.3)->getDatetime());
         $visitor->setUrlReferrer('http://anothersite.com/whatever.html?txt=%EC%E5%F8%EA%EE%E2%FB%E5');
         $visitor->setUrl('http://example.org/page/index.htm?whatever=%EC%E5%F8%EA%EE%E2%FB%E5');
         $visitor->setPageCharset('windows-1251');
         self::checkResponse($visitor->doTrackPageView('Page title is always UTF-8'));
 
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.4)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.4)->getDatetime());
         $nonUnicodeKeyword = '%EC%E5%F8%EA%EE%E2%FB%E5';
         $visitor->setUrl('http://example.org/page/index.htm?q=' . $nonUnicodeKeyword);
         $visitor->setPageCharset('windows-1251');
@@ -72,7 +73,7 @@ class Test_Piwik_Fixture_SomeVisitsWithNonUnicodePageTitles extends Test_Piwik_B
 
 
         // Test URL with non unicode Site Search keyword
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.5)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.5)->getDatetime());
         //TESTS: on jenkins somehow the "<-was here" was cut off so removing this test case and simply append the wrong keyword
 //		$visitor->setUrl('http://example.org/page/index.htm?q=non unicode keyword %EC%E5%F8%EAe%EE%E2%FBf%E5 <-was here');
         $visitor->setUrl('http://example.org/page/index.htm?q=non unicode keyword %EC%E5%F8%EA%EE%E2%FB%E5');
@@ -81,13 +82,13 @@ class Test_Piwik_Fixture_SomeVisitsWithNonUnicodePageTitles extends Test_Piwik_B
 
 
         $visitor->setPageCharset('');
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.5)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.5)->getDatetime());
         $visitor->setUrl('http://example.org/exit-page');
         self::checkResponse($visitor->doTrackPageView('Page title is always UTF-8'));
 
         // Test set invalid page char set
         $visitor = self::getTracker($idSite1, $dateTime, $defaultInit = true);
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(1)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($dateTime)->addHour(1)->getDatetime());
         $visitor->setUrlReferrer('http://anothersite.com/whatever.html');
         $visitor->setUrl('http://example.org/index.htm?random=param&mykwd=a+keyword&test&cats= Search Kategory &search_count=INCORRECT!');
         $visitor->setPageCharset('GTF-42'); // galactic transformation format
diff --git a/tests/PHPUnit/Fixtures/ThreeGoalsOnePageview.php b/tests/PHPUnit/Fixtures/ThreeGoalsOnePageview.php
index 7f055f4de6e48f493e2dbda19788a62be1322e7d..3ef00a5188712e13622d927941a1c5f53ccd9190 100644
--- a/tests/PHPUnit/Fixtures/ThreeGoalsOnePageview.php
+++ b/tests/PHPUnit/Fixtures/ThreeGoalsOnePageview.php
@@ -5,6 +5,7 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Fixture that adds one site with three goals and tracks one pageview & one manual
@@ -53,7 +54,7 @@ class Test_Piwik_Fixture_ThreeGoalsOnePageview extends Test_Piwik_BaseFixture
         $t->setUrl('http://example.org/index.htm');
         self::checkResponse($t->doTrackPageView('0'));
 
-        $t->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.3)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.3)->getDatetime());
         self::checkResponse($t->doTrackGoal($this->idGoal3, $revenue = 42.256));
     }
 }
diff --git a/tests/PHPUnit/Fixtures/ThreeSitesWithManyVisitsWithSiteSearch.php b/tests/PHPUnit/Fixtures/ThreeSitesWithManyVisitsWithSiteSearch.php
index ac93543b4287cb824c2a838262f02aed879f2349..a5b747debf615e0e2cea72489d813a23369cd8a1 100644
--- a/tests/PHPUnit/Fixtures/ThreeSitesWithManyVisitsWithSiteSearch.php
+++ b/tests/PHPUnit/Fixtures/ThreeSitesWithManyVisitsWithSiteSearch.php
@@ -5,6 +5,7 @@
  * @link    http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Adds three websites with different site search configurations and adds
@@ -36,9 +37,9 @@ class Test_Piwik_Fixture_ThreeSitesWithManyVisitsWithSiteSearch extends Test_Piw
     protected function setUpWebsites()
     {
         Piwik_SitesManager_API::getInstance()->setGlobalSearchParameters($searchKeywordParameters = 'gkwd', $searchCategoryParameters = 'gcat');
-        self::createWebsite(Piwik_Date::factory($this->dateTime)->subHour(200)->getDatetime(), 0, "Site 1 - Site search", $siteurl = false, $search = 1, $searchKwd = 'q,mykwd,p', $searchCat = 'cats');
-        self::createWebsite(Piwik_Date::factory($this->dateTime)->subHour(400)->getDatetime(), 0, "Site 2 - Site search use default", $siteurl = false, $search = 1, $searchKwd = '', $searchCat = '');
-        self::createWebsite(Piwik_Date::factory($this->dateTime)->subHour(600)->getDatetime(), 0, "Site 3 - No site search", $siteurl = false, $search = 0);
+        self::createWebsite(Date::factory($this->dateTime)->subHour(200)->getDatetime(), 0, "Site 1 - Site search", $siteurl = false, $search = 1, $searchKwd = 'q,mykwd,p', $searchCat = 'cats');
+        self::createWebsite(Date::factory($this->dateTime)->subHour(400)->getDatetime(), 0, "Site 2 - Site search use default", $siteurl = false, $search = 1, $searchKwd = '', $searchCat = '');
+        self::createWebsite(Date::factory($this->dateTime)->subHour(600)->getDatetime(), 0, "Site 3 - No site search", $siteurl = false, $search = 0);
     }
 
     protected function trackVisits()
@@ -54,68 +55,68 @@ class Test_Piwik_Fixture_ThreeSitesWithManyVisitsWithSiteSearch extends Test_Piw
         // Visitor site1
         $visitor = self::getTracker($this->idSite1, $this->dateTime, $defaultInit = true);
 
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.2)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.2)->getDatetime());
         $visitor->setUrl('http://example.org/index.htm?q=Search 1  ');
         self::checkResponse($visitor->doTrackPageView('Site Search results'));
 
         // Normal page view
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.22)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.22)->getDatetime());
         $visitor->setUrl('http://example.org/index.htm');
         self::checkResponse($visitor->doTrackPageView('Im just a page'));
 
         // IS_FOLLOWING_SEARCH: Not this time
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.23)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.23)->getDatetime());
         $visitor->setUrl('http://example.org/index.htm?random=PAGEVIEW, NOT SEARCH&mykwd=&IS_FOLLOWING_SEARCH ONCE');
         self::checkResponse($visitor->doTrackPageView('This is a pageview, not a Search - IS_FOLLOWING_SEARCH ONCE'));
 
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.25)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.25)->getDatetime());
         $visitor->setUrl('http://example.org/index.htm?standard=query&but=also#hash&q=' . urlencode('Search 1'));
         self::checkResponse($visitor->doTrackPageView('Site Search results - URL Fragment'));
 
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.26)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.26)->getDatetime());
         $visitor->setUrl('http://example.org/index.htm#q=Search 1&search_count=10');
         self::checkResponse($visitor->doTrackPageView('Site Search results - URL Fragment'));
 
         // &search_count=0 so it's a "No Result" keyword, but it will not appear in the report, because it also has other seraches with results
         // and the archiving does a MAX()
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.27)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.27)->getDatetime());
         $visitor->setUrl('http://example.org/index.htm?hello=world#q=Search 1&search_count=0');
         self::checkResponse($visitor->doTrackPageView('Site Search results - URL Fragment'));
 
         // Testing with non urlencoded values
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.3)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.3)->getDatetime());
         // ALso testing that array[] notation is detected
         $visitor->setUrl('http://example.org/index.htm?random=param&mykwd[]=Search 2&test&cats= Search Category &search_count=INCORRECT!');
         self::checkResponse($visitor->doTrackPageView('Site Search results'));
 
         // Testing with urlencoded values
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.32)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.32)->getDatetime());
         // Also testing with random case 'myKwd'
         $visitor->setUrl('http://example.org/index.htm?random=param&myKwd=Search 1&test&cats=' . urlencode(' Search Category ') . ' &search_count=0');
         self::checkResponse($visitor->doTrackPageView('Site Search results'));
 
         // IS_FOLLOWING_SEARCH: Yes
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.35)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.35)->getDatetime());
         $visitor->setUrl('http://example.org/index.htm?random=PAGEVIEW, NOT SEARCH&mykwd=&IS_FOLLOWING_SEARCH ONCE');
         self::checkResponse($visitor->doTrackPageView('This is a pageview, not a Search - IS_FOLLOWING_SEARCH ONCE'));
 
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.4)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.4)->getDatetime());
         $visitor->setUrl('http://example.org/index.htm?gkwd=SHOULD be a PageView, NOT a search');
         self::checkResponse($visitor->doTrackPageView('Pageview, not search'));
 
         $visitor->setUrl('http://example.org/hello?THIS IS A SITE SEARCH TRACKING API, NOT PAGEVIEW!');
 
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(24.41)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(24.41)->getDatetime());
         self::checkResponse($visitor->doTrackSiteSearch("Keyword - Tracking API"));
 
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(24.42)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(24.42)->getDatetime());
         self::checkResponse($visitor->doTrackSiteSearch("Keyword - Tracking API", "Category", $count = 5));
 
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(24.43)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(24.43)->getDatetime());
         self::checkResponse($visitor->doTrackSiteSearch("No Result Keyword!", "Bad No Result Category :(", $count = 0));
 
         // Keyword in iso-8859-15 charset with funny character
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(24.5)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(24.5)->getDatetime());
         $visitor->setPageCharset('iso-8859-15');
         $visitor->setUrl('http://example.org/index.htm?q=Final%20t%FCte%20Keyword%20Searched%20for%20now&search_count=10');
         self::checkResponse($visitor->doTrackPageView(false));
@@ -126,15 +127,15 @@ class Test_Piwik_Fixture_ThreeSitesWithManyVisitsWithSiteSearch extends Test_Piw
         $visitorB->setIp('156.66.6.66');
         $visitorB->setResolution(1600, 1000);
 
-        $visitorB->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(2.26)->getDatetime());
+        $visitorB->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(2.26)->getDatetime());
         $visitorB->setUrl('http://example.org/index.htm#q=' . urlencode('No Result Keyword!') . '&search_count=0');
         self::checkResponse($visitorB->doTrackPageView('Site Search results - URL Fragment'));
 
-        $visitorB->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(2.27)->getDatetime());
+        $visitorB->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(2.27)->getDatetime());
         $visitorB->setUrl('http://example.org/index.htm?hello=world#q=Search 1&search_count=10');
         self::checkResponse($visitorB->doTrackPageView('Site Search results - URL Fragment'));
 
-        $visitorB->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(2.3)->getDatetime());
+        $visitorB->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(2.3)->getDatetime());
         $visitorB->setUrl('http://example.org/index.htm?random=param&mykwd=Search 2&test&cats= Search Category &search_count=10');
         self::checkResponse($visitorB->doTrackPageView('Site Search results'));
     }
@@ -145,12 +146,12 @@ class Test_Piwik_Fixture_ThreeSitesWithManyVisitsWithSiteSearch extends Test_Piw
         $visitor = self::getTracker($this->idSite3, $this->dateTime, $defaultInit = true);
         $visitor->setResolution(1801, 1301);
 
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.2)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.2)->getDatetime());
         $visitor->setUrl('http://example.org/index.htm?q=Search 1&IsPageView=1');
         $visitor->setCustomVariable(1, 'test cvar name', 'test cvar value');
         self::checkResponse($visitor->doTrackPageView('IsPageView'));
 
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.35)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.35)->getDatetime());
         $visitor->setUrl('http://example.org/index.htm?gkwd=test not a keyword&gcat=Cat not but not keyword, so this is not search');
         self::checkResponse($visitor->doTrackPageView('This is a pageview, not a Search'));
 
@@ -165,25 +166,25 @@ class Test_Piwik_Fixture_ThreeSitesWithManyVisitsWithSiteSearch extends Test_Piw
         $visitor = self::getTracker($this->idSite2, $this->dateTime, $defaultInit = true);
         $visitor->setResolution(801, 301);
 
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.2)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.2)->getDatetime());
         $visitor->setUrl('http://example.org/index.htm?q=Search 1&IsPageView=1');
         self::checkResponse($visitor->doTrackPageView('IsPageView'));
 
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.35)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.35)->getDatetime());
         $visitor->setUrl('http://example.org/index.htm?random=PAGEVIEW, NOT SEARCH&gcat=Cat not but not keyword, so this is not search');
         self::checkResponse($visitor->doTrackPageView('This is a pageview, not a Search'));
 
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.4)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.4)->getDatetime());
         $visitor->setUrl('http://example.org/index.htm?gkwd=SHOULD be a Search with no result!&search_count=0');
         self::checkResponse($visitor->doTrackPageView('This is a Search'));
 
         // Testing UTF8 keywords
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.45)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.45)->getDatetime());
         $crazySearchTerm = 'You%20can%20use%20Piwik%20in%3A%20%E1%8A%A0%E1%88%9B%E1%88%AD%E1%8A%9B%2C%20%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9%2C%20%D0%91%D0%B5%D0%BB%D0%B0%D1%80%D1%83%D1%81%D0%BA%D0%B0%D1%8F%2C%20%D0%91%D1%8A%D0%BB%D0%B3%D0%B0%D1%80%D1%81%D0%BA%D0%B8%2C%20Catal%C3%A0%2C%20%C4%8Cesky%2C%20Dansk%2C%20Deutsch%2C%20%CE%95%CE%BB%CE%BB%CE%B7%CE%BD%CE%B9%CE%BA%CE%AC%2C%20English%2C%20Espa%C3%B1ol%2C%20Eesti%20keel%2C%20Euskara%2C%20%D9%81%D8%A7%D8%B1%D8%B3%DB%8C%2C%20Suomi%2C%20Fran%C3%A7ais%2C%20Galego%2C%20%D7%A2%D7%91%D7%A8%D7%99%D7%AA%2C%20Magyar%2C%20Bahasa%20Indonesia%2C%20%C3%8Dslenska%2C%20Italiano%2C%20%E6%97%A5%E6%9C%AC%E8%AA%9E%2C%20%E1%83%A5%E1%83%90%E1%83%A0%E1%83%97%E1%83%A3%E1%83%9A%E1%83%98%2C%20%ED%95%9C%EA%B5%AD%EC%96%B4%2C%20Lietuvi%C5%B3%2C%20Latvie%C5%A1u%2C%20Norsk%20(bokm%C3%A5l)%2C%20Nederlands%2C%20Norsk%20(nynorsk)%2C%20Polski%2C%20Portugu%C3%AAs%20brasileiro%2C%20Portugu%C3%AAs%2C%20Rom%C3%A2n%C4%83%2C%20%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%2C%20Slovensky%2C%20Sloven%C5%A1%C4%8Dina%2C%20Shqip%2C%20Srpski%2C%20Svenska%2C%20%E0%B0%A4%E0%B1%86%E0%B0%B2%E0%B1%81%E0%B0%97%E0%B1%81%2C%20%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2%E0%B9%84%E0%B8%97%E0%B8%A2%2C%20T%C3%BCrk%C3%A7e%2C%20%D0%A3%D0%BA%D1%80%D0%B0%D1%97%D0%BD%D1%81%D1%8C%D0%BA%D0%B0%2C%20%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%2C%20%E7%B9%81%E9%AB%94%E4%B8%AD%E6%96%87.';
         $visitor->setUrl('http://example.org/index.htm?gkwd=' . $crazySearchTerm . '&gcat=' . $crazySearchTerm . '&search_count=1');
         self::checkResponse($visitor->doTrackPageView('Site Search with 1 result'));
 
-        $visitor->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour(0.5)->getDatetime());
+        $visitor->setForceVisitDateTime(Date::factory($this->dateTime)->addHour(0.5)->getDatetime());
         self::checkResponse($visitor->doTrackSiteSearch("No Result Keyword!", "Bad No Result Category bis :(", $count = 0));
         return array($defaultInit, $visitor);
     }
diff --git a/tests/PHPUnit/Fixtures/TwoSitesEcommerceOrderWithItems.php b/tests/PHPUnit/Fixtures/TwoSitesEcommerceOrderWithItems.php
index 2000580da82abbb9d9eb227ac675d065c11279a5..33e244d7cac584f5593fb14b8a3e0b2ac60d9d1b 100644
--- a/tests/PHPUnit/Fixtures/TwoSitesEcommerceOrderWithItems.php
+++ b/tests/PHPUnit/Fixtures/TwoSitesEcommerceOrderWithItems.php
@@ -5,6 +5,7 @@
  * @link    http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Adds two sites and tracks some visits with ecommerce orders.
@@ -61,16 +62,16 @@ class Test_Piwik_Fixture_TwoSitesEcommerceOrderWithItems extends Test_Piwik_Base
         self::assertEquals(array('VisitorType', 'NewLoggedOut'), $t->getCustomVariable(5, 'visit'));
         self::checkResponse($t->doTrackPageView('incredible title!'));
 
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.1)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.1)->getDatetime());
         $t->setEcommerceView($sku = 'SKU VERY nice indeed', $name = 'PRODUCT name', $category, $price = 666);
         self::checkResponse($t->doTrackPageView('Another Product page'));
 
         // Note: here testing to pass a timestamp to the tracking API rather than the datetime string
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.2)->getTimestampUTC());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.2)->getTimestampUTC());
         $t->setEcommerceView($sku = 'SKU VERY nice indeed', $name = 'PRODUCT name', '');
         self::checkResponse($t->doTrackPageView('Another Product page with no category'));
 
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.2)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.2)->getDatetime());
         $t->setEcommerceView($sku = 'SKU VERY nice indeed', $name = 'PRODUCT name', $categories = array('Multiple Category 1', '', 0, 'Multiple Category 2', 'Electronics & Cameras', 'Multiple Category 4', 'Multiple Category 5', 'SHOULD NOT BE REPORTEDSSSSSSSSSSSSSSssssssssssssssssssssssssssstttttttttttttttttttttttuuuu!'));
         self::checkResponse($t->doTrackPageView('Another Product page with multiple categories'));
 
@@ -80,22 +81,22 @@ class Test_Piwik_Fixture_TwoSitesEcommerceOrderWithItems extends Test_Piwik_Base
         $t->setDebugStringAppend("&_idvc=2");
 
         // VIEW category page
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(1.6)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(1.6)->getDatetime());
         $t->setEcommerceView('', '', $category);
         self::checkResponse($t->doTrackPageView('Looking at ' . $category . ' page with a page level custom variable'));
 
         // VIEW category page again
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(1.7)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(1.7)->getDatetime());
         $t->setEcommerceView('', '', $category);
         self::checkResponse($t->doTrackPageView('Looking at ' . $category . ' page again'));
 
         // VIEW product page
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(1.8)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(1.8)->getDatetime());
         $t->setEcommerceView($sku = 'SKU VERY nice indeed', $name = 'PRODUCT name', $category = 'Electronics & Cameras', $price = 666);
         self::checkResponse($t->doTrackPageView('Looking at product page'));
 
         // ADD TO CART
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(1.9)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(1.9)->getDatetime());
         $t->setCustomVariable(3, 'VisitorName', 'Great name!', 'visit');
         $t->addEcommerceItem($sku = 'SKU VERY nice indeed', $name = 'PRODUCT name', $category = 'Electronics & Cameras', $price = 500, $quantity = 1);
         $t->addEcommerceItem($sku = 'SKU VERY nice indeed', $name = 'PRODUCT name', $category = 'Electronics & Cameras', $price = 500, $quantity = 2);
@@ -103,13 +104,13 @@ class Test_Piwik_Fixture_TwoSitesEcommerceOrderWithItems extends Test_Piwik_Base
         self::checkResponse($t->doTrackEcommerceCartUpdate($grandTotal = 1000));
 
         // ORDER NO 1
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(2)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(2)->getDatetime());
         $t->addEcommerceItem($sku = 'SKU VERY nice indeed', $name = 'PRODUCT name', $categories, $price = 500, $quantity = 2);
         $t->addEcommerceItem($sku = 'ANOTHER SKU HERE', $name = 'PRODUCT name BIS', $category = '', $price = 100, $quantity = 6);
         self::checkResponse($t->doTrackEcommerceOrder($orderId = '937nsjusu 3894', $grandTotal = 1111.11, $subTotal = 1000, $tax = 111, $shipping = 0.11, $discount = 666));
 
         // ORDER NO 2
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(2.1)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(2.1)->getDatetime());
         $t->addEcommerceItem($sku = 'SKU2', $name = 'Canon SLR', $category = 'Electronics & Cameras', $price = 1500, $quantity = 1);
         // Product bought with empty category
         $t->addEcommerceItem($sku = 'SKU VERY nice indeed', $name = 'PRODUCT name', '', $price = 11.22, $quantity = 1);
@@ -125,19 +126,19 @@ class Test_Piwik_Fixture_TwoSitesEcommerceOrderWithItems extends Test_Piwik_Base
         // ORDER SHOULD DEDUPE
         // Refresh the page with the receipt for the second order, should be ignored
         // we test that both the order, and the products, are not updated on subsequent "Receipt" views
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(2.2)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(2.2)->getDatetime());
         $t->addEcommerceItem($sku = 'SKU2', $name = 'Canon SLR NOT!', $category = 'Electronics & Cameras NOT!', $price = 15000000000, $quantity = 10000);
         self::checkResponse($t->doTrackEcommerceOrder($orderId = '1037nsjusu4s3894', $grandTotal = 20000000, $subTotal = 1500, $tax = 400, $shipping = 100, $discount = 0));
 
         // Leave with an opened cart
         // No category
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(2.3)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(2.3)->getDatetime());
         $t->addEcommerceItem($sku = 'SKU IN ABANDONED CART ONE', $name = 'PRODUCT ONE LEFT in cart', $category = '', $price = 500.11111112, $quantity = 2);
         self::checkResponse($t->doTrackEcommerceCartUpdate($grandTotal = 1000));
 
         // Record the same visit leaving twice an abandoned cart
         foreach (array(0, 5, 24) as $offsetHour) {
-            $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour($offsetHour + 2.4)->getDatetime());
+            $t->setForceVisitDateTime(Date::factory($dateTime)->addHour($offsetHour + 2.4)->getDatetime());
             // Also recording an order the day after
             if ($offsetHour >= 24) {
                 $t->setDebugStringAppend("&_idvc=1");
@@ -146,20 +147,20 @@ class Test_Piwik_Fixture_TwoSitesEcommerceOrderWithItems extends Test_Piwik_Base
             }
 
             // VIEW PRODUCT PAGES
-            $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour($offsetHour + 2.5)->getDatetime());
+            $t->setForceVisitDateTime(Date::factory($dateTime)->addHour($offsetHour + 2.5)->getDatetime());
             $t->setEcommerceView($sku = 'SKU VERY nice indeed', $name = 'PRODUCT THREE LEFT in cart', $category = '', $price = 999);
             self::checkResponse($t->doTrackPageView("View product left in cart"));
 
-            $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour($offsetHour + 2.55)->getDatetime());
+            $t->setForceVisitDateTime(Date::factory($dateTime)->addHour($offsetHour + 2.55)->getDatetime());
             $t->setEcommerceView($sku = 'SKU VERY nice indeed', $name = 'PRODUCT THREE LEFT in cart', $category = '', $price = 333);
             self::checkResponse($t->doTrackPageView("View product left in cart"));
 
-            $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour($offsetHour + 2.6)->getDatetime());
+            $t->setForceVisitDateTime(Date::factory($dateTime)->addHour($offsetHour + 2.6)->getDatetime());
             $t->setEcommerceView($sku = 'SKU IN ABANDONED CART TWO', $name = 'PRODUCT TWO LEFT in cart', $category = 'Category TWO LEFT in cart');
             self::checkResponse($t->doTrackPageView("View product left in cart"));
 
             // ABANDONED CART
-            $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour($offsetHour + 2.7)->getDatetime());
+            $t->setForceVisitDateTime(Date::factory($dateTime)->addHour($offsetHour + 2.7)->getDatetime());
             $t->addEcommerceItem($sku = 'SKU IN ABANDONED CART ONE', $name = 'PRODUCT ONE LEFT in cart', $category = '', $price = 500.11111112, $quantity = 1);
             $t->addEcommerceItem($sku = 'SKU IN ABANDONED CART TWO', $name = 'PRODUCT TWO LEFT in cart', $category = 'Category TWO LEFT in cart', $price = 1000, $quantity = 2);
             $t->addEcommerceItem($sku = 'SKU VERY nice indeed', $name = 'PRODUCT THREE LEFT in cart', $category = 'Electronics & Cameras', $price = 10, $quantity = 1);
@@ -167,17 +168,17 @@ class Test_Piwik_Fixture_TwoSitesEcommerceOrderWithItems extends Test_Piwik_Base
         }
 
         // One more Ecommerce order to check weekly archiving works fine on orders
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(30.7)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(30.7)->getDatetime());
         $t->addEcommerceItem($sku = 'TRIPOD SKU', $name = 'TRIPOD - bought day after', $category = 'Tools', $price = 100, $quantity = 2);
         self::checkResponse($t->doTrackEcommerceOrder($orderId = '666', $grandTotal = 240, $subTotal = 200, $tax = 20, $shipping = 20, $discount = 20));
 
         // One more Ecommerce order, without any product in it, because we still track orders without products
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(30.8)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(30.8)->getDatetime());
         self::checkResponse($t->doTrackEcommerceOrder($orderId = '777', $grandTotal = 10000));
 
         // testing the same order in a different website should record
         $t = self::getTracker($idSite2, $dateTime, $defaultInit = true);
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(30.9)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(30.9)->getDatetime());
         $t->addEcommerceItem($sku = 'TRIPOD SKU', $name = 'TRIPOD - bought day after', $category = 'Tools', $price = 100, $quantity = 2);
         self::checkResponse($t->doTrackEcommerceOrder($orderId = '777', $grandTotal = 250));
         //------------------------------------- End tracking
diff --git a/tests/PHPUnit/Fixtures/TwoSitesManyVisitsOverSeveralDaysWithSearchEngineReferrers.php b/tests/PHPUnit/Fixtures/TwoSitesManyVisitsOverSeveralDaysWithSearchEngineReferrers.php
index faf3d45696c08645d3de7fd8831b6f5609438a26..a122bb5436ea1518c1477a1e27cb50686da73d4f 100644
--- a/tests/PHPUnit/Fixtures/TwoSitesManyVisitsOverSeveralDaysWithSearchEngineReferrers.php
+++ b/tests/PHPUnit/Fixtures/TwoSitesManyVisitsOverSeveralDaysWithSearchEngineReferrers.php
@@ -5,6 +5,7 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Adds one website and tracks visits on different days over a month
@@ -58,7 +59,7 @@ class Test_Piwik_Fixture_TwoSitesManyVisitsOverSeveralDaysWithSearchEngineReferr
         $t->enableBulkTracking();
         for ($daysIntoPast = 30; $daysIntoPast >= 0; $daysIntoPast--) {
             // Visit 1: referrer website + test page views
-            $visitDateTime = Piwik_Date::factory($dateTime)->subDay($daysIntoPast)->getDatetime();
+            $visitDateTime = Date::factory($dateTime)->subDay($daysIntoPast)->getDatetime();
 
             $t->setNewVisitorId();
             $t->setIdSite($idSite);
@@ -75,11 +76,11 @@ class Test_Piwik_Fixture_TwoSitesManyVisitsOverSeveralDaysWithSearchEngineReferr
 
             // Trigger goal n°2 twice
             self::assertTrue($t->doTrackGoal(2));
-            $t->setForceVisitDateTime(Piwik_Date::factory($visitDateTime)->addHour(0.1)->getDatetime());
+            $t->setForceVisitDateTime(Date::factory($visitDateTime)->addHour(0.1)->getDatetime());
             self::assertTrue($t->doTrackGoal(2));
 
             // VISIT 2: search engine
-            $t->setForceVisitDateTime(Piwik_Date::factory($visitDateTime)->addHour(3)->getDatetime());
+            $t->setForceVisitDateTime(Date::factory($visitDateTime)->addHour(3)->getDatetime());
             $t->setUrlReferrer('http://google.com/search?q=' . urlencode($this->keywords[$daysIntoPast % 3]));
             $t->setGenerationTime($daysIntoPast * 100 + 200);
             self::assertTrue($t->doTrackPageView('not an incredible title '));
diff --git a/tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php b/tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php
index 3c42391c1a691ca3aead3a4f4d6fcdcf1d019630..ad7dfa047607b6902651bf6e6e9748ab2890d4c5 100644
--- a/tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php
+++ b/tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php
@@ -5,6 +5,7 @@
  * @link    http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Adds two websites and tracks visits from two visitors on different days.
@@ -68,11 +69,11 @@ class Test_Piwik_Fixture_TwoSitesTwoVisitorsDifferentDays extends Test_Piwik_Bas
         $visitorA = self::getTracker($idSite, $datetimeSpanOverTwoDays, $defaultInit = true);
         $visitorA->setUrlReferrer('http://referer.com/page.htm?param=valuewith some spaces');
         $visitorA->setUrl('http://example.org/index.htm#ignoredFragment');
-        $visitorA->DEBUG_APPEND_URL = '&_idts=' . Piwik_Date::factory($datetimeSpanOverTwoDays)->getTimestamp();
+        $visitorA->DEBUG_APPEND_URL = '&_idts=' . Date::factory($datetimeSpanOverTwoDays)->getTimestamp();
         $visitorA->setGenerationTime(123);
         self::checkResponse($visitorA->doTrackPageView('first page view'));
 
-        $visitorA->setForceVisitDateTime(Piwik_Date::factory($datetimeSpanOverTwoDays)->addHour(0.1)->getDatetime());
+        $visitorA->setForceVisitDateTime(Date::factory($datetimeSpanOverTwoDays)->addHour(0.1)->getDatetime());
         // testing with empty URL and empty page title
         $visitorA->setUrl('  ');
         $visitorA->setGenerationTime(223);
@@ -85,50 +86,50 @@ class Test_Piwik_Fixture_TwoSitesTwoVisitorsDifferentDays extends Test_Piwik_Bas
         $visitorB->setTokenAuth(self::getTokenAuth());
         $visitorB->setIp('100.52.156.83');
         $visitorB->setResolution(800, 300);
-        $visitorB->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(1)->getDatetime());
+        $visitorB->setForceVisitDateTime(Date::factory($dateTime)->addHour(1)->getDatetime());
         $visitorB->setUrlReferrer('');
         $visitorB->setUserAgent('Opera/9.63 (Windows NT 5.1; U; en) Presto/2.1.1');
         $visitorB->setUrl('http://example.org/products');
-        $visitorB->DEBUG_APPEND_URL = '&_idts=' . Piwik_Date::factory($dateTime)->addHour(1)->getTimestamp();
+        $visitorB->DEBUG_APPEND_URL = '&_idts=' . Date::factory($dateTime)->addHour(1)->getTimestamp();
         $visitorB->setGenerationTime(153);
         self::assertTrue($visitorB->doTrackPageView('first page view'));
 
         // -
         // Second visitor again on Idsite 1: 2 page views 2 days later, 2010-01-05
-        $visitorB->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(48)->getDatetime());
+        $visitorB->setForceVisitDateTime(Date::factory($dateTime)->addHour(48)->getDatetime());
         // visitor_returning is set to 1 only when visit count more than 1
         // Temporary, until we implement 1st party cookies in PiwikTracker
-        $visitorB->DEBUG_APPEND_URL .= '&_idvc=2&_viewts=' . Piwik_Date::factory($dateTime)->getTimestamp();
+        $visitorB->DEBUG_APPEND_URL .= '&_idvc=2&_viewts=' . Date::factory($dateTime)->getTimestamp();
 
         $visitorB->setUrlReferrer('http://referer.com/Other_Page.htm');
         $visitorB->setUrl('http://example.org/index.htm');
         $visitorB->setGenerationTime(323);
         self::assertTrue($visitorB->doTrackPageView('second visitor/two days later/a new visit'));
         // Second page view 6 minutes later
-        $visitorB->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(48)->addHour(0.1)->getDatetime());
+        $visitorB->setForceVisitDateTime(Date::factory($dateTime)->addHour(48)->addHour(0.1)->getDatetime());
         $visitorB->setUrl('http://example.org/thankyou');
         $visitorB->setGenerationTime(173);
         self::assertTrue($visitorB->doTrackPageView('second visitor/two days later/second page view'));
 
         // testing a strange combination causing an error in r3767
-        $visitorB->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(48)->addHour(0.2)->getDatetime());
+        $visitorB->setForceVisitDateTime(Date::factory($dateTime)->addHour(48)->addHour(0.2)->getDatetime());
         self::assertTrue($visitorB->doTrackAction('mailto:test@example.org', 'link'));
-        $visitorB->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(48)->addHour(0.25)->getDatetime());
+        $visitorB->setForceVisitDateTime(Date::factory($dateTime)->addHour(48)->addHour(0.25)->getDatetime());
         self::assertTrue($visitorB->doTrackAction('mailto:test@example.org/strangelink', 'link'));
 
         // Actions.getPageTitle tested with this title
-        $visitorB->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(48)->addHour(0.25)->getDatetime());
+        $visitorB->setForceVisitDateTime(Date::factory($dateTime)->addHour(48)->addHour(0.25)->getDatetime());
         $visitorB->setGenerationTime(452);
         self::assertTrue($visitorB->doTrackPageView('Checkout / Purchasing...'));
         self::checkResponse($visitorB->doBulkTrack());
 
         // -
         // First visitor on Idsite 2: one page view, with Website referer
-        $visitorAsite2 = self::getTracker($idSite2, Piwik_Date::factory($dateTime)->addHour(24)->getDatetime(), $defaultInit = true);
+        $visitorAsite2 = self::getTracker($idSite2, Date::factory($dateTime)->addHour(24)->getDatetime(), $defaultInit = true);
         $visitorAsite2->setUserAgent('Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0;)');
         $visitorAsite2->setUrlReferrer('http://only-homepage-referer.com/');
         $visitorAsite2->setUrl('http://example2.com/home#notIgnoredFragment#');
-        $visitorAsite2->DEBUG_APPEND_URL = '&_idts=' . Piwik_Date::factory($dateTime)->addHour(24)->getTimestamp();
+        $visitorAsite2->DEBUG_APPEND_URL = '&_idts=' . Date::factory($dateTime)->addHour(24)->getTimestamp();
         $visitorAsite2->setGenerationTime(193);
         self::checkResponse($visitorAsite2->doTrackPageView('Website 2 page view'));
         // test with invalid URL
diff --git a/tests/PHPUnit/Fixtures/TwoSitesVisitsInPast.php b/tests/PHPUnit/Fixtures/TwoSitesVisitsInPast.php
index d476bb793392ee931f14c189b598a65e250b3069..eae1b9749f7232c8cd7bfde429c0cfe7ea6c71f2 100644
--- a/tests/PHPUnit/Fixtures/TwoSitesVisitsInPast.php
+++ b/tests/PHPUnit/Fixtures/TwoSitesVisitsInPast.php
@@ -5,6 +5,7 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Adds two sites and tracks several visits all in the past.
@@ -97,7 +98,7 @@ class Test_Piwik_Fixture_TwoSitesVisitsInPast extends Test_Piwik_BaseFixture
         self::checkResponse($t->doTrackPageView('Hello'));
         $t->setUrl('http://example.org/category/Pageyy');
         self::checkResponse($t->doTrackPageView('Blabla'));
-        $t->setForceVisitDateTime(Piwik_Date::factory($this->dateTimeDateInPastWebsite2)->addHour(0.1)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($this->dateTimeDateInPastWebsite2)->addHour(0.1)->getDatetime());
         $t->setUrl('http://example.org/category/Pageyy');
         self::checkResponse($t->doTrackPageView('Blabla'));
     }
diff --git a/tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php b/tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php
index 2c986b337c504b7c8c7b5aa1ec40face89c010be..83b4eded013142447827f2de6939e0b30a5ba6fd 100644
--- a/tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php
+++ b/tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php
@@ -6,6 +6,7 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 use Piwik\Access;
+use Piwik\Date;
 
 /**
  * A fixture that adds two websites and annotations for each website.
@@ -37,8 +38,8 @@ class Test_Piwik_Fixture_TwoSitesWithAnnotations extends Test_Piwik_BaseFixture
         // add two annotations per week for three months, starring every third annotation
         // first month in 2011, second two in 2012
         $count = 0;
-        $dateStart = Piwik_Date::factory('2011-12-01');
-        $dateEnd = Piwik_Date::factory('2012-03-01');
+        $dateStart = Date::factory('2011-12-01');
+        $dateEnd = Date::factory('2012-03-01');
         while ($dateStart->getTimestamp() < $dateEnd->getTimestamp()) {
             $starred = $count % 3 == 0 ? 1 : 0;
             $site1Text = "$count: Site 1 annotation for " . $dateStart->toString();
diff --git a/tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php b/tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php
index c4399d7f66d303b69969ff03738333e13426d752..fe28c492d9d01e72e2bcc1d056ac2f6262fc3ef7 100644
--- a/tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php
+++ b/tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php
@@ -5,6 +5,7 @@
  * @link    http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Adds one site and tracks two visits. One visit is a bot and one has no keyword
@@ -49,12 +50,12 @@ class Test_Piwik_Fixture_TwoVisitsNoKeywordWithBot extends Test_Piwik_BaseFixtur
         $t->setUrl('http://example.org/this%20is%20cool!');
         self::checkResponse($t->doTrackPageView('incredible title!'));
         $idGoal = Piwik_Goals_API::getInstance()->addGoal($idSite, 'triggered js', 'manually', '', '');
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.3)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.3)->getDatetime());
         self::checkResponse($t->doTrackGoal($idGoal, $revenue = 42));
 
         // VISIT 2 = Referrer has keyword, but the URL should be rewritten 
         // in Live Output to point to google search result page
-        $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(2)->getDatetime());
+        $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(2)->getDatetime());
         $t->setUrlReferrer('http://www.google.com.vn/url?sa=t&rct=j&q=%3C%3E%26%5C%22the%20pdo%20extension%20is%20required%20for%20this%20adapter%20but%20the%20extension%20is%20not%20loaded&source=web&cd=4&ved=0FjAD&url=http%3A%2F%2Fforum.piwik.org%2Fread.php%3F2%2C1011&ei=y-HHAQ&usg=AFQjCN2-nt5_GgDeg&cad=rja');
 
         // Test with empty title, that the output of Live is valid
diff --git a/tests/PHPUnit/Fixtures/TwoVisitsWithCustomVariables.php b/tests/PHPUnit/Fixtures/TwoVisitsWithCustomVariables.php
index 070d266ecfb859c8ae70b237f2a03e37a580e49c..5ab144c1157ccf361a093891d75ca8f7417fc7f5 100644
--- a/tests/PHPUnit/Fixtures/TwoVisitsWithCustomVariables.php
+++ b/tests/PHPUnit/Fixtures/TwoVisitsWithCustomVariables.php
@@ -5,6 +5,7 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Adds one site with two goals and tracks two visits with custom variables.
@@ -65,14 +66,14 @@ class Test_Piwik_Fixture_TwoVisitsWithCustomVariables extends Test_Piwik_BaseFix
         $visitorA->setResolution($this->resolutionWidthToUse, $this->resolutionHeightToUse);
 
         // At first, visitor custom var is set to LoggedOut
-        $visitorA->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.1)->getDatetime());
+        $visitorA->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.1)->getDatetime());
         $visitorA->setUrl('http://example.org/homepage');
         $visitorA->setCustomVariable($id = 1, $name = 'VisitorType', $value = 'LoggedOut');
         self::checkResponse($visitorA->doTrackPageView('Homepage'));
         self::checkResponse($visitorA->doTrackGoal($idGoal2));
 
         // After login, set to LoggedIn, should overwrite previous value
-        $visitorA->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.2)->getDatetime());
+        $visitorA->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.2)->getDatetime());
         $visitorA->setUrl('http://example.org/user/profile');
         $visitorA->setCustomVariable($id = 1, $name = 'VisitorType', $value = 'LoggedIn');
         $visitorA->setCustomVariable($id = 4, $name = 'Status user', $value = 'Loggedin', $scope = 'page');
@@ -119,7 +120,7 @@ class Test_Piwik_Fixture_TwoVisitsWithCustomVariables extends Test_Piwik_BaseFix
         $visitorB->setAttributionInfo(json_encode($attribution));
         $visitorB->setResolution($this->resolutionWidthToUse, $this->resolutionHeightToUse);
         $visitorB->setUserAgent('Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6');
-        $visitorB->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(1)->getDatetime());
+        $visitorB->setForceVisitDateTime(Date::factory($dateTime)->addHour(1)->getDatetime());
         $visitorB->setCustomVariable($id = 1, $name = 'VisitorType', $value = 'LoggedOut');
         $visitorB->setCustomVariable($id = 2, $name = 'Othercustom value which should be truncated abcdefghijklmnopqrstuvwxyz', $value = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz');
         $visitorB->setCustomVariable($id = -2, $name = 'not tracked', $value = 'not tracked');
@@ -128,12 +129,12 @@ class Test_Piwik_Fixture_TwoVisitsWithCustomVariables extends Test_Piwik_BaseFix
         $visitorB->setUrl('http://example.org/homepage');
         self::checkResponse($visitorB->doTrackGoal($idGoal, 1000));
 
-        $visitorB->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(1.1)->getDatetime());
+        $visitorB->setForceVisitDateTime(Date::factory($dateTime)->addHour(1.1)->getDatetime());
         self::checkResponse($visitorB->doTrackPageView('Homepage'));
 
         // DIFFERENT test -
         // testing that starting the visit with an outlink works (doesn't trigger errors)
-        $visitorB->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(2)->getDatetime());
+        $visitorB->setForceVisitDateTime(Date::factory($dateTime)->addHour(2)->getDatetime());
         self::checkResponse($visitorB->doTrackAction('http://test.com', 'link'));
     }
 }
diff --git a/tests/PHPUnit/Fixtures/VisitsOverSeveralDays.php b/tests/PHPUnit/Fixtures/VisitsOverSeveralDays.php
index f38fa6a7f194c6b21b2225d5cfa37c4350981a04..c845fabbf1dbfafa3b86fcb7def6234cbff11efe 100644
--- a/tests/PHPUnit/Fixtures/VisitsOverSeveralDays.php
+++ b/tests/PHPUnit/Fixtures/VisitsOverSeveralDays.php
@@ -5,6 +5,7 @@
  * @link    http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * Adds one website and tracks several visits from one visitor on
@@ -70,7 +71,7 @@ class Test_Piwik_Fixture_VisitsOverSeveralDays extends Test_Piwik_BaseFixture
             $visitor = $this->makeTracker($this->idSite, $dateTime, $debugStringAppend);
 
             // FIRST VISIT THIS DAY
-            $visitor->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.1)->getDatetime());
+            $visitor->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.1)->getDatetime());
             $visitor->setUrl('http://example.org/homepage');
             $visitor->setUrlReferrer($this->referrerUrls[$ridx++]);
             self::checkResponse($visitor->doTrackPageView('ou pas'));
@@ -78,19 +79,19 @@ class Test_Piwik_Fixture_VisitsOverSeveralDays extends Test_Piwik_BaseFixture
             // Test change the IP, the visit should not be split but recorded to the same idvisitor
             $visitor->setIp('200.1.15.22');
 
-            $visitor->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.2)->getDatetime());
+            $visitor->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.2)->getDatetime());
             $visitor->setUrl('http://example.org/news');
             self::checkResponse($visitor->doTrackPageView('ou pas'));
 
             // SECOND VISIT THIS DAY
-            $visitor->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(1)->getDatetime());
+            $visitor->setForceVisitDateTime(Date::factory($dateTime)->addHour(1)->getDatetime());
             $visitor->setUrl('http://example.org/news');
             $visitor->setUrlReferrer($this->referrerUrls[$ridx++]);
             self::checkResponse($visitor->doTrackPageView('ou pas'));
 
             if ($days <= 3) {
                 $visitor = $this->makeTracker($this->idSite2, $dateTime);
-                $visitor->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.1)->getDatetime());
+                $visitor->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.1)->getDatetime());
                 $visitor->setUrl('http://example.org/homepage');
                 $visitor->setUrlReferrer($this->referrerUrls[$ridx - 1]);
                 self::checkResponse($visitor->doTrackPageView('Second website'));
diff --git a/tests/PHPUnit/Integration/ArchiveCronTest.php b/tests/PHPUnit/Integration/ArchiveCronTest.php
index eb49013b5dddd136222f2d0eccca1db91667f6de..dce02cf182b5bcb87e9983971309466a15bb471e 100644
--- a/tests/PHPUnit/Integration/ArchiveCronTest.php
+++ b/tests/PHPUnit/Integration/ArchiveCronTest.php
@@ -7,6 +7,7 @@
  */
 use Piwik\Piwik;
 use Piwik\Access;
+use Piwik\Date;
 
 /**
  * Tests the archive.php cron script.
@@ -91,7 +92,7 @@ class Test_Piwik_Integration_ArchiveCronTest extends IntegrationTestCase
         $periodTypes = array('day', 'periods');
         $idSites = Piwik_SitesManager_API::getInstance()->getAllSitesId();
         
-        $time = Piwik_Date::factory(self::$fixture->dateTime)->subDay(1)->getTimestamp();
+        $time = Date::factory(self::$fixture->dateTime)->subDay(1)->getTimestamp();
         
         foreach ($periodTypes as $period) {
             foreach ($idSites as $idSite) {
diff --git a/tests/PHPUnit/Integration/AutoSuggestAPITest.php b/tests/PHPUnit/Integration/AutoSuggestAPITest.php
index af7048059c961e8bc70f058f05a6006ae92c5680..5b97695dd0dba279348fb9161979a0fdac8a4db4 100644
--- a/tests/PHPUnit/Integration/AutoSuggestAPITest.php
+++ b/tests/PHPUnit/Integration/AutoSuggestAPITest.php
@@ -5,6 +5,7 @@
  * @link    http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * testing a the auto suggest API for all known segments
@@ -129,4 +130,4 @@ class Test_Piwik_Integration_AutoSuggestAPITest extends IntegrationTestCase
 }
 
 Test_Piwik_Integration_AutoSuggestAPITest::$fixture = new Test_Piwik_Fixture_ManyVisitsWithGeoIP();
-Test_Piwik_Integration_AutoSuggestAPITest::$fixture->dateTime = Piwik_Date::yesterday()->subDay(30)->getDatetime();
+Test_Piwik_Integration_AutoSuggestAPITest::$fixture->dateTime = Date::yesterday()->subDay(30)->getDatetime();
diff --git a/tests/PHPUnit/Integration/EcommerceOrderWithItemsTest.php b/tests/PHPUnit/Integration/EcommerceOrderWithItemsTest.php
index 89eaf8b7f4b4bb74b2e828bdcf11e1f6ea32b89c..0de25f5e4b9188d38f56cb698bb59d68f44c8029 100755
--- a/tests/PHPUnit/Integration/EcommerceOrderWithItemsTest.php
+++ b/tests/PHPUnit/Integration/EcommerceOrderWithItemsTest.php
@@ -6,6 +6,7 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 use Piwik\Piwik;
+use Piwik\Date;
 
 /**
  * Tests API methods after ecommerce orders are tracked.
@@ -157,7 +158,7 @@ class Test_Piwik_Integration_EcommerceOrderWithItems extends IntegrationTestCase
 
                                 // test Live! output is OK also for the visit that just bought something (other visits leave an abandoned cart)
                                 array('Live.getLastVisitsDetails', array('idSite'  => $idSite,
-                                                                         'date'    => Piwik_Date::factory($dateTime)->addHour(30.65)->getDatetime(),
+                                                                         'date'    => Date::factory($dateTime)->addHour(30.65)->getDatetime(),
                                                                          'periods' => array('day'), 'testSuffix' => '_LiveEcommerceStatusOrdered')),
 
                                 // test API.get method
diff --git a/tests/PHPUnit/Integration/PeriodIsRange_DateIsLastN_MetadataAndNormalAPITest.php b/tests/PHPUnit/Integration/PeriodIsRange_DateIsLastN_MetadataAndNormalAPITest.php
index e8dd0e63bd7b51df270c86e344c83bb6dfc55b06..88d2c5bf766f14abeaeac5f25e63e1feb9bd0403 100755
--- a/tests/PHPUnit/Integration/PeriodIsRange_DateIsLastN_MetadataAndNormalAPITest.php
+++ b/tests/PHPUnit/Integration/PeriodIsRange_DateIsLastN_MetadataAndNormalAPITest.php
@@ -5,6 +5,7 @@
  * @link    http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Date;
 
 /**
  * test Metadata API + period=range&date=lastN
@@ -24,7 +25,7 @@ class Test_Piwik_Integration_PeriodIsRange_DateIsLastN_MetadataAndNormalAPI exte
             return;
         }
 
-        self::$fixture->dateTime = Piwik_Date::factory('now')->getDateTime();
+        self::$fixture->dateTime = Date::factory('now')->getDateTime();
         parent::setUpBeforeClass();
     }
 
@@ -75,8 +76,8 @@ class Test_Piwik_Integration_PeriodIsRange_DateIsLastN_MetadataAndNormalAPI exte
         );
         $dates = array(
             'last7',
-            Piwik_Date::factory('now')->subDay(6)->toString() . ',today',
-            Piwik_Date::factory('now')->subDay(6)->toString() . ',now',
+            Date::factory('now')->subDay(6)->toString() . ',today',
+            Date::factory('now')->subDay(6)->toString() . ',now',
         );
 
         $result = array();
diff --git a/tests/PHPUnit/IntegrationTestCase.php b/tests/PHPUnit/IntegrationTestCase.php
index fff5efcbcd4739f98991b7ab077e44989a53180a..6385057d3bc69086e36b269b7c410a8779018164 100755
--- a/tests/PHPUnit/IntegrationTestCase.php
+++ b/tests/PHPUnit/IntegrationTestCase.php
@@ -5,11 +5,15 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\ArchiveProcessor\Rules;
 use Piwik\Config;
+use Piwik\DataAccess\ArchiveTableCreator;
+use Piwik\DataTable\Manager;
 use Piwik\Piwik;
 use Piwik\Common;
 use Piwik\Access;
 use Piwik\Site;
+use Piwik\Translate;
 
 require_once PIWIK_INCLUDE_PATH . '/libs/PiwikTracker/PiwikTracker.php';
 
@@ -74,7 +78,7 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase
      */
     protected static function installAndLoadPlugins($installPlugins)
     {
-        $pluginsManager = PluginsManager::getInstance();
+        $pluginsManager = \Piwik\PluginsManager::getInstance();
         $plugins = $pluginsManager->readPluginsDirectory();
 
         $pluginsManager->loadPlugins($plugins);
@@ -86,7 +90,7 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase
 
     public static function loadAllPlugins()
     {
-        $pluginsManager = PluginsManager::getInstance();
+        $pluginsManager = \Piwik\PluginsManager::getInstance();
         $pluginsToLoad = Config::getInstance()->Plugins['Plugins'];
         $pluginsToLoad[] = 'DevicesDetection';
         
@@ -96,11 +100,11 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase
     public static function unloadAllPlugins()
     {
         try {
-            $plugins = PluginsManager::getInstance()->getLoadedPlugins();
+            $plugins = \Piwik\PluginsManager::getInstance()->getLoadedPlugins();
             foreach ($plugins AS $plugin) {
                 $plugin->uninstall();
             }
-            PluginsManager::getInstance()->unloadPlugins();
+            \Piwik\PluginsManager::getInstance()->unloadPlugins();
         } catch (Exception $e) {
         }
     }
@@ -156,7 +160,7 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase
             Piwik::createTables();
             Piwik::createLogObject();
 
-            PluginsManager::getInstance()->loadPlugins(array());
+            \Piwik\PluginsManager::getInstance()->loadPlugins(array());
         } catch (Exception $e) {
             self::fail("TEST INITIALIZATION FAILED: " . $e->getMessage() . "\n" . $e->getTraceAsString());
         }
@@ -182,7 +186,7 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase
         $_SERVER['HTTP_REFERER'] = '';
 
         // Make sure translations are loaded to check messages in English
-        Piwik_Translate::getInstance()->reloadLanguage('en');
+        Translate::getInstance()->reloadLanguage('en');
         Piwik_LanguagesManager_API::getInstance()->setLanguageForUser('superUserLogin', 'en');
 
         // List of Modules, or Module.Method that should not be called as part of the XML output compare
@@ -205,7 +209,7 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase
         Piwik::$piwikUrlCache = null;
         IntegrationTestCase::unloadAllPlugins();
 /*
-        $plugins = PluginsManager::getInstance()->getLoadedPlugins();
+        $plugins = \Piwik\PluginsManager::getInstance()->getLoadedPlugins();
         foreach ($plugins AS $plugin) {
             if ($dropDatabase) {
                 try {
@@ -215,21 +219,21 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase
                 }
             }
         }
-        PluginsManager::getInstance()->unloadPlugins();*/
+        \Piwik\PluginsManager::getInstance()->unloadPlugins();*/
         if ($dropDatabase) {
             Piwik::dropDatabase();
         }
-        Piwik_DataTable_Manager::getInstance()->deleteAll();
+        Manager::getInstance()->deleteAll();
         Piwik_Option::getInstance()->clearCache();
         Site::clearCache();
         Piwik_Tracker_Cache::deleteTrackerCache();
         Config::getInstance()->clear();
-        Piwik_DataAccess_ArchiveTableCreator::clear();
+        ArchiveTableCreator::clear();
         Piwik_PDFReports_API::$cache = array();
         Zend_Registry::_unsetInstance();
 
         $_GET = $_REQUEST = array();
-        Piwik_Translate::getInstance()->unloadEnglishTranslation();
+        Translate::getInstance()->unloadEnglishTranslation();
 
         // re-enable tag cloud shuffling
         Piwik_Visualization_Cloud::$debugDisableShuffle = true;
@@ -970,10 +974,10 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase
         $this->_setCallableApi($api);
 
         if (isset($params['disableArchiving']) && $params['disableArchiving'] === true) {
-            Piwik_ArchiveProcessor_Rules::$archivingDisabledByTests = true;
+            Rules::$archivingDisabledByTests = true;
             Config::getInstance()->General['browser_archiving_disabled_enforce'] = 1;
         } else {
-            Piwik_ArchiveProcessor_Rules::$archivingDisabledByTests = false;
+            Rules::$archivingDisabledByTests = false;
             Config::getInstance()->General['browser_archiving_disabled_enforce'] = 0;
         }
 
@@ -1043,8 +1047,8 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase
     {
         if ($this->lastLanguage != $langId) {
             $_GET['language'] = $langId;
-            Piwik_Translate::reset();
-            Piwik_Translate::getInstance()->reloadLanguage($langId);
+            Translate::reset();
+            Translate::getInstance()->reloadLanguage($langId);
         }
 
         $this->lastLanguage = $langId;
@@ -1127,11 +1131,11 @@ abstract class IntegrationTestCase extends PHPUnit_Framework_TestCase
      */
     public static function deleteArchiveTables()
     {
-        foreach (Piwik_DataAccess_ArchiveTableCreator::getTablesArchivesInstalled() as $table) {
+        foreach (ArchiveTableCreator::getTablesArchivesInstalled() as $table) {
             Piwik_Query("DROP TABLE IF EXISTS $table");
         }
 
-        Piwik_DataAccess_ArchiveTableCreator::refreshTableList($forceReload = true);
+        ArchiveTableCreator::refreshTableList($forceReload = true);
     }
 
 }
diff --git a/tests/PHPUnit/Plugins/ActionsTest.php b/tests/PHPUnit/Plugins/ActionsTest.php
index ce3acfcf6e91d8936f9ff8a780de1c0dd4c98dc6..cf89fe53173021c447ea91d0443410bd7eadd634 100644
--- a/tests/PHPUnit/Plugins/ActionsTest.php
+++ b/tests/PHPUnit/Plugins/ActionsTest.php
@@ -5,18 +5,20 @@
  * @link    http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Translate;
+
 require_once 'Actions/Actions.php';
 
 class ActionsTests extends PHPUnit_Framework_TestCase
 {
     public function setUp()
     {
-        Piwik_Translate::getInstance()->loadEnglishTranslation();
+        Translate::getInstance()->loadEnglishTranslation();
     }
 
     public function tearDown()
     {
-        Piwik_Translate::getInstance()->unloadEnglishTranslation();
+        Translate::getInstance()->unloadEnglishTranslation();
     }
 
     public function getActionNameTestData()
diff --git a/tests/PHPUnit/Plugins/MobileMessagingTest.php b/tests/PHPUnit/Plugins/MobileMessagingTest.php
index 75c3b8599817661d59093fd705220e9e001913d8..29620e62454415a46b0440cf63a82df5dad3d10d 100644
--- a/tests/PHPUnit/Plugins/MobileMessagingTest.php
+++ b/tests/PHPUnit/Plugins/MobileMessagingTest.php
@@ -24,8 +24,8 @@ class MobileMessagingTest extends DatabaseTestCase
 
         $this->idSiteAccess = Piwik_SitesManager_API::getInstance()->addSite("test", "http://test");
 
-        PluginsManager::getInstance()->loadPlugins(array('PDFReports', 'MobileMessaging', 'MultiSites'));
-        PluginsManager::getInstance()->installLoadedPlugins();
+        \Piwik\PluginsManager::getInstance()->loadPlugins(array('PDFReports', 'MobileMessaging', 'MultiSites'));
+        \Piwik\PluginsManager::getInstance()->installLoadedPlugins();
     }
 
 
@@ -38,8 +38,8 @@ class MobileMessagingTest extends DatabaseTestCase
     public function testWarnUserViaSMSMultiSitesDeactivated()
     {
         // safety net
-        PluginsManager::getInstance()->loadPlugins(array('PDFReports', 'MobileMessaging'));
-        $this->assertFalse(PluginsManager::getInstance()->isPluginActivated('MultiSites'));
+        \Piwik\PluginsManager::getInstance()->loadPlugins(array('PDFReports', 'MobileMessaging'));
+        $this->assertFalse(\Piwik\PluginsManager::getInstance()->isPluginActivated('MultiSites'));
 
         $PdfReportsAPIInstance = Piwik_PDFReports_API::getInstance();
         $reportId = $PdfReportsAPIInstance->addReport(
diff --git a/tests/PHPUnit/Plugins/MultiSitesTest.php b/tests/PHPUnit/Plugins/MultiSitesTest.php
index fffe204f6d1005b6650e2892f0e5992eeeeae288..63d952c8a67caafd9328f3607694db17635a0d1b 100644
--- a/tests/PHPUnit/Plugins/MultiSitesTest.php
+++ b/tests/PHPUnit/Plugins/MultiSitesTest.php
@@ -21,8 +21,8 @@ class MultiSitesTest extends DatabaseTestCase
 
         $this->idSiteAccess = Piwik_SitesManager_API::getInstance()->addSite("test", "http://test");
 
-        PluginsManager::getInstance()->loadPlugins(array('MultiSites', 'VisitsSummary', 'Actions'));
-        PluginsManager::getInstance()->installLoadedPlugins();
+        \Piwik\PluginsManager::getInstance()->loadPlugins(array('MultiSites', 'VisitsSummary', 'Actions'));
+        \Piwik\PluginsManager::getInstance()->installLoadedPlugins();
     }
 
 
diff --git a/tests/PHPUnit/Plugins/PDFReportsTest.php b/tests/PHPUnit/Plugins/PDFReportsTest.php
index e2bf0d72a66d64eb98bbd35cdf2fc937582883f6..7d2fc3edfd4868d028f15e933872dfe02bec541f 100644
--- a/tests/PHPUnit/Plugins/PDFReportsTest.php
+++ b/tests/PHPUnit/Plugins/PDFReportsTest.php
@@ -20,8 +20,8 @@ class PDFReportsTest extends DatabaseTestCase
 
         // setup the access layer
         self::setSuperUser();
-        PluginsManager::getInstance()->loadPlugins(array('API', 'UserCountry', 'PDFReports', 'MobileMessaging'));
-        PluginsManager::getInstance()->installLoadedPlugins();
+        \Piwik\PluginsManager::getInstance()->loadPlugins(array('API', 'UserCountry', 'PDFReports', 'MobileMessaging'));
+        \Piwik\PluginsManager::getInstance()->installLoadedPlugins();
 
         Piwik_SitesManager_API::getInstance()->addSite("Test", array("http://piwik.net"));
 
@@ -194,7 +194,7 @@ class PDFReportsTest extends DatabaseTestCase
     public function testGetTopMenuTranslationKeyMobileMessagingInactive()
     {
         // unload MobileMessaging plugin
-        PluginsManager::getInstance()->loadPlugins(array('PDFReports'));
+        \Piwik\PluginsManager::getInstance()->loadPlugins(array('PDFReports'));
 
         $pdfReportPlugin = new Piwik_PDFReports();
         $this->assertEquals(
diff --git a/tests/PHPUnit/Plugins/PrivacyManagerTest.php b/tests/PHPUnit/Plugins/PrivacyManagerTest.php
index 08f12fe06670acd65a4678a7733947250c04eec4..c9cdbf86849a8e93d396d0a46f5fd3525806ee3b 100755
--- a/tests/PHPUnit/Plugins/PrivacyManagerTest.php
+++ b/tests/PHPUnit/Plugins/PrivacyManagerTest.php
@@ -6,9 +6,13 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 use Piwik\Archive;
+use Piwik\ArchiveProcessor\Rules;
 use Piwik\Config;
+use Piwik\DataAccess\ArchiveTableCreator;
+use Piwik\DataTable\Manager;
 use Piwik\Piwik;
 use Piwik\Common;
+use Piwik\Date;
 use Piwik\Site;
 
 require_once 'PrivacyManager/PrivacyManager.php';
@@ -50,12 +54,12 @@ class PrivacyManagerTest extends IntegrationTestCase
 
         // Temporarily disable the purge of old archives so that getNumeric('nb_visits')
         // in _addReportData does not trigger the data purge of data we've just imported
-        Piwik_ArchiveProcessor_Rules::$purgeDisabledByTests = false;
+        Rules::$purgeDisabledByTests = false;
 
         self::_addLogData();
         self::_addReportData();
 
-        Piwik_ArchiveProcessor_Rules::$purgeDisabledByTests = true;
+        Rules::$purgeDisabledByTests = true;
 
         self::$dbData = self::getDbTablesWithData();
     }
@@ -70,10 +74,10 @@ class PrivacyManagerTest extends IntegrationTestCase
 
         self::restoreDbTables(self::$dbData);
 
-        $dateTime = Piwik_Date::factory(self::$dateTime);
+        $dateTime = Date::factory(self::$dateTime);
 
         // purging depends upon today's date, so 'older_than' parts must be dependent upon today
-        $today = Piwik_Date::factory('today');
+        $today = Date::factory('today');
         $daysSinceToday = ($today->getTimestamp() - $dateTime->getTimestamp()) / (24 * 60 * 60);
 
         $monthsSinceToday = 0;
@@ -106,11 +110,11 @@ class PrivacyManagerTest extends IntegrationTestCase
     public function tearDown()
     {
         parent::tearDown();
-        Piwik_DataTable_Manager::getInstance()->deleteAll();
+        Manager::getInstance()->deleteAll();
         Piwik_Option::getInstance()->clearCache();
         Site::clearCache();
         Piwik_Tracker_Cache::deleteTrackerCache();
-        Piwik_DataAccess_ArchiveTableCreator::clear();
+        ArchiveTableCreator::clear();
 
         $tempTableName = Common::prefixTable(Piwik_PrivacyManager_LogDataPurger::TEMP_TABLE_NAME);
         Piwik_Query("DROP TABLE IF EXISTS " . $tempTableName);
@@ -159,7 +163,7 @@ class PrivacyManagerTest extends IntegrationTestCase
      */
     public function testPurgeDataNotTimeToRun()
     {
-        $yesterdaySecs = Piwik_Date::factory('yesterday')->getTimestamp();
+        $yesterdaySecs = Date::factory('yesterday')->getTimestamp();
 
         Piwik_SetOption(Piwik_PrivacyManager::OPTION_LAST_DELETE_PIWIK_LOGS_INITIAL, 1);
         Piwik_SetOption(Piwik_PrivacyManager::OPTION_LAST_DELETE_PIWIK_LOGS, $yesterdaySecs);
@@ -256,7 +260,7 @@ class PrivacyManagerTest extends IntegrationTestCase
     public function testPurgeDataDeleteLogsNoData()
     {
         Piwik::truncateAllTables();
-        foreach (Piwik_DataAccess_ArchiveTableCreator::getTablesArchivesInstalled() as $table) {
+        foreach (ArchiveTableCreator::getTablesArchivesInstalled() as $table) {
             Piwik_Exec("DROP TABLE $table");
         }
 
@@ -625,7 +629,7 @@ class PrivacyManagerTest extends IntegrationTestCase
         //   - http://whatever.com/_{$daysSinceLastVisit}
         //   - http://whatever.com/42/{$daysSinceLastVisit}
 
-        $start = Piwik_Date::factory(self::$dateTime);
+        $start = Date::factory(self::$dateTime);
         self::$idSite = Test_Piwik_BaseFixture::createWebsite('2012-01-01', $ecommerce = 1);
         $idGoal = Piwik_Goals_API::getInstance()->addGoal(self::$idSite, 'match all', 'url', 'http', 'contains');
 
@@ -658,7 +662,7 @@ class PrivacyManagerTest extends IntegrationTestCase
 
     protected static function _addReportData()
     {
-        $date = Piwik_Date::factory(self::$dateTime);
+        $date = Date::factory(self::$dateTime);
 
         $archive = Archive::build(self::$idSite, 'year', $date);
 
@@ -685,7 +689,7 @@ class PrivacyManagerTest extends IntegrationTestCase
             self::$idSite, 'day', '2012-01-14', 'browserCode==FF');
 
         // add range within January
-        $rangeEnd = Piwik_Date::factory('2012-01-29');
+        $rangeEnd = Date::factory('2012-01-29');
         $rangeStart = $rangeEnd->subDay(1);
         $range = $rangeStart->toString('Y-m-d') . "," . $rangeEnd->toString('Y-m-d');
 
@@ -833,7 +837,7 @@ class PrivacyManagerTest extends IntegrationTestCase
 
     protected function _setTimeToRun()
     {
-        $lastDateSecs = Piwik_Date::factory('today')->subDay(8)->getTimestamp();
+        $lastDateSecs = Date::factory('today')->subDay(8)->getTimestamp();
 
         Piwik_SetOption(Piwik_PrivacyManager::OPTION_LAST_DELETE_PIWIK_LOGS_INITIAL, 1);
         Piwik_SetOption(Piwik_PrivacyManager::OPTION_LAST_DELETE_PIWIK_LOGS, $lastDateSecs);
diff --git a/tests/PHPUnit/Plugins/SEOTest.php b/tests/PHPUnit/Plugins/SEOTest.php
index 23010423a1be225e8c331b8af477d2a2be56a0a3..cf4c7d1ff514f8ccfce74b884ebcf31d5c3afe81 100644
--- a/tests/PHPUnit/Plugins/SEOTest.php
+++ b/tests/PHPUnit/Plugins/SEOTest.php
@@ -6,6 +6,7 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 use Piwik\Access;
+use Piwik\DataTable\Renderer;
 
 class SEOTest extends PHPUnit_Framework_TestCase
 {
@@ -45,7 +46,7 @@ class SEOTest extends PHPUnit_Framework_TestCase
         } catch(Exception $e) {
             $this->markTestSkipped('A SEO http request failed, Skipping this test for now. Error was: '.$e->getMessage());
         }
-        $renderer = Piwik_DataTable_Renderer::factory('php');
+        $renderer = Renderer::factory('php');
         $renderer->setSerialize(false);
         $ranks = $renderer->render($dataTable);
         foreach ($ranks as $rank) {
diff --git a/tests/PHPUnit/Plugins/SegmentEditorTest.php b/tests/PHPUnit/Plugins/SegmentEditorTest.php
index f379f5b0962686fa60ee766366a22bcb2c2d34f2..e35ffe7b21297e0567c767eb2dbb8fe11a4434f4 100644
--- a/tests/PHPUnit/Plugins/SegmentEditorTest.php
+++ b/tests/PHPUnit/Plugins/SegmentEditorTest.php
@@ -1,21 +1,23 @@
 <?php
-use Piwik\Piwik;
-use Piwik\Access;
-
 /**
  * Piwik - Open source web analytics
  *
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+use Piwik\Piwik;
+use Piwik\Access;
+use Piwik\Date;
+
+
 class SegmentEditorTest extends DatabaseTestCase
 {
     public function setUp()
     {
         parent::setUp();
 
-        PluginsManager::getInstance()->loadPlugin('SegmentEditor');
-        PluginsManager::getInstance()->installLoadedPlugins();
+        \Piwik\PluginsManager::getInstance()->loadPlugin('SegmentEditor');
+        \Piwik\PluginsManager::getInstance()->installLoadedPlugins();
 
         // setup the access layer
         $pseudoMockAccess = new FakeAccess;
@@ -123,8 +125,8 @@ class SegmentEditorTest extends DatabaseTestCase
             'enable_only_idsite' => '0',
             'enable_all_users' => '0',
             'auto_archive' => '0',
-            'ts_last_edit' => Piwik_Date::now()->getDatetime(),
-            'ts_created' => Piwik_Date::now()->getDatetime(),
+            'ts_last_edit' => Date::now()->getDatetime(),
+            'ts_created' => Date::now()->getDatetime(),
             'login' => Piwik::getCurrentUserLogin(),
             'deleted' => '0',
         );
diff --git a/tests/PHPUnit/Plugins/UsersManagerTest.php b/tests/PHPUnit/Plugins/UsersManagerTest.php
index ce0423d463e40a4592f959ea0d7dfe3770fd4bc6..eb37aafd76a4348045bb573258344d7638c50781 100644
--- a/tests/PHPUnit/Plugins/UsersManagerTest.php
+++ b/tests/PHPUnit/Plugins/UsersManagerTest.php
@@ -14,8 +14,8 @@ class UsersManagerTest extends DatabaseTestCase
     {
         parent::setUp();
 
-        PluginsManager::getInstance()->loadPlugin('UsersManager');
-        PluginsManager::getInstance()->installLoadedPlugins();
+        \Piwik\PluginsManager::getInstance()->loadPlugin('UsersManager');
+        \Piwik\PluginsManager::getInstance()->installLoadedPlugins();
 
         // setup the access layer
         $pseudoMockAccess = new FakeAccess;
diff --git a/tests/PHPUnit/bootstrap.php b/tests/PHPUnit/bootstrap.php
index 67d4e43382bc5b8f713f29557fd8b8f64feeec79..2aacac155bdd9e0d7ed2e8446d82f892bb05fb97 100644
--- a/tests/PHPUnit/bootstrap.php
+++ b/tests/PHPUnit/bootstrap.php
@@ -54,6 +54,7 @@ if ($useXhprof) {
 require_once PIWIK_INCLUDE_PATH . '/libs/upgradephp/upgrade.php';
 require_once PIWIK_INCLUDE_PATH . '/core/testMinimumPhpVersion.php';
 require_once PIWIK_INCLUDE_PATH . '/core/Loader.php';
+require_once PIWIK_INCLUDE_PATH . '/core/functions.php';
 require_once PIWIK_INCLUDE_PATH . '/core/FrontController.php';
 require_once PIWIK_INCLUDE_PATH . '/libs/spyc.php';
 require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/DatabaseTestCase.php';
diff --git a/tests/PHPUnit/proxy/index.php b/tests/PHPUnit/proxy/index.php
index 859ea8fb0490d24a5d2a80d1ce8a48cf4cd7a7c1..9ecf0050f68ceca9a406e5b80dbda92e54740a91 100644
--- a/tests/PHPUnit/proxy/index.php
+++ b/tests/PHPUnit/proxy/index.php
@@ -17,6 +17,7 @@ define('PIWIK_USER_PATH', PIWIK_INCLUDE_PATH);
 
 require_once PIWIK_INCLUDE_PATH . '/libs/upgradephp/upgrade.php';
 require_once PIWIK_INCLUDE_PATH . '/core/Loader.php';
+require_once PIWIK_INCLUDE_PATH . '/core/functions.php';
 require_once PIWIK_INCLUDE_PATH . '/core/EventDispatcher.php';
 
 Piwik_Visualization_Cloud::$debugDisableShuffle = true;
diff --git a/tests/PHPUnit/proxy/libs b/tests/PHPUnit/proxy/libs
deleted file mode 120000
index d63817ad19ed795c3b3543396defd9dabcbe63a8..0000000000000000000000000000000000000000
--- a/tests/PHPUnit/proxy/libs
+++ /dev/null
@@ -1 +0,0 @@
-../../../libs
\ No newline at end of file
diff --git a/tests/PHPUnit/proxy/piwik.php b/tests/PHPUnit/proxy/piwik.php
index 8c5fdb27e31d217867927eec9ea51c5c3ed87529..866038ba829eefbb35a0362d2105113afea97811 100755
--- a/tests/PHPUnit/proxy/piwik.php
+++ b/tests/PHPUnit/proxy/piwik.php
@@ -12,6 +12,7 @@
 // Wrapping the request inside ob_start() calls to ensure that the Test
 // calling us waits for the full request to process before unblocking
 use Piwik\Config;
+use Piwik\DataTable\Manager;
 use Piwik\Site;
 
 ob_start();
@@ -37,7 +38,7 @@ Config::getInstance()->Plugins_Tracker['Plugins_Tracker'] = $trackerPlugins;
 Piwik_UserCountry_LocationProvider_GeoIp::$geoIPDatabaseDir = 'tests/lib/geoip-files';
 
 Piwik_Tracker::setTestEnvironment();
-Piwik_DataTable_Manager::getInstance()->deleteAll();
+Manager::getInstance()->deleteAll();
 Piwik_Option::getInstance()->clearCache();
 Site::clearCache();
 Piwik_Tracker_Cache::deleteTrackerCache();
diff --git a/tests/PHPUnit/proxy/plugins b/tests/PHPUnit/proxy/plugins
deleted file mode 120000
index 842d50c3aea9eaf6575d7e23e360842154dfcab7..0000000000000000000000000000000000000000
--- a/tests/PHPUnit/proxy/plugins
+++ /dev/null
@@ -1 +0,0 @@
-../../../plugins
\ No newline at end of file
diff --git a/tests/PHPUnit/proxy/tests b/tests/PHPUnit/proxy/tests
deleted file mode 120000
index c25bddb6dd4666c6eb8cc92e33f1d60f64c3162b..0000000000000000000000000000000000000000
--- a/tests/PHPUnit/proxy/tests
+++ /dev/null
@@ -1 +0,0 @@
-../..
\ No newline at end of file