From 9f4ba4eea6c85a92b87fbad6f0556ee5d8551762 Mon Sep 17 00:00:00 2001
From: Thomas Steur <thomas.steur@googlemail.com>
Date: Mon, 13 Oct 2014 04:21:24 +0200
Subject: [PATCH] refs #5940 moved files into a subfolder framework, added
 autoloader to remove duplicated code to load autoload.php and to be able to
 register more autoloaders (eg for test files) on demand. This I got read of
 many includes that had to be updated all the time and that had to be updated
 all the time when moving iles

---
 CHANGELOG.md                                  |  11 +-
 console                                       |   6 +-
 core/Loader.php                               |  47 +++++
 index.php                                     |   6 +-
 js/tracker.php                                |   3 +-
 misc/others/cli-script-bootstrap.php          |   5 +-
 .../tests/Integration/RowEvolutionTest.php    |   4 +-
 .../API/tests/Integration/RssRendererTest.php |   4 +-
 .../tests/Fixtures/TwoVisitsWithContents.php  |   2 +-
 .../Contents/tests/System/ContentsTest.php    |   2 +-
 .../Commands/TestsSetupFixture.php            |   7 +-
 .../Integration/UpdateCommunicationTest.php   |   2 +-
 .../Integration/UpdateCommunicationTest.php   |   2 +-
 .../tests/Commands/InfoTest.php               |   2 +-
 .../SetNumberOfCustomVariablesTest.php        |   2 +-
 .../Fixtures/VisitWithManyCustomVariables.php |   2 +-
 .../tests/Integration/CustomVariablesTest.php |   2 +-
 .../tests/Integration/ModelTest.php           |   2 +-
 .../System/CustomVariablesSystemTest.php      |   2 +-
 .../Fixtures/SimpleFixtureTrackFewVisits.php  |   2 +-
 .../tests/Integration/SimpleTest.php          |   2 +-
 .../tests/System/SimpleSystemTest.php         |   2 +-
 plugins/Goals/tests/Integration/APITest.php   |   4 +-
 .../SomeVisitsDifferentPathsOnTwoDays.php     |   2 +-
 .../Insights/tests/Integration/ApiTest.php    |   4 +-
 .../Insights/tests/Integration/ModelTest.php  |   2 +-
 .../LeftMenu/tests/Integration/APITest.php    |   2 +-
 plugins/Live/tests/Integration/APITest.php    |   4 +-
 plugins/Login/tests/Integration/LoginTest.php |   2 +-
 .../tests/Integration/MobileMessagingTest.php |   2 +-
 .../tests/Integration/MultiSitesTest.php      |   2 +-
 .../Integration/PrivacyManagerConfigTest.php  |   2 +-
 .../tests/Integration/PrivacyManagerTest.php  |   2 +-
 .../tests/Integration/ApiTest.php             |   2 +-
 .../Integration/ScheduledReportsTest.php      |   4 +-
 .../tests/Integration/SegmentEditorTest.php   |   2 +-
 .../tests/Integration/SiteUrlsTest.php        |   2 +-
 .../tests/Integration/SitesManagerTest.php    |   2 +-
 .../tests/Fixtures/LanguageFixture.php        |   2 +-
 .../tests/System/GetLanguageSystemTest.php    |   2 +-
 .../tests/Integration/APITest.php             |   4 +-
 .../tests/Integration/UserPreferencesTest.php |   4 +-
 .../tests/Integration/UsersManagerTest.php    |   2 +-
 tests/PHPUnit/BenchmarkTestCase.php           | 102 +---------
 .../Benchmarks/ArchiveQueryBenchmark.php      |   3 +-
 .../Benchmarks/ArchivingProcessBenchmark.php  |   3 +-
 .../ManyThousandSitesOneVisitEach.php         |   3 +-
 ...neSiteThousandsOfDistinctUrlsOverMonth.php |   3 +-
 .../OneSiteTwelveThousandVisitsOneYear.php    |   3 +-
 .../ThousandSitesTwelveVisitsEachOneDay.php   |   4 +-
 .../Benchmarks/MultiSitesBenchmark.php        |   3 +-
 tests/PHPUnit/Benchmarks/TrackerBenchmark.php |   3 +-
 tests/PHPUnit/ConsoleCommandTestCase.php      |  46 +----
 tests/PHPUnit/DatabaseTestCase.php            |   6 +-
 tests/PHPUnit/FakeAccess.php                  | 168 +---------------
 tests/PHPUnit/Fixture.php                     |  10 +-
 .../FewVisitsWithSetVisitorIdAndUserId.php    |   2 +-
 tests/PHPUnit/Fixtures/InvalidVisits.php      |   2 +-
 .../Fixtures/ManySitesImportedLogs.php        |   4 +-
 .../ManySitesImportedLogsWithXssAttempts.php  |   2 +-
 .../PHPUnit/Fixtures/ManyVisitsWithGeoIP.php  |   7 +-
 .../ManyVisitsWithMockLocationProvider.php    |   7 +-
 ...VisitsWithSubDirReferrersAndCustomVars.php |   2 +-
 tests/PHPUnit/Fixtures/OmniFixture.php        |   4 +-
 .../Fixtures/OneVisitSeveralPageViews.php     |   2 +-
 .../OneVisitWithAbnormalPageviewUrls.php      |   2 +-
 .../PHPUnit/Fixtures/OneVisitorTwoVisits.php  |   2 +-
 .../Fixtures/SomeVisitsAllConversions.php     |   2 +-
 ...sCustomVariablesCampaignsNotHeuristics.php |   2 +-
 ...SomeVisitsManyPageviewsWithTransitions.php |   2 +-
 .../Fixtures/SomeVisitsWithLongUrls.php       |   2 +-
 .../SomeVisitsWithNonUnicodePageTitles.php    |   2 +-
 tests/PHPUnit/Fixtures/SqlDump.php            |   2 +-
 .../Fixtures/ThreeGoalsOnePageview.php        |   2 +-
 ...ThreeSitesWithManyVisitsWithSiteSearch.php |   2 +-
 .../Fixtures/ThreeSitesWithSharedVisitors.php |   2 +-
 .../TwoSitesEcommerceOrderWithItems.php       |   2 +-
 ...erSeveralDaysWithSearchEngineReferrers.php |   2 +-
 .../TwoSitesTwoVisitorsDifferentDays.php      |   2 +-
 .../PHPUnit/Fixtures/TwoSitesVisitsInPast.php |   2 +-
 .../Fixtures/TwoSitesWithAnnotations.php      |   2 +-
 .../Fixtures/TwoVisitsNoKeywordWithBot.php    |   2 +-
 .../Fixtures/TwoVisitsWithCustomEvents.php    |   2 +-
 .../Fixtures/TwoVisitsWithCustomVariables.php |   2 +-
 tests/PHPUnit/Fixtures/UITestFixture.php      |   2 +-
 .../VisitOverSeveralDaysImportedLogs.php      |   2 +-
 .../Fixtures/VisitsInDifferentTimezones.php   |   2 +-
 .../Fixtures/VisitsOverSeveralDays.php        |   2 +-
 .../VisitsTwoWebsitesWithAdditionalVisits.php |   2 +-
 tests/PHPUnit/{Impl => Framework}/Fixture.php |  20 +-
 tests/PHPUnit/Framework/Mock/FakeAccess.php   | 181 ++++++++++++++++++
 .../Mock/LocationProvider.php}                |   5 +-
 .../Mock/PiwikOption.php}                     |   4 +-
 tests/PHPUnit/Framework/OverrideLogin.php     |  19 ++
 .../Framework/TestCase/BenchmarkTestCase.php  | 116 +++++++++++
 .../TestCase/ConsoleCommandTestCase.php       |  56 ++++++
 .../TestCase}/IntegrationTestCase.php         |   3 +-
 .../TestCase}/SystemTestCase.php              |  23 ++-
 .../TestRequest}/ApiTestConfig.php            |   4 +-
 .../TestRequest/Collection.php}               |   6 +-
 .../TestRequest/Response.php}                 |  16 +-
 tests/PHPUnit/Integration/AccessTest.php      |   2 +-
 .../Integration/ArchiveProcessingTest.php     |   2 +-
 tests/PHPUnit/Integration/CliMultiTest.php    |   4 +-
 .../CronArchive/SharedSiteIdsTest.php         |   2 +-
 tests/PHPUnit/Integration/DbTest.php          |   2 +-
 tests/PHPUnit/Integration/HttpTest.php        |   2 +-
 tests/PHPUnit/Integration/JsProxyTest.php     |   2 +-
 tests/PHPUnit/Integration/LogTest.php         |   2 +-
 tests/PHPUnit/Integration/OptionTest.php      |   2 +-
 tests/PHPUnit/Integration/PiwikTest.php       |   2 +-
 .../Integration/Plugin/SettingsTest.php       |   2 +-
 tests/PHPUnit/Integration/ReportTest.php      |   4 +-
 tests/PHPUnit/Integration/SegmentTest.php     |   2 +-
 .../Integration/ServeStaticFileTest.php       |   2 +-
 tests/PHPUnit/Integration/SqlTest.php         |   2 +-
 .../Integration/Tracker/ActionTest.php        |   2 +-
 tests/PHPUnit/Integration/Tracker/DbTest.php  |   2 +-
 .../Integration/Tracker/Visit2Test.php        |   4 +-
 .../PHPUnit/Integration/Tracker/VisitTest.php |   2 +-
 tests/PHPUnit/Integration/TrackerTest.php     |   4 +-
 .../Integration/TravisEnvironmentTest.php     |   2 +-
 tests/PHPUnit/Integration/UpdaterTest.php     |   4 +-
 .../Integration/ViewDataTable/ManagerTest.php |   2 +-
 tests/PHPUnit/Integration/WidgetsListTest.php |   4 +-
 tests/PHPUnit/IntegrationTestCase.php         |   8 +-
 tests/PHPUnit/System/AnnotationsTest.php      |   2 +-
 .../System/ApiGetReportMetadataTest.php       |   2 +-
 .../System/ApiGetReportMetadataYearTest.php   |   2 +-
 tests/PHPUnit/System/ArchiveCronTest.php      |   4 +-
 .../System/ArchiveInvalidationTest.php        |   2 +-
 tests/PHPUnit/System/ArchiveWebTest.php       |   4 +-
 tests/PHPUnit/System/AutoSuggestAPITest.php   |   4 +-
 .../System/BackwardsCompatibility1XTest.php   |   4 +-
 .../PHPUnit/System/BlobReportLimitingTest.php |   4 +-
 tests/PHPUnit/System/CsvExportTest.php        |   2 +-
 tests/PHPUnit/System/CustomEventsTest.php     |   2 +-
 .../System/EcommerceOrderWithItemsTest.php    |   2 +-
 tests/PHPUnit/System/FlattenReportsTest.php   |   2 +-
 tests/PHPUnit/System/ImportLogsTest.php       |   2 +-
 tests/PHPUnit/System/LabelFilterTest.php      |   2 +-
 .../System/ManyVisitorsOneWebsiteTest.php     |   4 +-
 .../System/MultipleSitesArchivingTest.php     |   4 +-
 tests/PHPUnit/System/NoVisitTest.php          |   2 +-
 tests/PHPUnit/System/NonUnicodeTest.php       |   2 +-
 .../OneVisitorLongUrlsTruncatedTest.php       |   2 +-
 .../OneVisitorNoKeywordSpecifiedTest.php      |   2 +-
 ...SeveralDaysDateRangeArchivingTestsTest.php |   2 +-
 ...itorOneWebsiteSeveralDaysDateRangeTest.php |   2 +-
 ...orSeveralDaysImportedInRandomOrderTest.php |   2 +-
 .../System/OneVisitorTwoVisitsTest.php        |   2 +-
 ...eVisitorTwoVisitsWithCookieSupportTest.php |   2 +-
 ...ngeDateIsLastNMetadataAndNormalAPITest.php |   2 +-
 .../PHPUnit/System/PivotByQueryParamTest.php  |   2 +-
 tests/PHPUnit/System/PrivacyManagerTest.php   |   4 +-
 tests/PHPUnit/System/PurgeDataTest.php        |   4 +-
 tests/PHPUnit/System/RowEvolutionTest.php     |   2 +-
 tests/PHPUnit/System/SiteSearchTest.php       |   2 +-
 tests/PHPUnit/System/TimezonesTest.php        |   2 +-
 ...ignsForceUsingVisitIdNotHeuristicsTest.php |   2 +-
 ...lsAllowMultipleConversionsPerVisitTest.php |   2 +-
 .../System/TrackerWindowLookBackTest.php      |   2 +-
 tests/PHPUnit/System/TransitionsTest.php      |   2 +-
 ...itesDifferentDaysArchivingDisabledTest.php |   2 +-
 ...woWebsitesDifferentDaysConversionsTest.php |   2 +-
 ...woVisitorsTwoWebsitesDifferentDaysTest.php |   2 +-
 ...WithCustomVariablesSegmentContainsTest.php |   2 +-
 ...VariablesSegmentMatchALLNoGoalDataTest.php |   2 +-
 ...ithCustomVariablesSegmentMatchNONETest.php |   4 +-
 ...omVariablesSegmentMatchVisitorTypeTest.php |   2 +-
 .../TwoVisitsWithCustomVariablesTest.php      |   2 +-
 tests/PHPUnit/System/UrlNormalizationTest.php |   2 +-
 .../PHPUnit/System/UserIdAndVisitorIdTest.php |   2 +-
 .../VisitsInPastInvalidateOldReportsTest.php  |   2 +-
 tests/PHPUnit/Unit/DeprecatedMethodsTest.php  |   5 +-
 tests/PHPUnit/Unit/TaskSchedulerTest.php      |   3 +-
 tests/PHPUnit/bootstrap.php                   |  17 +-
 tests/PHPUnit/proxy/includes.php              |   5 +-
 tests/resources/staticFileServer.php          |   4 +-
 179 files changed, 696 insertions(+), 585 deletions(-)
 create mode 100644 core/Loader.php
 rename tests/PHPUnit/{Impl => Framework}/Fixture.php (98%)
 create mode 100644 tests/PHPUnit/Framework/Mock/FakeAccess.php
 rename tests/PHPUnit/{MockLocationProvider.php => Framework/Mock/LocationProvider.php} (87%)
 rename tests/PHPUnit/{MockPiwikOption.php => Framework/Mock/PiwikOption.php} (88%)
 create mode 100644 tests/PHPUnit/Framework/OverrideLogin.php
 create mode 100755 tests/PHPUnit/Framework/TestCase/BenchmarkTestCase.php
 create mode 100644 tests/PHPUnit/Framework/TestCase/ConsoleCommandTestCase.php
 rename tests/PHPUnit/{Impl => Framework/TestCase}/IntegrationTestCase.php (96%)
 rename tests/PHPUnit/{Impl => Framework/TestCase}/SystemTestCase.php (96%)
 rename tests/PHPUnit/{Impl => Framework/TestRequest}/ApiTestConfig.php (98%)
 rename tests/PHPUnit/{Impl/TestRequestCollection.php => Framework/TestRequest/Collection.php} (99%)
 rename tests/PHPUnit/{Impl/TestRequestResponse.php => Framework/TestRequest/Response.php} (95%)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1f1561a585..9d875c96ac 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -18,10 +18,13 @@ This is a changelog for Piwik platform developers. All changes for our HTTP API'
 
 ### Deprecations
 * The `Piwik::setUserHasSuperUserAccess` method is deprecated, instead use Access::doAsSuperUser. This method will ensure that super user access is properly rescinded after the callback finishes.
-* The class is `\IntegrationTestCase` deprecated and will be removed from February 6th 2015. Use `\Piwik\Tests\Impl\SystemTestCase` instead.
-* The class is `\DatabaseTestCase` deprecated and will be removed from February 6th 2015. Use `\Piwik\Tests\Impl\IntegrationTestCase` instead.
-* The class is `\Piwik\Tests\Fixture` deprecated and will be removed from February 6th 2015. Use `\Piwik\Tests\Impl\Fixture` instead.
-* The class is `\Piwik\Tests\OverrideLogin` deprecated and will be removed from February 6ths 2015. Use `\Piwik\Tests\Impl\OverrideLogin` instead.
+* The class is `\IntegrationTestCase` deprecated and will be removed from February 6th 2015. Use `\Piwik\Tests\Framework\TestCase\SystemTestCase` instead.
+* The class is `\DatabaseTestCase` deprecated and will be removed from February 6th 2015. Use `\Piwik\Tests\Framework\TestCase\IntegrationTestCase` instead.
+* The class is `\BenchmarkTestCase` deprecated and will be removed from February 6th 2015. Use `\Piwik\Tests\Framework\TestCase\BenchmarkTestCase` instead.
+* The class is `\ConsoleCommandTestCase` deprecated and will be removed from February 6th 2015. Use `\Piwik\Tests\Framework\TestCase\ConsoleCommandTestCase` instead.
+* The class is `\FakeAccess` deprecated and will be removed from February 6th 2015. Use `\Piwik\Tests\Framework\Mock\FakeAccess` instead.
+* The class is `\Piwik\Tests\Fixture` deprecated and will be removed from February 6th 2015. Use `\Piwik\Tests\Framework\Fixture` instead.
+* The class is `\Piwik\Tests\OverrideLogin` deprecated and will be removed from February 6ths 2015. Use `\Piwik\Framework\Framework\OverrideLogin` instead.
 
 ### New API Features
 * The pivotBy and related query parameters can be used to pivot reports by another dimension. Read more about the new query parameters [here](http://developer.piwik.org/api-reference/reporting-api#optional-api-parameters).
diff --git a/console b/console
index 41b4ec5835..f0b25f3d8e 100755
--- a/console
+++ b/console
@@ -14,9 +14,9 @@ require_once PIWIK_INCLUDE_PATH . '/core/testMinimumPhpVersion.php';
 
 @date_default_timezone_set('UTC');
 
-require_once file_exists(PIWIK_INCLUDE_PATH . '/vendor/autoload.php')
-    ? PIWIK_INCLUDE_PATH . '/vendor/autoload.php' // Piwik is the main project
-    : PIWIK_INCLUDE_PATH . '/../../autoload.php'; // Piwik is installed as a dependency
+require_once PIWIK_INCLUDE_PATH . '/core/Loader.php';
+\Piwik\Loader::init();
+
 require_once PIWIK_INCLUDE_PATH . '/libs/upgradephp/upgrade.php';
 
 Piwik\Translate::loadEnglishTranslation();
diff --git a/core/Loader.php b/core/Loader.php
new file mode 100644
index 0000000000..932c89d5bd
--- /dev/null
+++ b/core/Loader.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ */
+
+namespace Piwik;
+
+/**
+ * Initializes the Composer Autoloader
+ * @package Piwik
+ */
+class Loader
+{
+    public static function init()
+    {
+        return self::getLoader();
+    }
+
+    /**
+     * @return \Composer\Autoload\ClassLoader
+     */
+    private static function getLoader()
+    {
+        if (file_exists(PIWIK_INCLUDE_PATH . '/vendor/autoload.php')) {
+            $path = PIWIK_INCLUDE_PATH . '/vendor/autoload.php'; // Piwik is the main project
+        } else {
+            $path = PIWIK_INCLUDE_PATH . '/../../autoload.php'; // Piwik is installed as a dependency
+        }
+
+        $loader = require $path;
+
+        return $loader;
+    }
+
+    public static function registerTestNamespace()
+    {
+        $prefix = 'Piwik\\Tests\\';
+        $paths  = PIWIK_INCLUDE_PATH . '/tests/PHPUnit';
+
+        $loader = self::getLoader();
+        $loader->addPsr4($prefix, $paths, $prepend = false);
+    }
+}
diff --git a/index.php b/index.php
index baee05066c..e142d64ea0 100644
--- a/index.php
+++ b/index.php
@@ -35,9 +35,9 @@ require_once PIWIK_INCLUDE_PATH . '/libs/upgradephp/upgrade.php';
 
 session_cache_limiter('nocache');
 @date_default_timezone_set('UTC');
-require_once file_exists(PIWIK_INCLUDE_PATH . '/vendor/autoload.php')
-    ? PIWIK_INCLUDE_PATH . '/vendor/autoload.php' // Piwik is the main project
-    : PIWIK_INCLUDE_PATH . '/../../autoload.php'; // Piwik is installed as a dependency
+
+require_once PIWIK_INCLUDE_PATH . '/core/Loader.php';
+\Piwik\Loader::init();
 
 if(!defined('PIWIK_PRINT_ERROR_BACKTRACE')) {
     define('PIWIK_PRINT_ERROR_BACKTRACE', false);
diff --git a/js/tracker.php b/js/tracker.php
index a8d768e6bc..ac85498cb9 100644
--- a/js/tracker.php
+++ b/js/tracker.php
@@ -27,7 +27,8 @@ define('PIWIK_DOCUMENT_ROOT', '..');
 define('PIWIK_USER_PATH', '..');
 
 require_once PIWIK_INCLUDE_PATH . '/libs/upgradephp/upgrade.php';
-require_once PIWIK_INCLUDE_PATH . '/vendor/autoload.php';
+require_once PIWIK_INCLUDE_PATH . '/core/Loader.php';
+\Piwik\Loader::init();
 
 $file = '../piwik.js';
 
diff --git a/misc/others/cli-script-bootstrap.php b/misc/others/cli-script-bootstrap.php
index bd1f7ea6ec..f26d45abcc 100644
--- a/misc/others/cli-script-bootstrap.php
+++ b/misc/others/cli-script-bootstrap.php
@@ -28,9 +28,8 @@ set_time_limit(0);
 
 require_once PIWIK_INCLUDE_PATH . '/libs/upgradephp/upgrade.php';
 require_once PIWIK_INCLUDE_PATH . '/core/testMinimumPhpVersion.php';
-require_once file_exists(PIWIK_INCLUDE_PATH . '/vendor/autoload.php')
-    ? PIWIK_INCLUDE_PATH . '/vendor/autoload.php' // Piwik is the main project
-    : PIWIK_INCLUDE_PATH . '/../../autoload.php'; // Piwik is installed as a dependency
+require_once PIWIK_INCLUDE_PATH . '/core/Loader.php';
+\Piwik\Loader::init();
 
 $GLOBALS['PIWIK_TRACKER_DEBUG'] = false;
 define('PIWIK_ENABLE_DISPATCH', false);
diff --git a/plugins/API/tests/Integration/RowEvolutionTest.php b/plugins/API/tests/Integration/RowEvolutionTest.php
index cb3dc66a99..b796562cac 100644
--- a/plugins/API/tests/Integration/RowEvolutionTest.php
+++ b/plugins/API/tests/Integration/RowEvolutionTest.php
@@ -9,8 +9,8 @@
 namespace Piwik\Plugins\API\tests\Integration;
 
 use Piwik\Plugins\API\RowEvolution;
-use Piwik\Tests\Impl\Fixture;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * @group API
diff --git a/plugins/API/tests/Integration/RssRendererTest.php b/plugins/API/tests/Integration/RssRendererTest.php
index 3011273d69..20ed016a61 100644
--- a/plugins/API/tests/Integration/RssRendererTest.php
+++ b/plugins/API/tests/Integration/RssRendererTest.php
@@ -11,8 +11,8 @@ namespace Piwik\Plugins\API\tests\Integration;
 use Piwik\Access;
 use Piwik\DataTable;
 use Piwik\Plugins\API\Renderer\Rss;
-use Piwik\Tests\Impl\Fixture;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * @group Plugin
diff --git a/plugins/Contents/tests/Fixtures/TwoVisitsWithContents.php b/plugins/Contents/tests/Fixtures/TwoVisitsWithContents.php
index 9d4c08746a..92a6e5e319 100644
--- a/plugins/Contents/tests/Fixtures/TwoVisitsWithContents.php
+++ b/plugins/Contents/tests/Fixtures/TwoVisitsWithContents.php
@@ -9,7 +9,7 @@ namespace Piwik\Plugins\Contents\tests\Fixtures;
 
 use Piwik\Date;
 use Piwik\Plugins\Goals\API as APIGoals;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 use PiwikTracker;
 
 /**
diff --git a/plugins/Contents/tests/System/ContentsTest.php b/plugins/Contents/tests/System/ContentsTest.php
index c5304fb19e..4332217622 100644
--- a/plugins/Contents/tests/System/ContentsTest.php
+++ b/plugins/Contents/tests/System/ContentsTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Plugins\Contents\tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Plugins\Contents\tests\Fixtures\TwoVisitsWithContents;
 use Piwik\Translate;
 
diff --git a/plugins/CoreConsole/Commands/TestsSetupFixture.php b/plugins/CoreConsole/Commands/TestsSetupFixture.php
index 11f5761b93..fc3ccd4909 100644
--- a/plugins/CoreConsole/Commands/TestsSetupFixture.php
+++ b/plugins/CoreConsole/Commands/TestsSetupFixture.php
@@ -11,7 +11,7 @@ namespace Piwik\Plugins\CoreConsole\Commands;
 use Piwik\Config;
 use Piwik\Plugin\ConsoleCommand;
 use Piwik\Url;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputOption;
@@ -213,12 +213,11 @@ class TestsSetupFixture extends ConsoleCommand
 
     private function requireFixtureFiles(InputInterface $input)
     {
+        \Piwik\Loader::registerTestNamespace();
+
         require_once PIWIK_INCLUDE_PATH . '/libs/PiwikTracker/PiwikTracker.php';
         require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/FakeAccess.php';
         require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/TestingEnvironment.php';
-        require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/Impl/SystemTestCase.php';
-        require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/Impl/Fixture.php';
-        require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/Impl/IntegrationTestCase.php';
         require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/IntegrationTestCase.php';
         require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/Fixture.php';
 
diff --git a/plugins/CorePluginsAdmin/tests/Integration/UpdateCommunicationTest.php b/plugins/CorePluginsAdmin/tests/Integration/UpdateCommunicationTest.php
index 5743c42e46..0aeb99dae8 100644
--- a/plugins/CorePluginsAdmin/tests/Integration/UpdateCommunicationTest.php
+++ b/plugins/CorePluginsAdmin/tests/Integration/UpdateCommunicationTest.php
@@ -11,7 +11,7 @@ namespace Piwik\Plugins\CorePluginsAdmin\tests\Integration;
 use Piwik\Config;
 use Piwik\Option;
 use Piwik\Plugins\CorePluginsAdmin\UpdateCommunication;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * Class Plugins_CorePluginsAdmin_UpdateCommunicationTest
diff --git a/plugins/CoreUpdater/tests/Integration/UpdateCommunicationTest.php b/plugins/CoreUpdater/tests/Integration/UpdateCommunicationTest.php
index 10f408206f..8bda8a2699 100644
--- a/plugins/CoreUpdater/tests/Integration/UpdateCommunicationTest.php
+++ b/plugins/CoreUpdater/tests/Integration/UpdateCommunicationTest.php
@@ -13,7 +13,7 @@ use Piwik\Option;
 use Piwik\Plugins\CoreUpdater\UpdateCommunication;
 use Piwik\UpdateCheck;
 use Piwik\Version;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * Class Plugins_CoreUpdater_UpdateCommunicationTest
diff --git a/plugins/CustomVariables/tests/Commands/InfoTest.php b/plugins/CustomVariables/tests/Commands/InfoTest.php
index 455cdd10e2..fe9e1cc7e6 100644
--- a/plugins/CustomVariables/tests/Commands/InfoTest.php
+++ b/plugins/CustomVariables/tests/Commands/InfoTest.php
@@ -13,7 +13,7 @@ use Piwik\Plugins\CustomVariables\Commands\Info;
 use Piwik\Plugins\CustomVariables\Model;
 use Symfony\Component\Console\Application;
 use Symfony\Component\Console\Tester\CommandTester;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * @group CustomVariables
diff --git a/plugins/CustomVariables/tests/Commands/SetNumberOfCustomVariablesTest.php b/plugins/CustomVariables/tests/Commands/SetNumberOfCustomVariablesTest.php
index f48473b5e9..e70c3515bb 100644
--- a/plugins/CustomVariables/tests/Commands/SetNumberOfCustomVariablesTest.php
+++ b/plugins/CustomVariables/tests/Commands/SetNumberOfCustomVariablesTest.php
@@ -13,7 +13,7 @@ use Piwik\Plugins\CustomVariables\Commands\SetNumberOfCustomVariables;
 use Piwik\Plugins\CustomVariables\CustomVariables;
 use Symfony\Component\Console\Application;
 use Symfony\Component\Console\Tester\CommandTester;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * @group CustomVariables
diff --git a/plugins/CustomVariables/tests/Fixtures/VisitWithManyCustomVariables.php b/plugins/CustomVariables/tests/Fixtures/VisitWithManyCustomVariables.php
index 82b8129bbb..c1a75e0b26 100644
--- a/plugins/CustomVariables/tests/Fixtures/VisitWithManyCustomVariables.php
+++ b/plugins/CustomVariables/tests/Fixtures/VisitWithManyCustomVariables.php
@@ -9,7 +9,7 @@ namespace Piwik\Plugins\CustomVariables\tests\Fixtures;
 
 use Piwik\Plugins\CustomVariables\Model;
 use Piwik\Plugins\Goals\API;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds one site with two goals and tracks two visits with custom variables.
diff --git a/plugins/CustomVariables/tests/Integration/CustomVariablesTest.php b/plugins/CustomVariables/tests/Integration/CustomVariablesTest.php
index 5144dc4489..75832efe37 100644
--- a/plugins/CustomVariables/tests/Integration/CustomVariablesTest.php
+++ b/plugins/CustomVariables/tests/Integration/CustomVariablesTest.php
@@ -9,7 +9,7 @@
 namespace Piwik\Plugins\CustomVariables\tests;
 use Piwik\Plugins\CustomVariables\CustomVariables;
 use Piwik\Tracker\Cache;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * @group CustomVariables
diff --git a/plugins/CustomVariables/tests/Integration/ModelTest.php b/plugins/CustomVariables/tests/Integration/ModelTest.php
index 384d204478..128e5b09ef 100644
--- a/plugins/CustomVariables/tests/Integration/ModelTest.php
+++ b/plugins/CustomVariables/tests/Integration/ModelTest.php
@@ -9,7 +9,7 @@
 namespace Piwik\Plugins\CustomVariables\tests;
 use Piwik\Db;
 use Piwik\Plugins\CustomVariables\Model;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * @group CustomVariables
diff --git a/plugins/CustomVariables/tests/System/CustomVariablesSystemTest.php b/plugins/CustomVariables/tests/System/CustomVariablesSystemTest.php
index 00158a1e48..79c6f5ec43 100644
--- a/plugins/CustomVariables/tests/System/CustomVariablesSystemTest.php
+++ b/plugins/CustomVariables/tests/System/CustomVariablesSystemTest.php
@@ -8,7 +8,7 @@
 
 namespace Piwik\Plugins\CustomVariables\tests;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 
 /**
  * @group CustomVariables
diff --git a/plugins/ExamplePlugin/tests/Fixtures/SimpleFixtureTrackFewVisits.php b/plugins/ExamplePlugin/tests/Fixtures/SimpleFixtureTrackFewVisits.php
index 2c0b38d172..89d99a7005 100644
--- a/plugins/ExamplePlugin/tests/Fixtures/SimpleFixtureTrackFewVisits.php
+++ b/plugins/ExamplePlugin/tests/Fixtures/SimpleFixtureTrackFewVisits.php
@@ -8,7 +8,7 @@
 namespace Piwik\Plugins\ExamplePlugin\tests\Fixtures;
 
 use Piwik\Date;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Generates tracker testing data for our SimpleSystemTest
diff --git a/plugins/ExamplePlugin/tests/Integration/SimpleTest.php b/plugins/ExamplePlugin/tests/Integration/SimpleTest.php
index 01ff197cf8..3d8ac904f8 100644
--- a/plugins/ExamplePlugin/tests/Integration/SimpleTest.php
+++ b/plugins/ExamplePlugin/tests/Integration/SimpleTest.php
@@ -8,7 +8,7 @@
 
 namespace Piwik\Plugins\ExamplePlugin\tests\Integration;
 
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * @group ExamplePlugin
diff --git a/plugins/ExamplePlugin/tests/System/SimpleSystemTest.php b/plugins/ExamplePlugin/tests/System/SimpleSystemTest.php
index 873c4e4fbe..4594c3be4c 100644
--- a/plugins/ExamplePlugin/tests/System/SimpleSystemTest.php
+++ b/plugins/ExamplePlugin/tests/System/SimpleSystemTest.php
@@ -9,7 +9,7 @@
 namespace Piwik\Plugins\ExamplePlugin\tests\System;
 
 use Piwik\Plugins\ExamplePlugin\tests\fixtures\SimpleFixtureTrackFewVisits;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 
 /**
  * @group ExamplePlugin
diff --git a/plugins/Goals/tests/Integration/APITest.php b/plugins/Goals/tests/Integration/APITest.php
index bc3a960e83..8f64117039 100644
--- a/plugins/Goals/tests/Integration/APITest.php
+++ b/plugins/Goals/tests/Integration/APITest.php
@@ -11,8 +11,8 @@ namespace Piwik\Plugins\Goals\tests\Integration;
 use Piwik\Access;
 use Piwik\Piwik;
 use Piwik\Plugins\Goals\API;
-use Piwik\Tests\Impl\Fixture;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * @group Goals
diff --git a/plugins/Insights/tests/Fixtures/SomeVisitsDifferentPathsOnTwoDays.php b/plugins/Insights/tests/Fixtures/SomeVisitsDifferentPathsOnTwoDays.php
index 7041e6b573..e2a8e7f2c4 100644
--- a/plugins/Insights/tests/Fixtures/SomeVisitsDifferentPathsOnTwoDays.php
+++ b/plugins/Insights/tests/Fixtures/SomeVisitsDifferentPathsOnTwoDays.php
@@ -9,7 +9,7 @@
 namespace Piwik\Plugins\Insights\tests\Fixtures;
 
 use Piwik\Date;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds one website and tracks several visits from one visitor on
diff --git a/plugins/Insights/tests/Integration/ApiTest.php b/plugins/Insights/tests/Integration/ApiTest.php
index 2a75247021..dfa76dcde1 100644
--- a/plugins/Insights/tests/Integration/ApiTest.php
+++ b/plugins/Insights/tests/Integration/ApiTest.php
@@ -14,9 +14,7 @@ use Piwik\DataTable;
 use Piwik\DataTable\Row;
 use Piwik\Plugins\Insights\API;
 use Piwik\Plugins\Insights\tests\Fixtures\SomeVisitsDifferentPathsOnTwoDays;
-use Piwik\Tests\Impl\IntegrationTestCase;
-use Piwik\Tests\Impl\SystemTestCase;
-use Piwik\Tracker\Cache;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Translate;
 
 /**
diff --git a/plugins/Insights/tests/Integration/ModelTest.php b/plugins/Insights/tests/Integration/ModelTest.php
index 4f62630bd9..2226684ab7 100644
--- a/plugins/Insights/tests/Integration/ModelTest.php
+++ b/plugins/Insights/tests/Integration/ModelTest.php
@@ -11,7 +11,7 @@ namespace Piwik\Plugins\Insights\tests;
 use Piwik\DataTable;
 use Piwik\Plugins\Insights\Model;
 use Piwik\Plugins\Insights\tests\Fixtures\SomeVisitsDifferentPathsOnTwoDays;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 
 /**
  * @group Insights
diff --git a/plugins/LeftMenu/tests/Integration/APITest.php b/plugins/LeftMenu/tests/Integration/APITest.php
index e4500b2e41..00bf03830f 100644
--- a/plugins/LeftMenu/tests/Integration/APITest.php
+++ b/plugins/LeftMenu/tests/Integration/APITest.php
@@ -12,7 +12,7 @@ use Piwik\Access;
 use Piwik\Plugins\LeftMenu\API;
 use Piwik\Plugins\LeftMenu\Settings;
 use \FakeAccess;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * @group LeftMenu
diff --git a/plugins/Live/tests/Integration/APITest.php b/plugins/Live/tests/Integration/APITest.php
index fcfc410bcf..fc56b0d16e 100644
--- a/plugins/Live/tests/Integration/APITest.php
+++ b/plugins/Live/tests/Integration/APITest.php
@@ -14,8 +14,8 @@ use Piwik\Plugins\Goals\API as GoalsApi;
 use Piwik\Plugins\Live\API;
 use FakeAccess;
 use Piwik\Access;
-use Piwik\Tests\Impl\Fixture;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 
 /**
  * @group Live
diff --git a/plugins/Login/tests/Integration/LoginTest.php b/plugins/Login/tests/Integration/LoginTest.php
index 4007061bd5..b250bcf8e0 100644
--- a/plugins/Login/tests/Integration/LoginTest.php
+++ b/plugins/Login/tests/Integration/LoginTest.php
@@ -13,7 +13,7 @@ use Piwik\AuthResult;
 use Piwik\DbHelper;
 use Piwik\Plugins\Login\Auth;
 use Piwik\Plugins\UsersManager\API;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 use FakeAccess;
 
 require_once PIWIK_INCLUDE_PATH . '/plugins/Login/Auth.php';
diff --git a/plugins/MobileMessaging/tests/Integration/MobileMessagingTest.php b/plugins/MobileMessaging/tests/Integration/MobileMessagingTest.php
index f387534bf3..022dfda9ba 100644
--- a/plugins/MobileMessaging/tests/Integration/MobileMessagingTest.php
+++ b/plugins/MobileMessaging/tests/Integration/MobileMessagingTest.php
@@ -14,7 +14,7 @@ use Piwik\Plugins\MobileMessaging\MobileMessaging;
 use Piwik\Plugins\MobileMessaging\SMSProvider;
 use Piwik\Plugins\ScheduledReports\API as APIScheduledReports;
 use Piwik\Plugins\SitesManager\API as APISitesManager;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 use FakeAccess;
 
 /**
diff --git a/plugins/MultiSites/tests/Integration/MultiSitesTest.php b/plugins/MultiSites/tests/Integration/MultiSitesTest.php
index a5f372b7a5..8b6d7924a7 100644
--- a/plugins/MultiSites/tests/Integration/MultiSitesTest.php
+++ b/plugins/MultiSites/tests/Integration/MultiSitesTest.php
@@ -11,7 +11,7 @@ namespace Piwik\Plugins\MultiSites\tests\Integration;
 use Piwik\Access;
 use Piwik\Plugins\MultiSites\API as APIMultiSites;
 use Piwik\Plugins\SitesManager\API as APISitesManager;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * Class Plugins_MultiSitesTest
diff --git a/plugins/PrivacyManager/tests/Integration/PrivacyManagerConfigTest.php b/plugins/PrivacyManager/tests/Integration/PrivacyManagerConfigTest.php
index 07092248fe..4d2a121ee3 100644
--- a/plugins/PrivacyManager/tests/Integration/PrivacyManagerConfigTest.php
+++ b/plugins/PrivacyManager/tests/Integration/PrivacyManagerConfigTest.php
@@ -10,7 +10,7 @@ namespace Piwik\Plugins\PrivacyManager\tests;
 
 use Piwik\Option;
 use Piwik\Plugins\PrivacyManager\Config as PrivacyManagerConfig;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * Class Plugins_SitesManagerTest
diff --git a/plugins/PrivacyManager/tests/Integration/PrivacyManagerTest.php b/plugins/PrivacyManager/tests/Integration/PrivacyManagerTest.php
index 50fce5f0a7..2b8233ffa7 100644
--- a/plugins/PrivacyManager/tests/Integration/PrivacyManagerTest.php
+++ b/plugins/PrivacyManager/tests/Integration/PrivacyManagerTest.php
@@ -9,7 +9,7 @@
 namespace Piwik\Plugins\PrivacyManager\tests;
 
 use Piwik\Plugins\PrivacyManager\PrivacyManager;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * Class Plugins_SitesManagerTest
diff --git a/plugins/ScheduledReports/tests/Integration/ApiTest.php b/plugins/ScheduledReports/tests/Integration/ApiTest.php
index be13cb2b10..e1efb7fdcb 100644
--- a/plugins/ScheduledReports/tests/Integration/ApiTest.php
+++ b/plugins/ScheduledReports/tests/Integration/ApiTest.php
@@ -19,7 +19,7 @@ use Piwik\ScheduledTask;
 use Piwik\ScheduledTime\Monthly;
 use Piwik\ScheduledTime;
 use Piwik\Site;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 use FakeAccess;
 use Exception;
 use ReflectionMethod;
diff --git a/plugins/ScheduledReports/tests/Integration/ScheduledReportsTest.php b/plugins/ScheduledReports/tests/Integration/ScheduledReportsTest.php
index b0bb56363f..dfe17b9dfd 100644
--- a/plugins/ScheduledReports/tests/Integration/ScheduledReportsTest.php
+++ b/plugins/ScheduledReports/tests/Integration/ScheduledReportsTest.php
@@ -12,8 +12,8 @@ use Piwik\Db;
 use Piwik\Piwik;
 use Piwik\Plugins\ScheduledReports\API;
 use Piwik\Plugins\ScheduledReports\ScheduledReports;
-use Piwik\Tests\Impl\Fixture;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * @group ScheduledReports
diff --git a/plugins/SegmentEditor/tests/Integration/SegmentEditorTest.php b/plugins/SegmentEditor/tests/Integration/SegmentEditorTest.php
index e5d863e92c..ca90f3b43c 100644
--- a/plugins/SegmentEditor/tests/Integration/SegmentEditorTest.php
+++ b/plugins/SegmentEditor/tests/Integration/SegmentEditorTest.php
@@ -14,7 +14,7 @@ use Piwik\Piwik;
 use Piwik\Plugins\SegmentEditor\API;
 use Piwik\Plugins\SegmentEditor\Model;
 use Piwik\Plugins\SitesManager\API as APISitesManager;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 use FakeAccess;
 use Exception;
 
diff --git a/plugins/SitesManager/tests/Integration/SiteUrlsTest.php b/plugins/SitesManager/tests/Integration/SiteUrlsTest.php
index 8cc7cc5b14..4614f7cece 100644
--- a/plugins/SitesManager/tests/Integration/SiteUrlsTest.php
+++ b/plugins/SitesManager/tests/Integration/SiteUrlsTest.php
@@ -10,7 +10,7 @@ namespace Piwik\Plugins\SitesManager\tests\Integration;
 use Piwik\CacheFile;
 use Piwik\Plugins\SitesManager\API;
 use Piwik\Plugins\SitesManager\SiteUrls;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * @group SitesManager
diff --git a/plugins/SitesManager/tests/Integration/SitesManagerTest.php b/plugins/SitesManager/tests/Integration/SitesManagerTest.php
index 2d2ac466ef..c49ff6b5e4 100644
--- a/plugins/SitesManager/tests/Integration/SitesManagerTest.php
+++ b/plugins/SitesManager/tests/Integration/SitesManagerTest.php
@@ -12,7 +12,7 @@ use Piwik\Access;
 use Piwik\Plugins\SitesManager\API;
 use Piwik\Plugins\UsersManager\API as APIUsersManager;
 use Piwik\Site;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 use FakeAccess;
 use Exception;
 use PHPUnit_Framework_Constraint_IsType;
diff --git a/plugins/UserSettings/tests/Fixtures/LanguageFixture.php b/plugins/UserSettings/tests/Fixtures/LanguageFixture.php
index 6cbd9d8343..dd3089a365 100644
--- a/plugins/UserSettings/tests/Fixtures/LanguageFixture.php
+++ b/plugins/UserSettings/tests/Fixtures/LanguageFixture.php
@@ -10,7 +10,7 @@
 namespace Piwik\Plugins\UserSettings\tests\Fixtures;
 
 
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 use Piwik\Date;
 use Piwik\Common;
 
diff --git a/plugins/UserSettings/tests/System/GetLanguageSystemTest.php b/plugins/UserSettings/tests/System/GetLanguageSystemTest.php
index 70db55616b..3c409c1112 100644
--- a/plugins/UserSettings/tests/System/GetLanguageSystemTest.php
+++ b/plugins/UserSettings/tests/System/GetLanguageSystemTest.php
@@ -10,7 +10,7 @@ namespace Piwik\Plugins\UserSettings\tests\System;
 
 
 use Piwik\Plugins\UserSettings\tests\Fixtures\LanguageFixture;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 
 /**
  * Class GetLanguageSystemTest
diff --git a/plugins/UsersManager/tests/Integration/APITest.php b/plugins/UsersManager/tests/Integration/APITest.php
index e84cd5b750..038fee2934 100644
--- a/plugins/UsersManager/tests/Integration/APITest.php
+++ b/plugins/UsersManager/tests/Integration/APITest.php
@@ -11,8 +11,8 @@ use Piwik\Access;
 use FakeAccess;
 use Piwik\Piwik;
 use Piwik\Plugins\UsersManager\API;
-use Piwik\Tests\Impl\Fixture;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * @group UsersManager
diff --git a/plugins/UsersManager/tests/Integration/UserPreferencesTest.php b/plugins/UsersManager/tests/Integration/UserPreferencesTest.php
index cd23e7baa3..34a5907c0a 100644
--- a/plugins/UsersManager/tests/Integration/UserPreferencesTest.php
+++ b/plugins/UsersManager/tests/Integration/UserPreferencesTest.php
@@ -13,8 +13,8 @@ use Piwik\Plugins\UsersManager\UserPreferences;
 use Piwik\Plugins\UsersManager\API as APIUsersManager;
 use FakeAccess;
 use Piwik\Access;
-use Piwik\Tests\Impl\Fixture;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * @group UsersManager
diff --git a/plugins/UsersManager/tests/Integration/UsersManagerTest.php b/plugins/UsersManager/tests/Integration/UsersManagerTest.php
index e813c2ac1b..6b847e6d5a 100644
--- a/plugins/UsersManager/tests/Integration/UsersManagerTest.php
+++ b/plugins/UsersManager/tests/Integration/UsersManagerTest.php
@@ -13,7 +13,7 @@ use Piwik\Plugins\SitesManager\API as APISitesManager;
 use Piwik\Plugins\UsersManager\API;
 use Piwik\Plugins\UsersManager\Model;
 use Piwik\Translate;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 use FakeAccess;
 use Exception;
 
diff --git a/tests/PHPUnit/BenchmarkTestCase.php b/tests/PHPUnit/BenchmarkTestCase.php
index 40f5309527..d3775bb15d 100755
--- a/tests/PHPUnit/BenchmarkTestCase.php
+++ b/tests/PHPUnit/BenchmarkTestCase.php
@@ -5,110 +5,10 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
-use Piwik\Config;
-use Piwik\Db;
-use Piwik\Plugins\Goals\API;
-use Piwik\Tests\Impl\Fixture;
-
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/Impl/SystemTestCase.php';
-require_once PIWIK_INCLUDE_PATH . '/tests/LocalTracker.php';
-
-// require fixtures
-foreach (glob(PIWIK_INCLUDE_PATH . '/tests/PHPUnit/Benchmarks/Fixtures/*.php') as $file) {
-    require_once $file;
-}
 
 /**
  * Base class for benchmarks.
  */
-abstract class BenchmarkTestCase extends \Piwik\Tests\Impl\SystemTestCase
+abstract class BenchmarkTestCase extends \Piwik\Tests\Framework\TestCase\BenchmarkTestCase
 {
-    protected static $fixture;
-
-    public static function setUpBeforeClass()
-    {
-        $dbName = false;
-        if (!empty($GLOBALS['PIWIK_BENCHMARK_DATABASE'])) {
-            $dbName = $GLOBALS['PIWIK_BENCHMARK_DATABASE'];
-        }
-
-        // connect to database
-        self::createTestConfig();
-        self::connectWithoutDatabase();
-
-        // create specified fixture (global var not set, use default no-data fixture (see end of this file))
-        if (empty($GLOBALS['PIWIK_BENCHMARK_FIXTURE'])) {
-            $fixtureName = 'Piwik_Test_Fixture_EmptyOneSite';
-        } else {
-            $fixtureName = 'Piwik_Test_Fixture_' . $GLOBALS['PIWIK_BENCHMARK_FIXTURE'];
-        }
-        self::$fixture = new $fixtureName;
-
-        // figure out if the desired fixture has already been setup, and if not empty the database
-        $installedFixture = false;
-        try {
-            if (isset(self::$fixture->tablesPrefix)) {
-                Config::getInstance()->database['tables_prefix'] = self::$fixture->tablesPrefix;
-            }
-
-            Db::query("USE " . $dbName);
-            $installedFixture = \Piwik\Option::get('benchmark_fixture_name');
-        } catch (Exception $ex) {
-            // ignore
-        }
-
-        $createEmptyDatabase = $fixtureName != $installedFixture;
-        parent::_setUpBeforeClass($dbName, $createEmptyDatabase);
-
-        // if we created an empty database, setup the fixture
-        if ($createEmptyDatabase) {
-            self::$fixture->setUp();
-            \Piwik\Option::set('benchmark_fixture_name', $fixtureName);
-        }
-    }
-
-    public static function tearDownAfterClass()
-    {
-        // only drop the database if PIWIK_BENCHMARK_DATABASE isn't set
-        $dropDatabase = empty($GLOBALS['PIWIK_BENCHMARK_DATABASE']);
-        parent::_tearDownAfterClass($dropDatabase);
-    }
-
-    /**
-     * Creates a tracking object that invokes the tracker directly (w/o going through HTTP).
-     */
-    public static function getLocalTracker($idSite)
-    {
-        $t = new Piwik_LocalTracker($idSite, Fixture::getTrackerUrl());
-        $t->setUserAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 (.NET CLR 3.5.30729)");
-        $t->setBrowserLanguage('fr');
-        $t->setLocalTime('12:34:06');
-        $t->setResolution(1024, 768);
-        $t->setBrowserHasCookies(true);
-        $t->setPlugins($flash = true, $java = true, $director = false);
-        $t->setTokenAuth(Fixture::getTokenAuth());
-        return $t;
-    }
-}
-
-/**
- * Reusable fixture. Adds one site w/ goals and no visit data.
- */
-class Piwik_Test_Fixture_EmptyOneSite
-{
-    public $date = '2010-01-01';
-    public $period = 'day';
-    public $idSite = 1;
-
-    public function setUp()
-    {
-        // add one site
-        Fixture::createWebsite(
-            $this->date, $ecommerce = 1, $siteName = "Site #0", $siteUrl = "http://whatever.com/");
-
-        // add two goals
-        $goals = API::getInstance();
-        $goals->addGoal($this->idSite, 'all', 'url', 'http', 'contains', false, 5);
-        $goals->addGoal($this->idSite, 'all', 'url', 'http', 'contains');
-    }
 }
diff --git a/tests/PHPUnit/Benchmarks/ArchiveQueryBenchmark.php b/tests/PHPUnit/Benchmarks/ArchiveQueryBenchmark.php
index 05e14b02fd..4b2109adb4 100644
--- a/tests/PHPUnit/Benchmarks/ArchiveQueryBenchmark.php
+++ b/tests/PHPUnit/Benchmarks/ArchiveQueryBenchmark.php
@@ -10,8 +10,7 @@ use Piwik\DataAccess\ArchiveTableCreator;
 use Piwik\Date;
 use Piwik\Period;
 use Piwik\Plugins\VisitsSummary\API;
-
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/BenchmarkTestCase.php';
+use Piwik\Tests\Framework\TestCase\BenchmarkTestCase;
 
 /**
  * Runs the archiving process.
diff --git a/tests/PHPUnit/Benchmarks/ArchivingProcessBenchmark.php b/tests/PHPUnit/Benchmarks/ArchivingProcessBenchmark.php
index 04175d2248..b769556a5b 100755
--- a/tests/PHPUnit/Benchmarks/ArchivingProcessBenchmark.php
+++ b/tests/PHPUnit/Benchmarks/ArchivingProcessBenchmark.php
@@ -6,8 +6,7 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 use Piwik\Plugins\VisitsSummary\API;
-
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/BenchmarkTestCase.php';
+use Piwik\Tests\Framework\TestCase\BenchmarkTestCase;
 
 /**
  * Runs the archiving process.
diff --git a/tests/PHPUnit/Benchmarks/Fixtures/ManyThousandSitesOneVisitEach.php b/tests/PHPUnit/Benchmarks/Fixtures/ManyThousandSitesOneVisitEach.php
index 4fbbef1bb9..6671a52f9c 100644
--- a/tests/PHPUnit/Benchmarks/Fixtures/ManyThousandSitesOneVisitEach.php
+++ b/tests/PHPUnit/Benchmarks/Fixtures/ManyThousandSitesOneVisitEach.php
@@ -7,7 +7,8 @@
  */
 use Piwik\Date;
 use Piwik\Plugins\Goals\API;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\TestCase\BenchmarkTestCase;
 
 /**
  * Reusable fixture. Adds 20,000 sites and tracks one pageview for each on one day.
diff --git a/tests/PHPUnit/Benchmarks/Fixtures/OneSiteThousandsOfDistinctUrlsOverMonth.php b/tests/PHPUnit/Benchmarks/Fixtures/OneSiteThousandsOfDistinctUrlsOverMonth.php
index 2a997554a3..659712786d 100644
--- a/tests/PHPUnit/Benchmarks/Fixtures/OneSiteThousandsOfDistinctUrlsOverMonth.php
+++ b/tests/PHPUnit/Benchmarks/Fixtures/OneSiteThousandsOfDistinctUrlsOverMonth.php
@@ -7,7 +7,8 @@
  */
 use Piwik\Date;
 use Piwik\Plugins\Goals\API;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\TestCase\BenchmarkTestCase;
 
 /**
  * Adds one site and 1000 actions for every day of one month (January). Each
diff --git a/tests/PHPUnit/Benchmarks/Fixtures/OneSiteTwelveThousandVisitsOneYear.php b/tests/PHPUnit/Benchmarks/Fixtures/OneSiteTwelveThousandVisitsOneYear.php
index aed08bb332..2108f3155e 100755
--- a/tests/PHPUnit/Benchmarks/Fixtures/OneSiteTwelveThousandVisitsOneYear.php
+++ b/tests/PHPUnit/Benchmarks/Fixtures/OneSiteTwelveThousandVisitsOneYear.php
@@ -7,7 +7,8 @@
  */
 use Piwik\Date;
 use Piwik\Plugins\Goals\API;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\TestCase\BenchmarkTestCase;
 
 /**
  * Reusable fixture. Tracks twelve thousand page views over a year for one site.
diff --git a/tests/PHPUnit/Benchmarks/Fixtures/ThousandSitesTwelveVisitsEachOneDay.php b/tests/PHPUnit/Benchmarks/Fixtures/ThousandSitesTwelveVisitsEachOneDay.php
index 79dba76fe7..c0cd881d9f 100755
--- a/tests/PHPUnit/Benchmarks/Fixtures/ThousandSitesTwelveVisitsEachOneDay.php
+++ b/tests/PHPUnit/Benchmarks/Fixtures/ThousandSitesTwelveVisitsEachOneDay.php
@@ -6,8 +6,8 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 use Piwik\Date;
-use Piwik\Plugins\Goals\API as APIGoals;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\TestCase\BenchmarkTestCase;
 
 /**
  * Reusable fixture. Tracks twelve thousand page views for 1000 sites on one day.
diff --git a/tests/PHPUnit/Benchmarks/MultiSitesBenchmark.php b/tests/PHPUnit/Benchmarks/MultiSitesBenchmark.php
index 249b006251..4242cad984 100644
--- a/tests/PHPUnit/Benchmarks/MultiSitesBenchmark.php
+++ b/tests/PHPUnit/Benchmarks/MultiSitesBenchmark.php
@@ -9,8 +9,7 @@ use Piwik\ArchiveProcessor\Rules;
 use Piwik\DataAccess\ArchiveTableCreator;
 use Piwik\Plugins\MultiSites\API as APIMultiSites;
 use Piwik\Plugins\VisitsSummary\API as APIVisitsSummary;
-
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/BenchmarkTestCase.php';
+use Piwik\Tests\Framework\TestCase\BenchmarkTestCase;
 
 /**
  * Tests MultiSites API. Should be used with ManyThousandSitesOneVisitEach benchmark fixture.
diff --git a/tests/PHPUnit/Benchmarks/TrackerBenchmark.php b/tests/PHPUnit/Benchmarks/TrackerBenchmark.php
index 4ed79791d5..2cc9609ec1 100755
--- a/tests/PHPUnit/Benchmarks/TrackerBenchmark.php
+++ b/tests/PHPUnit/Benchmarks/TrackerBenchmark.php
@@ -6,8 +6,7 @@
  * @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';
+use Piwik\Tests\Framework\TestCase\BenchmarkTestCase;
 
 /**
  * Tracks 12,500 pageviews on one site. Uses bulk tracking (no
diff --git a/tests/PHPUnit/ConsoleCommandTestCase.php b/tests/PHPUnit/ConsoleCommandTestCase.php
index 72b231f41f..f32533077c 100644
--- a/tests/PHPUnit/ConsoleCommandTestCase.php
+++ b/tests/PHPUnit/ConsoleCommandTestCase.php
@@ -8,50 +8,6 @@
 
 namespace Piwik\Tests;
 
-use Piwik\Config;
-use Piwik\Console;
-use Piwik\Tests\Impl\SystemTestCase;
-use Symfony\Component\Console\Tester\ApplicationTester;
-
-/**
- * Base class for test cases that test Piwik console commands. Derives from SystemTestCase
- * so the entire Piwik environment is set up.
- *
- * This will create an ApplicationTester instance (provided by Symfony) which should be used to
- * test commands like this:
- *
- *     public function testThisAndThat()
- *     {
- *         $result = $this->applicationTester->run(array(
- *             'command' => 'my-command',
- *             'arg1' => 'value1',
- *             'arg2' => 'value2',
- *             '--option' => true,
- *             '--another-option' => 'value3'
- *         ));
- *         $this->assertEquals(0, $result, $this->getCommandDisplayOutputErrorMessage());
- *
- *         // other checks
- *     }
- */
-class ConsoleCommandTestCase extends SystemTestCase
+class ConsoleCommandTestCase extends Framework\TestCase\ConsoleCommandTestCase
 {
-    protected $applicationTester = null;
-
-    public function setUp()
-    {
-        parent::setUp();
-
-        $application = new Console();
-        $application->setAutoExit(false);
-
-        $this->applicationTester = new ApplicationTester($application);
-
-        Config::unsetInstance();
-    }
-
-    protected function getCommandDisplayOutputErrorMessage()
-    {
-        return "Command did not behave as expected. Command output: " . $this->applicationTester->getDisplay();
-    }
 }
\ No newline at end of file
diff --git a/tests/PHPUnit/DatabaseTestCase.php b/tests/PHPUnit/DatabaseTestCase.php
index d1d0e06cdc..70a06ca303 100755
--- a/tests/PHPUnit/DatabaseTestCase.php
+++ b/tests/PHPUnit/DatabaseTestCase.php
@@ -7,14 +7,14 @@
  */
 
 /**
- * @deprecated since 2.8.0 use \Piwik\Tests\Impl\IntegrationTestCase instead
+ * @deprecated since 2.8.0 use \Piwik\Tests\Framework\TestCase\IntegrationTestCase instead
  */
-class DatabaseTestCase extends \Piwik\Tests\Impl\IntegrationTestCase
+class DatabaseTestCase extends \Piwik\Tests\Framework\TestCase\IntegrationTestCase
 {
 
     public static function setUpBeforeClass()
     {
-        \Piwik\Log::debug('\DatabaseTestCase is deprecated since 2.8.0 extend \Piwik\Tests\Impl\IntegrationTestCase instead');
+        \Piwik\Log::debug('\DatabaseTestCase is deprecated since 2.8.0 extend \Piwik\Tests\Framework\TestCase\IntegrationTestCase instead');
 
         parent::setUpBeforeClass();
     }
diff --git a/tests/PHPUnit/FakeAccess.php b/tests/PHPUnit/FakeAccess.php
index 3a7ab32e69..2cac223994 100644
--- a/tests/PHPUnit/FakeAccess.php
+++ b/tests/PHPUnit/FakeAccess.php
@@ -5,174 +5,12 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
-use Piwik\Plugins\SitesManager\API;
-use Piwik\Site;
+
+use \Piwik\Tests\Framework\Mock\FakeAccess as MockFakeAccess;
 
 /**
  * FakeAccess for UnitTests
  */
-class FakeAccess
+class FakeAccess extends MockFakeAccess
 {
-    public static $superUser = false;
-    public static $idSitesAdmin = array();
-    public static $idSitesView = array();
-    public static $identity = 'superUserLogin';
-    public static $superUserLogin = 'superUserLogin';
-
-    public function getTokenAuth()
-    {
-        return false;
-    }
-
-    public function __construct()
-    {
-        self::$superUser    = false;
-        self::$idSitesAdmin = array();
-        self::$idSitesView  = array();
-        self::$identity     = 'superUserLogin';
-    }
-
-    public static function setIdSitesAdmin($ids)
-    {
-        self::$superUser    = false;
-        self::$idSitesAdmin = $ids;
-    }
-
-    public static function setIdSitesView($ids)
-    {
-        self::$superUser   = false;
-        self::$idSitesView = $ids;
-    }
-
-    public static function hasSuperUserAccess()
-    {
-        return self::$superUser;
-    }
-
-    public static function checkUserHasSuperUserAccess()
-    {
-        if (!self::$superUser) {
-            throw new Exception("checkUserHasSuperUserAccess Fake exception // string not to be tested");
-        }
-    }
-
-    public static function setSuperUserAccess($bool = true)
-    {
-        self::$superUser = $bool;
-    }
-
-    public static function reloadAccess()
-    {
-    }
-
-    public static function checkUserHasAdminAccess($idSites)
-    {
-        if (!self::$superUser) {
-            $websitesAccess = self::$idSitesAdmin;
-        } else {
-            $websitesAccess = API::getInstance()->getAllSitesId();
-        }
-
-        $idSites = Site::getIdSitesFromIdSitesString($idSites);
-
-        foreach ($idSites as $idsite) {
-            if (!in_array($idsite, $websitesAccess)) {
-                throw new Exception("checkUserHasAdminAccess Fake exception // string not to be tested");
-            }
-        }
-    }
-
-    //means at least view access
-    public static function checkUserHasViewAccess($idSites)
-    {
-        if (self::$superUser) {
-            return;
-        }
-
-        $websitesAccess = array_merge(self::$idSitesView, self::$idSitesAdmin);
-
-        if (!is_array($idSites)) {
-            if ($idSites == 'all') {
-                $idSites = API::getInstance()->getAllSitesId();
-            } else {
-                $idSites = explode(',', $idSites);
-            }
-        }
-
-        if (empty($websitesAccess)) {
-            throw new Exception("checkUserHasViewAccess Fake exception // string not to be tested");
-        }
-
-        foreach ($idSites as $idsite) {
-            if (!in_array($idsite, $websitesAccess)) {
-                throw new Exception("checkUserHasViewAccess Fake exception // string not to be tested");
-            }
-        }
-    }
-
-    public static function checkUserHasSomeViewAccess()
-    {
-        if (!self::$superUser) {
-            if (count(self::$idSitesView) == 0) {
-                throw new Exception("checkUserHasSomeViewAccess Fake exception // string not to be tested");
-            }
-        } else {
-            return;
-        }
-    }
-
-    //means at least view access
-    public static function checkUserHasSomeAdminAccess()
-    {
-        if (!self::$superUser) {
-            if (count(self::$idSitesAdmin) == 0) {
-                throw new Exception("checkUserHasSomeAdminAccess Fake exception // string not to be tested");
-            }
-        } else {
-            return; //Super User has some admin rights
-        }
-    }
-
-    public static function getLogin()
-    {
-        return self::$identity;
-    }
-
-    public static function getSitesIdWithAdminAccess()
-    {
-        if (self::$superUser) {
-            return API::getInstance()->getAllSitesId();
-        }
-
-        return self::$idSitesAdmin;
-    }
-
-    public static function getSitesIdWithViewAccess()
-    {
-        if (self::$superUser) {
-            return API::getInstance()->getAllSitesId();
-        }
-
-        return self::$idSitesView;
-    }
-
-    public static function getSitesIdWithAtLeastViewAccess()
-    {
-        if (self::$superUser) {
-            return API::getInstance()->getAllSitesId();
-        }
-
-        return array_merge(self::$idSitesView, self::$idSitesAdmin);
-    }
-
-    public function getRawSitesWithSomeViewAccess($login)
-    {
-        $result = array();
-
-        foreach (array_merge(self::$idSitesView, self::$idSitesAdmin) as $idSite) {
-            $result[] = array('idsite' => $idSite);
-        }
-
-        return $result;
-    }
 }
\ No newline at end of file
diff --git a/tests/PHPUnit/Fixture.php b/tests/PHPUnit/Fixture.php
index ad13e7eb3c..4d15574808 100644
--- a/tests/PHPUnit/Fixture.php
+++ b/tests/PHPUnit/Fixture.php
@@ -9,23 +9,23 @@ namespace Piwik\Tests;
 use Piwik\Log;
 
 /**
- * @deprecated since 2.8.0 use \Piwik\Tests\Impl\Fixture instead
+ * @deprecated since 2.8.0 use \Piwik\Tests\Framework\Fixture instead
  */
-class Fixture extends \Piwik\Tests\Impl\Fixture
+class Fixture extends Framework\Fixture
 {
 
     /** Adds data to Piwik. Creates sites, tracks visits, imports log files, etc. */
     public function setUp()
     {
-        Log::warning('Piwik\Tests\Fixture is deprecated, use \Piwik\Tests\Impl\Fixture instead');
+        Log::warning('Piwik\Tests\Fixture is deprecated, use \Piwik\Tests\Framework\Fixture instead');
 
         parent::setUp();
     }
 }
 
 /**
- * @deprecated since 2.8.0 use \Piwik\Tests\Impl\OverrideLogin instead
+ * @deprecated since 2.8.0 use \Piwik\Tests\Framework\OverrideLogin instead
  */
-class OverrideLogin extends \Piwik\Tests\Impl\OverrideLogin
+class OverrideLogin extends Framework\OverrideLogin
 {
 }
\ No newline at end of file
diff --git a/tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorIdAndUserId.php b/tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorIdAndUserId.php
index 01156c1d0a..f1444bf2f2 100644
--- a/tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorIdAndUserId.php
+++ b/tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorIdAndUserId.php
@@ -10,7 +10,7 @@ namespace Piwik\Tests\Fixtures;
 use Piwik\Date;
 use Piwik\Plugins\Goals\API;
 use Piwik\Tracker\Visit;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 use PiwikTracker;
 use Exception;
 
diff --git a/tests/PHPUnit/Fixtures/InvalidVisits.php b/tests/PHPUnit/Fixtures/InvalidVisits.php
index 4c16226406..ef7ece2803 100644
--- a/tests/PHPUnit/Fixtures/InvalidVisits.php
+++ b/tests/PHPUnit/Fixtures/InvalidVisits.php
@@ -9,7 +9,7 @@ namespace Piwik\Tests\Fixtures;
 
 use Piwik\Http;
 use Piwik\Plugins\SitesManager\API;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 use Exception;
 
 /**
diff --git a/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php b/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php
index 38a6479de7..e72708a11d 100644
--- a/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php
+++ b/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php
@@ -12,8 +12,8 @@ use Piwik\Plugins\Goals\API as APIGoals;
 use Piwik\Plugins\SegmentEditor\API as APISegmentEditor;
 use Piwik\Plugins\UserCountry\LocationProvider\GeoIp;
 use Piwik\Plugins\UserCountry\LocationProvider;
-use Piwik\Tests\Impl\Fixture;
-use Piwik\Tests\OverrideLogin;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\OverrideLogin;
 
 /**
  * Imports visits from several log files using the python log importer.
diff --git a/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php b/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php
index 6c4cf69526..07e2ca357c 100644
--- a/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php
+++ b/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php
@@ -11,7 +11,7 @@ use Piwik\Date;
 use Piwik\Db;
 use Piwik\Plugins\Annotations\API as APIAnnotations;
 use Piwik\Plugins\Goals\API as APIGoals;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php';
 
diff --git a/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php b/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php
index f8783f8b7d..92dd1408c5 100644
--- a/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php
+++ b/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php
@@ -11,10 +11,9 @@ use Piwik\Date;
 use Piwik\Plugins\Goals\API;
 use Piwik\Plugins\UserCountry\LocationProvider\GeoIp;
 use Piwik\Plugins\UserCountry\LocationProvider;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 use Exception;
-
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/MockLocationProvider.php';
+use Piwik\Tests\Framework\Mock\LocationProvider as MockLocationProvider;
 
 /**
  * Adds one new website and tracks 35 visits from 18 visitors with geolocation using
@@ -211,7 +210,7 @@ class ManyVisitsWithGeoIP extends Fixture
     {
         LocationProvider::$providers = null;
         LocationProvider::setCurrentProvider('mock_provider');
-        \MockLocationProvider::$locations = array(
+        MockLocationProvider::$locations = array(
             self::makeLocation('Stratford-upon-Avon', 'P3', 'gb', 123.456, 21.321), // template location
 
             // same region, different city, same country
diff --git a/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php b/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php
index cf3434632c..38541a65f5 100644
--- a/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php
+++ b/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php
@@ -9,9 +9,8 @@ namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
 use Piwik\Plugins\UserCountry\LocationProvider;
-use Piwik\Tests\Impl\Fixture;
-
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/MockLocationProvider.php';
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\Mock\LocationProvider as MockLocationProvider;
 
 /**
  * Adds one site and tracks 60 visits (15 visitors, one action per visit).
@@ -210,7 +209,7 @@ class ManyVisitsWithMockLocationProvider extends Fixture
     private function setMockLocationProvider()
     {
         LocationProvider::setCurrentProvider('mock_provider');
-        \MockLocationProvider::$locations = array(
+        MockLocationProvider::$locations = array(
             self::makeLocation('Toronto', 'ON', 'CA', $lat = null, $long = null, $isp = 'comcast.net'),
 
             self::makeLocation('Nice', 'B8', 'FR', $lat = null, $long = null, $isp = 'comcast.net'),
diff --git a/tests/PHPUnit/Fixtures/ManyVisitsWithSubDirReferrersAndCustomVars.php b/tests/PHPUnit/Fixtures/ManyVisitsWithSubDirReferrersAndCustomVars.php
index 8250174878..174fd4c9d2 100644
--- a/tests/PHPUnit/Fixtures/ManyVisitsWithSubDirReferrersAndCustomVars.php
+++ b/tests/PHPUnit/Fixtures/ManyVisitsWithSubDirReferrersAndCustomVars.php
@@ -8,7 +8,7 @@
 namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds one site and tracks 13 visits all with custom variables and referrer URLs
diff --git a/tests/PHPUnit/Fixtures/OmniFixture.php b/tests/PHPUnit/Fixtures/OmniFixture.php
index 176764f3c2..c7b9f70826 100644
--- a/tests/PHPUnit/Fixtures/OmniFixture.php
+++ b/tests/PHPUnit/Fixtures/OmniFixture.php
@@ -12,8 +12,8 @@ use Piwik\Access;
 use Piwik\Option;
 use ReflectionClass;
 use Piwik\Plugins\VisitsSummary\API as VisitsSummaryAPI;
-use Piwik\Tests\Impl\Fixture;
-use Piwik\Tests\OverrideLogin;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\OverrideLogin;
 
 /**
  * This fixture is the combination of every other fixture defined by Piwik. Should be used
diff --git a/tests/PHPUnit/Fixtures/OneVisitSeveralPageViews.php b/tests/PHPUnit/Fixtures/OneVisitSeveralPageViews.php
index 899df68e7a..35bb91feed 100644
--- a/tests/PHPUnit/Fixtures/OneVisitSeveralPageViews.php
+++ b/tests/PHPUnit/Fixtures/OneVisitSeveralPageViews.php
@@ -8,7 +8,7 @@
 namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds one site and tracks one visit with several pageviews.
diff --git a/tests/PHPUnit/Fixtures/OneVisitWithAbnormalPageviewUrls.php b/tests/PHPUnit/Fixtures/OneVisitWithAbnormalPageviewUrls.php
index 22999000ee..f7dc5ac337 100644
--- a/tests/PHPUnit/Fixtures/OneVisitWithAbnormalPageviewUrls.php
+++ b/tests/PHPUnit/Fixtures/OneVisitWithAbnormalPageviewUrls.php
@@ -8,7 +8,7 @@
 namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds one site and tracks one visit w/ pageview URLs that are not normalized.
diff --git a/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php b/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php
index f8f4202c51..e7af179e10 100644
--- a/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php
+++ b/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php
@@ -10,7 +10,7 @@ namespace Piwik\Tests\Fixtures;
 use Piwik\Date;
 use Piwik\Plugins\Goals\API as APIGoals;
 use Piwik\Plugins\SitesManager\API as APISitesManager;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * This fixture adds one website and tracks two visits by one visitor.
diff --git a/tests/PHPUnit/Fixtures/SomeVisitsAllConversions.php b/tests/PHPUnit/Fixtures/SomeVisitsAllConversions.php
index b8645c9208..2c5e96cbed 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsAllConversions.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsAllConversions.php
@@ -9,7 +9,7 @@ namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
 use Piwik\Plugins\Goals\API;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds one site and tracks a couple conversions.
diff --git a/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php b/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php
index 1985b9090c..3c73972a7a 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php
@@ -9,7 +9,7 @@ namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
 use Piwik\Plugins\Goals\API;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 use PiwikTracker;
 
 /**
diff --git a/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php b/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php
index 309f5713da..ed0647f64c 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php
@@ -8,7 +8,7 @@
 namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds one site and tracks a couple visits with many pageviews. The
diff --git a/tests/PHPUnit/Fixtures/SomeVisitsWithLongUrls.php b/tests/PHPUnit/Fixtures/SomeVisitsWithLongUrls.php
index 7104a9db40..52b5ca7044 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsWithLongUrls.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsWithLongUrls.php
@@ -8,7 +8,7 @@
 namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds one site and tracks 7 visits w/ some long-ish urls (as page urls and
diff --git a/tests/PHPUnit/Fixtures/SomeVisitsWithNonUnicodePageTitles.php b/tests/PHPUnit/Fixtures/SomeVisitsWithNonUnicodePageTitles.php
index 6b173301f2..798ed1a620 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsWithNonUnicodePageTitles.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsWithNonUnicodePageTitles.php
@@ -9,7 +9,7 @@ namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
 use Piwik\Plugins\SitesManager\API;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds one website and some visits with non unicode page titles.
diff --git a/tests/PHPUnit/Fixtures/SqlDump.php b/tests/PHPUnit/Fixtures/SqlDump.php
index 3547266669..589ffd1e0f 100644
--- a/tests/PHPUnit/Fixtures/SqlDump.php
+++ b/tests/PHPUnit/Fixtures/SqlDump.php
@@ -11,7 +11,7 @@ use Piwik\Access;
 use Piwik\ArchiveProcessor\Rules;
 use Piwik\Config;
 use Piwik\Db;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 use Exception;
 
 /**
diff --git a/tests/PHPUnit/Fixtures/ThreeGoalsOnePageview.php b/tests/PHPUnit/Fixtures/ThreeGoalsOnePageview.php
index fcb72a3487..4d7ca6ab46 100644
--- a/tests/PHPUnit/Fixtures/ThreeGoalsOnePageview.php
+++ b/tests/PHPUnit/Fixtures/ThreeGoalsOnePageview.php
@@ -9,7 +9,7 @@ namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
 use Piwik\Plugins\Goals\API;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Fixture that adds one site with three goals and tracks one pageview & one manual
diff --git a/tests/PHPUnit/Fixtures/ThreeSitesWithManyVisitsWithSiteSearch.php b/tests/PHPUnit/Fixtures/ThreeSitesWithManyVisitsWithSiteSearch.php
index 1b6086ddde..9b90c82e85 100644
--- a/tests/PHPUnit/Fixtures/ThreeSitesWithManyVisitsWithSiteSearch.php
+++ b/tests/PHPUnit/Fixtures/ThreeSitesWithManyVisitsWithSiteSearch.php
@@ -9,7 +9,7 @@ namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
 use Piwik\Plugins\SitesManager\API;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds three websites with different site search configurations and adds
diff --git a/tests/PHPUnit/Fixtures/ThreeSitesWithSharedVisitors.php b/tests/PHPUnit/Fixtures/ThreeSitesWithSharedVisitors.php
index 79f04d69f7..cbdc0ddf64 100644
--- a/tests/PHPUnit/Fixtures/ThreeSitesWithSharedVisitors.php
+++ b/tests/PHPUnit/Fixtures/ThreeSitesWithSharedVisitors.php
@@ -10,7 +10,7 @@ namespace Piwik\Tests\Fixtures;
 use Piwik\Common;
 use Piwik\Date;
 use Piwik\Db;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds three sites and tracks some visits w/ visitors that visit each site.
diff --git a/tests/PHPUnit/Fixtures/TwoSitesEcommerceOrderWithItems.php b/tests/PHPUnit/Fixtures/TwoSitesEcommerceOrderWithItems.php
index a2b00b32d6..b841f029d1 100644
--- a/tests/PHPUnit/Fixtures/TwoSitesEcommerceOrderWithItems.php
+++ b/tests/PHPUnit/Fixtures/TwoSitesEcommerceOrderWithItems.php
@@ -9,7 +9,7 @@ namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
 use Piwik\Plugins\Goals\API;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds two sites and tracks some visits with ecommerce orders.
diff --git a/tests/PHPUnit/Fixtures/TwoSitesManyVisitsOverSeveralDaysWithSearchEngineReferrers.php b/tests/PHPUnit/Fixtures/TwoSitesManyVisitsOverSeveralDaysWithSearchEngineReferrers.php
index 8b154fd31f..8983d1eea5 100644
--- a/tests/PHPUnit/Fixtures/TwoSitesManyVisitsOverSeveralDaysWithSearchEngineReferrers.php
+++ b/tests/PHPUnit/Fixtures/TwoSitesManyVisitsOverSeveralDaysWithSearchEngineReferrers.php
@@ -9,7 +9,7 @@ namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
 use Piwik\Plugins\Goals\API;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds one website and tracks visits on different days over a month
diff --git a/tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php b/tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php
index 8c3ab81f71..8ccf2c6b8c 100644
--- a/tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php
+++ b/tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php
@@ -10,7 +10,7 @@ namespace Piwik\Tests\Fixtures;
 use Piwik\Date;
 use Piwik\Plugins\Goals\API as APIGoals;
 use Piwik\Plugins\SitesManager\API as APISitesManager;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds two websites and tracks visits from two visitors on different days.
diff --git a/tests/PHPUnit/Fixtures/TwoSitesVisitsInPast.php b/tests/PHPUnit/Fixtures/TwoSitesVisitsInPast.php
index 7d8f967d99..5e508f9d0b 100644
--- a/tests/PHPUnit/Fixtures/TwoSitesVisitsInPast.php
+++ b/tests/PHPUnit/Fixtures/TwoSitesVisitsInPast.php
@@ -8,7 +8,7 @@
 namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds two sites and tracks several visits all in the past.
diff --git a/tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php b/tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php
index 9cd6938d27..b549bb6c8e 100644
--- a/tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php
+++ b/tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php
@@ -10,7 +10,7 @@ namespace Piwik\Tests\Fixtures;
 use Piwik\Access;
 use Piwik\Date;
 use Piwik\Plugins\Annotations\API;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 use FakeAccess;
 
 /**
diff --git a/tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php b/tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php
index d2a66893fd..86c144f8c1 100644
--- a/tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php
+++ b/tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php
@@ -9,7 +9,7 @@ namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
 use Piwik\Plugins\Goals\API;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds one site and tracks two visits. One visit is a bot and one has no keyword
diff --git a/tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php b/tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php
index 043fa4aaca..9fbff49def 100644
--- a/tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php
+++ b/tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php
@@ -9,7 +9,7 @@ namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
 use Piwik\Plugins\Goals\API as APIGoals;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 use PiwikTracker;
 
 /**
diff --git a/tests/PHPUnit/Fixtures/TwoVisitsWithCustomVariables.php b/tests/PHPUnit/Fixtures/TwoVisitsWithCustomVariables.php
index a472add11b..047c7e5a65 100644
--- a/tests/PHPUnit/Fixtures/TwoVisitsWithCustomVariables.php
+++ b/tests/PHPUnit/Fixtures/TwoVisitsWithCustomVariables.php
@@ -9,7 +9,7 @@ namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
 use Piwik\Plugins\Goals\API;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds one site with two goals and tracks two visits with custom variables.
diff --git a/tests/PHPUnit/Fixtures/UITestFixture.php b/tests/PHPUnit/Fixtures/UITestFixture.php
index 6f404adefd..88921238fa 100644
--- a/tests/PHPUnit/Fixtures/UITestFixture.php
+++ b/tests/PHPUnit/Fixtures/UITestFixture.php
@@ -20,7 +20,7 @@ use Piwik\Plugins\SegmentEditor\API as APISegmentEditor;
 use Piwik\Plugins\UsersManager\API as UsersManagerAPI;
 use Piwik\Plugins\SitesManager\API as SitesManagerAPI;
 use Piwik\WidgetsList;
-use Piwik\Tests\OverrideLogin;
+use Piwik\Tests\Framework\OverrideLogin;
 
 /**
  * Fixture for UI tests.
diff --git a/tests/PHPUnit/Fixtures/VisitOverSeveralDaysImportedLogs.php b/tests/PHPUnit/Fixtures/VisitOverSeveralDaysImportedLogs.php
index 216d49f377..16d6849a09 100644
--- a/tests/PHPUnit/Fixtures/VisitOverSeveralDaysImportedLogs.php
+++ b/tests/PHPUnit/Fixtures/VisitOverSeveralDaysImportedLogs.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\Fixtures;
 
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Import a same visitor, over three different days, in reverse chronological order
diff --git a/tests/PHPUnit/Fixtures/VisitsInDifferentTimezones.php b/tests/PHPUnit/Fixtures/VisitsInDifferentTimezones.php
index 0a1dce05fd..d5c1070f2d 100644
--- a/tests/PHPUnit/Fixtures/VisitsInDifferentTimezones.php
+++ b/tests/PHPUnit/Fixtures/VisitsInDifferentTimezones.php
@@ -8,7 +8,7 @@
 namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds one site with a non UTC timezone and tracks a couple visits near the end of the day.
diff --git a/tests/PHPUnit/Fixtures/VisitsOverSeveralDays.php b/tests/PHPUnit/Fixtures/VisitsOverSeveralDays.php
index 923a7dcb3b..8f15052b02 100644
--- a/tests/PHPUnit/Fixtures/VisitsOverSeveralDays.php
+++ b/tests/PHPUnit/Fixtures/VisitsOverSeveralDays.php
@@ -8,7 +8,7 @@
 namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds one website and tracks several visits from one visitor on
diff --git a/tests/PHPUnit/Fixtures/VisitsTwoWebsitesWithAdditionalVisits.php b/tests/PHPUnit/Fixtures/VisitsTwoWebsitesWithAdditionalVisits.php
index 321af65330..fa9f3c7c0d 100644
--- a/tests/PHPUnit/Fixtures/VisitsTwoWebsitesWithAdditionalVisits.php
+++ b/tests/PHPUnit/Fixtures/VisitsTwoWebsitesWithAdditionalVisits.php
@@ -8,7 +8,7 @@
 namespace Piwik\Tests\Fixtures;
 
 use Piwik\Date;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Adds two sites and tracks several visits with possibility to add new visits to the same days
diff --git a/tests/PHPUnit/Impl/Fixture.php b/tests/PHPUnit/Framework/Fixture.php
similarity index 98%
rename from tests/PHPUnit/Impl/Fixture.php
rename to tests/PHPUnit/Framework/Fixture.php
index bfb212107f..4d6f6ae2d8 100644
--- a/tests/PHPUnit/Impl/Fixture.php
+++ b/tests/PHPUnit/Framework/Fixture.php
@@ -5,7 +5,7 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
-namespace Piwik\Tests\Impl;
+namespace Piwik\Tests\Framework;
 
 use Piwik\Access;
 use Piwik\Common;
@@ -28,6 +28,7 @@ use Piwik\Plugins\UsersManager\API as APIUsersManager;
 use Piwik\Plugins\UsersManager\UsersManager;
 use Piwik\ReportRenderer;
 use Piwik\Site;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tracker\Cache;
 use Piwik\Translate;
 use Piwik\Url;
@@ -54,7 +55,7 @@ use Exception;
  * Related TODO: we should try and reduce the amount of existing fixtures by
  *                merging some together.
  */
-class Fixture extends PHPUnit_Framework_Assert
+class Fixture extends \PHPUnit_Framework_Assert
 {
     const IMAGES_GENERATED_ONLY_FOR_OS = 'linux';
     const IMAGES_GENERATED_FOR_PHP = '5.5';
@@ -87,12 +88,14 @@ class Fixture extends PHPUnit_Framework_Assert
      */
     protected static function getPythonBinary()
     {
-        if(\Piwik\SettingsServer::isWindows()) {
+        if (\Piwik\SettingsServer::isWindows()) {
             return "C:\Python27\python.exe";
         }
-        if(SystemTestCase::isTravisCI()) {
+
+        if (SystemTestCase::isTravisCI()) {
             return 'python2.6';
         }
+
         return 'python';
     }
 
@@ -850,12 +853,3 @@ class Fixture extends PHPUnit_Framework_Assert
         return $result;
     }
 }
-
-// needed by tests that use stored segments w/ the proxy index.php
-class OverrideLogin extends Access
-{
-    public function getLogin()
-    {
-        return 'superUserLogin';
-    }
-}
\ No newline at end of file
diff --git a/tests/PHPUnit/Framework/Mock/FakeAccess.php b/tests/PHPUnit/Framework/Mock/FakeAccess.php
new file mode 100644
index 0000000000..f750e1814c
--- /dev/null
+++ b/tests/PHPUnit/Framework/Mock/FakeAccess.php
@@ -0,0 +1,181 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+namespace Piwik\Tests\Framework\Mock;
+
+use Piwik\Plugins\SitesManager\API;
+use Piwik\Site;
+use Exception;
+
+/**
+ * FakeAccess for UnitTests
+ */
+class FakeAccess
+{
+    public static $superUser = false;
+    public static $idSitesAdmin = array();
+    public static $idSitesView = array();
+    public static $identity = 'superUserLogin';
+    public static $superUserLogin = 'superUserLogin';
+
+    public function getTokenAuth()
+    {
+        return false;
+    }
+
+    public function __construct()
+    {
+        self::$superUser    = false;
+        self::$idSitesAdmin = array();
+        self::$idSitesView  = array();
+        self::$identity     = 'superUserLogin';
+    }
+
+    public static function setIdSitesAdmin($ids)
+    {
+        self::$superUser    = false;
+        self::$idSitesAdmin = $ids;
+    }
+
+    public static function setIdSitesView($ids)
+    {
+        self::$superUser   = false;
+        self::$idSitesView = $ids;
+    }
+
+    public static function hasSuperUserAccess()
+    {
+        return self::$superUser;
+    }
+
+    public static function checkUserHasSuperUserAccess()
+    {
+        if (!self::$superUser) {
+            throw new Exception("checkUserHasSuperUserAccess Fake exception // string not to be tested");
+        }
+    }
+
+    public static function setSuperUserAccess($bool = true)
+    {
+        self::$superUser = $bool;
+    }
+
+    public static function reloadAccess()
+    {
+    }
+
+    public static function checkUserHasAdminAccess($idSites)
+    {
+        if (!self::$superUser) {
+            $websitesAccess = self::$idSitesAdmin;
+        } else {
+            $websitesAccess = API::getInstance()->getAllSitesId();
+        }
+
+        $idSites = Site::getIdSitesFromIdSitesString($idSites);
+
+        foreach ($idSites as $idsite) {
+            if (!in_array($idsite, $websitesAccess)) {
+                throw new Exception("checkUserHasAdminAccess Fake exception // string not to be tested");
+            }
+        }
+    }
+
+    //means at least view access
+    public static function checkUserHasViewAccess($idSites)
+    {
+        if (self::$superUser) {
+            return;
+        }
+
+        $websitesAccess = array_merge(self::$idSitesView, self::$idSitesAdmin);
+
+        if (!is_array($idSites)) {
+            if ($idSites == 'all') {
+                $idSites = API::getInstance()->getAllSitesId();
+            } else {
+                $idSites = explode(',', $idSites);
+            }
+        }
+
+        if (empty($websitesAccess)) {
+            throw new Exception("checkUserHasViewAccess Fake exception // string not to be tested");
+        }
+
+        foreach ($idSites as $idsite) {
+            if (!in_array($idsite, $websitesAccess)) {
+                throw new Exception("checkUserHasViewAccess Fake exception // string not to be tested");
+            }
+        }
+    }
+
+    public static function checkUserHasSomeViewAccess()
+    {
+        if (!self::$superUser) {
+            if (count(self::$idSitesView) == 0) {
+                throw new Exception("checkUserHasSomeViewAccess Fake exception // string not to be tested");
+            }
+        } else {
+            return;
+        }
+    }
+
+    //means at least view access
+    public static function checkUserHasSomeAdminAccess()
+    {
+        if (!self::$superUser) {
+            if (count(self::$idSitesAdmin) == 0) {
+                throw new Exception("checkUserHasSomeAdminAccess Fake exception // string not to be tested");
+            }
+        } else {
+            return; //Super User has some admin rights
+        }
+    }
+
+    public static function getLogin()
+    {
+        return self::$identity;
+    }
+
+    public static function getSitesIdWithAdminAccess()
+    {
+        if (self::$superUser) {
+            return API::getInstance()->getAllSitesId();
+        }
+
+        return self::$idSitesAdmin;
+    }
+
+    public static function getSitesIdWithViewAccess()
+    {
+        if (self::$superUser) {
+            return API::getInstance()->getAllSitesId();
+        }
+
+        return self::$idSitesView;
+    }
+
+    public static function getSitesIdWithAtLeastViewAccess()
+    {
+        if (self::$superUser) {
+            return API::getInstance()->getAllSitesId();
+        }
+
+        return array_merge(self::$idSitesView, self::$idSitesAdmin);
+    }
+
+    public function getRawSitesWithSomeViewAccess($login)
+    {
+        $result = array();
+
+        foreach (array_merge(self::$idSitesView, self::$idSitesAdmin) as $idSite) {
+            $result[] = array('idsite' => $idSite);
+        }
+
+        return $result;
+    }
+}
\ No newline at end of file
diff --git a/tests/PHPUnit/MockLocationProvider.php b/tests/PHPUnit/Framework/Mock/LocationProvider.php
similarity index 87%
rename from tests/PHPUnit/MockLocationProvider.php
rename to tests/PHPUnit/Framework/Mock/LocationProvider.php
index 45cb0c8c04..646225af62 100755
--- a/tests/PHPUnit/MockLocationProvider.php
+++ b/tests/PHPUnit/Framework/Mock/LocationProvider.php
@@ -5,10 +5,11 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+namespace Piwik\Tests\Framework\Mock;
 
-use Piwik\Plugins\UserCountry\LocationProvider;
+use Piwik\Plugins\UserCountry\LocationProvider as CountryLocationProvider;
 
-class MockLocationProvider extends LocationProvider
+class LocationProvider extends CountryLocationProvider
 {
     public static $locations = array();
     private $currentLocation = 0;
diff --git a/tests/PHPUnit/MockPiwikOption.php b/tests/PHPUnit/Framework/Mock/PiwikOption.php
similarity index 88%
rename from tests/PHPUnit/MockPiwikOption.php
rename to tests/PHPUnit/Framework/Mock/PiwikOption.php
index 1aaeea92fc..302232b94b 100644
--- a/tests/PHPUnit/MockPiwikOption.php
+++ b/tests/PHPUnit/Framework/Mock/PiwikOption.php
@@ -5,9 +5,11 @@
  * @link http://piwik.org
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
+namespace Piwik\Tests\Framework\Mock;
+
 use Piwik\Option;
 
-class MockPiwikOption extends Option
+class PiwikOption extends Option
 {
     private $forcedOptionValue = false;
 
diff --git a/tests/PHPUnit/Framework/OverrideLogin.php b/tests/PHPUnit/Framework/OverrideLogin.php
new file mode 100644
index 0000000000..20a30fa8fa
--- /dev/null
+++ b/tests/PHPUnit/Framework/OverrideLogin.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+namespace Piwik\Tests\Framework;
+
+use Piwik\Access;
+
+// needed by tests that use stored segments w/ the proxy index.php
+class OverrideLogin extends Access
+{
+    public function getLogin()
+    {
+        return 'superUserLogin';
+    }
+}
\ No newline at end of file
diff --git a/tests/PHPUnit/Framework/TestCase/BenchmarkTestCase.php b/tests/PHPUnit/Framework/TestCase/BenchmarkTestCase.php
new file mode 100755
index 0000000000..e2a782b094
--- /dev/null
+++ b/tests/PHPUnit/Framework/TestCase/BenchmarkTestCase.php
@@ -0,0 +1,116 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+namespace Piwik\Tests\Framework\TestCase;
+
+use Piwik\Config;
+use Piwik\Db;
+use Piwik\Plugins\Goals\API;
+use Exception;
+use Piwik\Tests\Framework\Fixture;
+
+require_once PIWIK_INCLUDE_PATH . '/tests/LocalTracker.php';
+
+// require fixtures
+foreach (glob(PIWIK_INCLUDE_PATH . '/tests/PHPUnit/Benchmarks/Fixtures/*.php') as $file) {
+    require_once $file;
+}
+
+/**
+ * Base class for benchmarks.
+ */
+abstract class BenchmarkTestCase extends SystemTestCase
+{
+    public static $fixture;
+
+    public static function setUpBeforeClass()
+    {
+        $dbName = false;
+        if (!empty($GLOBALS['PIWIK_BENCHMARK_DATABASE'])) {
+            $dbName = $GLOBALS['PIWIK_BENCHMARK_DATABASE'];
+        }
+
+        // connect to database
+        self::createTestConfig();
+        self::connectWithoutDatabase();
+
+        // create specified fixture (global var not set, use default no-data fixture (see end of this file))
+        if (empty($GLOBALS['PIWIK_BENCHMARK_FIXTURE'])) {
+            $fixtureName = 'Piwik_Test_Fixture_EmptyOneSite';
+        } else {
+            $fixtureName = 'Piwik_Test_Fixture_' . $GLOBALS['PIWIK_BENCHMARK_FIXTURE'];
+        }
+        self::$fixture = new $fixtureName;
+
+        // figure out if the desired fixture has already been setup, and if not empty the database
+        $installedFixture = false;
+        try {
+            if (isset(self::$fixture->tablesPrefix)) {
+                Config::getInstance()->database['tables_prefix'] = self::$fixture->tablesPrefix;
+            }
+
+            Db::query("USE " . $dbName);
+            $installedFixture = \Piwik\Option::get('benchmark_fixture_name');
+        } catch (Exception $ex) {
+            // ignore
+        }
+
+        $createEmptyDatabase = $fixtureName != $installedFixture;
+        parent::_setUpBeforeClass($dbName, $createEmptyDatabase);
+
+        // if we created an empty database, setup the fixture
+        if ($createEmptyDatabase) {
+            self::$fixture->setUp();
+            \Piwik\Option::set('benchmark_fixture_name', $fixtureName);
+        }
+    }
+
+    public static function tearDownAfterClass()
+    {
+        // only drop the database if PIWIK_BENCHMARK_DATABASE isn't set
+        $dropDatabase = empty($GLOBALS['PIWIK_BENCHMARK_DATABASE']);
+        parent::_tearDownAfterClass($dropDatabase);
+    }
+
+    /**
+     * Creates a tracking object that invokes the tracker directly (w/o going through HTTP).
+     */
+    public static function getLocalTracker($idSite)
+    {
+        $t = new \Piwik_LocalTracker($idSite, Fixture::getTrackerUrl());
+        $t->setUserAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 (.NET CLR 3.5.30729)");
+        $t->setBrowserLanguage('fr');
+        $t->setLocalTime('12:34:06');
+        $t->setResolution(1024, 768);
+        $t->setBrowserHasCookies(true);
+        $t->setPlugins($flash = true, $java = true, $director = false);
+        $t->setTokenAuth(Fixture::getTokenAuth());
+        return $t;
+    }
+}
+
+/**
+ * Reusable fixture. Adds one site w/ goals and no visit data.
+ */
+class Piwik_Test_Fixture_EmptyOneSite
+{
+    public $date = '2010-01-01';
+    public $period = 'day';
+    public $idSite = 1;
+
+    public function setUp()
+    {
+        // add one site
+        Fixture::createWebsite(
+            $this->date, $ecommerce = 1, $siteName = "Site #0", $siteUrl = "http://whatever.com/");
+
+        // add two goals
+        $goals = API::getInstance();
+        $goals->addGoal($this->idSite, 'all', 'url', 'http', 'contains', false, 5);
+        $goals->addGoal($this->idSite, 'all', 'url', 'http', 'contains');
+    }
+}
diff --git a/tests/PHPUnit/Framework/TestCase/ConsoleCommandTestCase.php b/tests/PHPUnit/Framework/TestCase/ConsoleCommandTestCase.php
new file mode 100644
index 0000000000..eb2805397e
--- /dev/null
+++ b/tests/PHPUnit/Framework/TestCase/ConsoleCommandTestCase.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+namespace Piwik\Tests\Framework\TestCase;
+
+use Piwik\Config;
+use Piwik\Console;
+use Symfony\Component\Console\Tester\ApplicationTester;
+
+/**
+ * Base class for test cases that test Piwik console commands. Derives from SystemTestCase
+ * so the entire Piwik environment is set up.
+ *
+ * This will create an ApplicationTester instance (provided by Symfony) which should be used to
+ * test commands like this:
+ *
+ *     public function testThisAndThat()
+ *     {
+ *         $result = $this->applicationTester->run(array(
+ *             'command' => 'my-command',
+ *             'arg1' => 'value1',
+ *             'arg2' => 'value2',
+ *             '--option' => true,
+ *             '--another-option' => 'value3'
+ *         ));
+ *         $this->assertEquals(0, $result, $this->getCommandDisplayOutputErrorMessage());
+ *
+ *         // other checks
+ *     }
+ */
+class ConsoleCommandTestCase extends SystemTestCase
+{
+    protected $applicationTester = null;
+
+    public function setUp()
+    {
+        parent::setUp();
+
+        $application = new Console();
+        $application->setAutoExit(false);
+
+        $this->applicationTester = new ApplicationTester($application);
+
+        Config::unsetInstance();
+    }
+
+    protected function getCommandDisplayOutputErrorMessage()
+    {
+        return "Command did not behave as expected. Command output: " . $this->applicationTester->getDisplay();
+    }
+}
\ No newline at end of file
diff --git a/tests/PHPUnit/Impl/IntegrationTestCase.php b/tests/PHPUnit/Framework/TestCase/IntegrationTestCase.php
similarity index 96%
rename from tests/PHPUnit/Impl/IntegrationTestCase.php
rename to tests/PHPUnit/Framework/TestCase/IntegrationTestCase.php
index da805e2e07..73238169d6 100644
--- a/tests/PHPUnit/Impl/IntegrationTestCase.php
+++ b/tests/PHPUnit/Framework/TestCase/IntegrationTestCase.php
@@ -6,10 +6,11 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 
-namespace Piwik\Tests\Impl;
+namespace Piwik\Tests\Framework\TestCase;
 
 use Piwik\Config;
 use Piwik\Db;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Tests extending IntegrationTestCase are much slower to run: the setUp will
diff --git a/tests/PHPUnit/Impl/SystemTestCase.php b/tests/PHPUnit/Framework/TestCase/SystemTestCase.php
similarity index 96%
rename from tests/PHPUnit/Impl/SystemTestCase.php
rename to tests/PHPUnit/Framework/TestCase/SystemTestCase.php
index 222fc5a38f..d0259cbabb 100755
--- a/tests/PHPUnit/Impl/SystemTestCase.php
+++ b/tests/PHPUnit/Framework/TestCase/SystemTestCase.php
@@ -6,7 +6,7 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 
-namespace Piwik\Tests\Impl;
+namespace Piwik\Tests\Framework\TestCase;
 
 use Exception;
 use Piwik\ArchiveProcessor\Rules;
@@ -16,10 +16,13 @@ use Piwik\DataAccess\ArchiveTableCreator;
 use Piwik\Db;
 use Piwik\DbHelper;
 use Piwik\ReportRenderer;
+use Piwik\Tests\Framework\TestRequest\ApiTestConfig;
+use Piwik\Tests\Framework\TestRequest\Collection;
+use Piwik\Tests\Framework\TestRequest\Response;
 use Piwik\Translate;
-use Piwik\Tests\Impl\Fixture;
 use Piwik\Log;
 use PHPUnit_Framework_TestCase;
+use Piwik\Tests\Framework\Fixture;
 
 require_once PIWIK_INCLUDE_PATH . '/libs/PiwikTracker/PiwikTracker.php';
 
@@ -275,7 +278,7 @@ abstract class SystemTestCase extends PHPUnit_Framework_TestCase
         $_GET = $requestUrl;
         unset($_GET['serialize']);
 
-        $processedResponse = TestRequestResponse::loadFromApi($params, $requestUrl);
+        $processedResponse = Response::loadFromApi($params, $requestUrl);
         if (empty($compareAgainst)) {
             $processedResponse->save($processedFilePath);
         }
@@ -283,20 +286,20 @@ abstract class SystemTestCase extends PHPUnit_Framework_TestCase
         $_GET = $originalGET;
 
         try {
-            $expectedResponse = TestRequestResponse::loadFromFile($expectedFilePath, $params, $requestUrl);
+            $expectedResponse = Response::loadFromFile($expectedFilePath, $params, $requestUrl);
         } catch (Exception $ex) {
             $this->handleMissingExpectedFile($expectedFilePath, $processedResponse);
             return;
         }
 
         try {
-            TestRequestResponse::assertEquals($expectedResponse, $processedResponse, "Differences with expected in '$processedFilePath'");
+            Response::assertEquals($expectedResponse, $processedResponse, "Differences with expected in '$processedFilePath'");
         } catch (Exception $ex) {
             $this->comparisonFailures[] = $ex;
         }
     }
 
-    private function handleMissingExpectedFile($expectedFilePath, TestRequestResponse $processedResponse)
+    private function handleMissingExpectedFile($expectedFilePath, Response $processedResponse)
     {
         $this->missingExpectedFiles[] = $expectedFilePath;
 
@@ -427,7 +430,7 @@ abstract class SystemTestCase extends PHPUnit_Framework_TestCase
             $this->changeLanguage($testConfig->language);
         }
 
-        $testRequests = new TestRequestCollection($api, $testConfig, $api);
+        $testRequests = new Collection($api, $testConfig, $api);
 
         foreach ($testRequests->getRequestUrls() as $apiId => $requestUrl) {
             $this->_testApiUrl($testName . $testConfig->testSuffix, $apiId, $requestUrl, $testConfig->compareAgainst, $testConfig->xmlFieldsToRemove, $params);
@@ -490,7 +493,9 @@ abstract class SystemTestCase extends PHPUnit_Framework_TestCase
      */
     public static function getPathToTestDirectory()
     {
-        return dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'System';
+        $up = DIRECTORY_SEPARATOR . '..';
+
+        return dirname(__FILE__) . $up . $up . DIRECTORY_SEPARATOR . 'System';
     }
 
     /**
@@ -574,7 +579,7 @@ abstract class SystemTestCase extends PHPUnit_Framework_TestCase
 
     protected function skipWhenPhp53()
     {
-        if(\Piwik\Tests\Impl\SystemTestCase::isPhpVersion53()) {
+        if(self::isPhpVersion53()) {
             $this->markTestSkipped('Sometimes fail on php 5.3');
         }
     }
diff --git a/tests/PHPUnit/Impl/ApiTestConfig.php b/tests/PHPUnit/Framework/TestRequest/ApiTestConfig.php
similarity index 98%
rename from tests/PHPUnit/Impl/ApiTestConfig.php
rename to tests/PHPUnit/Framework/TestRequest/ApiTestConfig.php
index 5458f88db6..f8fa02a691 100644
--- a/tests/PHPUnit/Impl/ApiTestConfig.php
+++ b/tests/PHPUnit/Framework/TestRequest/ApiTestConfig.php
@@ -6,7 +6,7 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 
-namespace Piwik\Tests\Impl;
+namespace Piwik\Tests\Framework\TestRequest;
 
 use \Exception;
 
@@ -116,7 +116,7 @@ class ApiTestConfig
 
     /**
      * This property is used to test API methods that return subtables and should be set to the API method that
-     * returns the super table of the API method being tested. If set, TestRequestCollection will look for the
+     * returns the super table of the API method being tested. If set, TestRequest\Collection will look for the
      * first valid idSubtable value to use in the test request. Since these values are assigned dynamically,
      * there's no other way to set idSubtable.
      * 
diff --git a/tests/PHPUnit/Impl/TestRequestCollection.php b/tests/PHPUnit/Framework/TestRequest/Collection.php
similarity index 99%
rename from tests/PHPUnit/Impl/TestRequestCollection.php
rename to tests/PHPUnit/Framework/TestRequest/Collection.php
index 556ab1bb24..da1987181b 100644
--- a/tests/PHPUnit/Impl/TestRequestCollection.php
+++ b/tests/PHPUnit/Framework/TestRequest/Collection.php
@@ -6,20 +6,20 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 
-namespace Piwik\Tests\Impl;
+namespace Piwik\Tests\Framework\TestRequest;
 
 use Piwik\API\DocumentationGenerator;
 use Piwik\API\Proxy;
 use Piwik\API\Request;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\UrlHelper;
 use \Exception;
-use \PHPUnit_Framework_Assert;
 
 /**
  * Utility class used to generate a set of API requests given API methods to call, API
  * methods to exclude, and an ApiTestConfig instance.
  */
-class TestRequestCollection
+class Collection
 {
     public $defaultApiNotToCall = array(
         'LanguagesManager',
diff --git a/tests/PHPUnit/Impl/TestRequestResponse.php b/tests/PHPUnit/Framework/TestRequest/Response.php
similarity index 95%
rename from tests/PHPUnit/Impl/TestRequestResponse.php
rename to tests/PHPUnit/Framework/TestRequest/Response.php
index 026f2c43b4..76bf43c149 100644
--- a/tests/PHPUnit/Impl/TestRequestResponse.php
+++ b/tests/PHPUnit/Framework/TestRequest/Response.php
@@ -6,16 +6,17 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 
-namespace Piwik\Tests\Impl;
+namespace Piwik\Tests\Framework\TestRequest;
 
 use Piwik\API\Request;
 use PHPUnit_Framework_Assert as Asserts;
 use Exception;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 
 /**
  * Utility class used to obtain and process API responses for API tests.
  */
-class TestRequestResponse
+class Response
 {
     private $processedResponseText;
 
@@ -50,7 +51,7 @@ class TestRequestResponse
             throw new Exception("$path does not exist");
         }
 
-        return new TestRequestResponse($contents, $params, $requestUrl);
+        return new Response($contents, $params, $requestUrl);
     }
 
     public static function loadFromApi($params, $requestUrl)
@@ -61,10 +62,10 @@ class TestRequestResponse
         // with format=original, objects or php arrays can be returned.
         $response = (string) $testRequest->process();
 
-        return new TestRequestResponse($response, $params, $requestUrl);
+        return new Response($response, $params, $requestUrl);
     }
 
-    public static function assertEquals(TestRequestResponse $expected, TestRequestResponse $actual, $message = false)
+    public static function assertEquals(Response $expected, Response $actual, $message = false)
     {
         $expectedText = $expected->getResponseText();
         $actualText = $actual->getResponseText();
@@ -121,10 +122,11 @@ class TestRequestResponse
 
     private function normalizeEncodingPhp533($apiResponse)
     {
-        if(!SystemTestCase::isPhpVersion53()
+        if (!SystemTestCase::isPhpVersion53()
             || strpos($apiResponse, '<result') === false) {
             return $apiResponse;
         }
+
         return str_replace('&amp;#039;', "'", $apiResponse);
     }
 
@@ -250,6 +252,7 @@ class TestRequestResponse
         $response = str_replace('.00</revenue>', '</revenue>', $response);
         $response = str_replace('.1</revenue>', '</revenue>', $response);
         $response = str_replace('.11</revenue>', '</revenue>', $response);
+
         return $response;
     }
 
@@ -258,6 +261,7 @@ class TestRequestResponse
         if (strpos($this->requestUrl['format'], 'json') === 0) {
             $apiResponse = str_replace('&nbsp;', '\u00a0', $apiResponse);
         }
+
         return $apiResponse;
     }
 }
\ No newline at end of file
diff --git a/tests/PHPUnit/Integration/AccessTest.php b/tests/PHPUnit/Integration/AccessTest.php
index aad0e22766..f309d1dc99 100644
--- a/tests/PHPUnit/Integration/AccessTest.php
+++ b/tests/PHPUnit/Integration/AccessTest.php
@@ -7,7 +7,7 @@
  */
 use Piwik\Access;
 use Piwik\AuthResult;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * Class Core_AccessTest
diff --git a/tests/PHPUnit/Integration/ArchiveProcessingTest.php b/tests/PHPUnit/Integration/ArchiveProcessingTest.php
index 88ec83bea6..6514a10134 100644
--- a/tests/PHPUnit/Integration/ArchiveProcessingTest.php
+++ b/tests/PHPUnit/Integration/ArchiveProcessingTest.php
@@ -20,7 +20,7 @@ use Piwik\Plugins\SitesManager\API;
 use Piwik\Segment;
 use Piwik\SettingsServer;
 use Piwik\Site;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 class Core_ArchiveProcessorTest extends ArchiveProcessor\Loader {
 
diff --git a/tests/PHPUnit/Integration/CliMultiTest.php b/tests/PHPUnit/Integration/CliMultiTest.php
index 65df6b89ba..d96a109e66 100644
--- a/tests/PHPUnit/Integration/CliMultiTest.php
+++ b/tests/PHPUnit/Integration/CliMultiTest.php
@@ -8,8 +8,8 @@
 
 use Piwik\CliMulti;
 use Piwik\Version;
-use Piwik\Tests\Impl\SystemTestCase;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Class Core_CliMultiTest
diff --git a/tests/PHPUnit/Integration/CronArchive/SharedSiteIdsTest.php b/tests/PHPUnit/Integration/CronArchive/SharedSiteIdsTest.php
index 4fcba84352..43962ff17b 100644
--- a/tests/PHPUnit/Integration/CronArchive/SharedSiteIdsTest.php
+++ b/tests/PHPUnit/Integration/CronArchive/SharedSiteIdsTest.php
@@ -7,7 +7,7 @@
  */
 
 use Piwik\CronArchive\SharedSiteIds;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * @group Core
diff --git a/tests/PHPUnit/Integration/DbTest.php b/tests/PHPUnit/Integration/DbTest.php
index 562e8f9a35..c7a8e465eb 100644
--- a/tests/PHPUnit/Integration/DbTest.php
+++ b/tests/PHPUnit/Integration/DbTest.php
@@ -7,7 +7,7 @@
  */
 use Piwik\Common;
 use Piwik\Db;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * Class Core_DbTest
diff --git a/tests/PHPUnit/Integration/HttpTest.php b/tests/PHPUnit/Integration/HttpTest.php
index 07d7736bfd..4b54785f66 100644
--- a/tests/PHPUnit/Integration/HttpTest.php
+++ b/tests/PHPUnit/Integration/HttpTest.php
@@ -6,7 +6,7 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 use Piwik\Http;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * @group HttpTest
diff --git a/tests/PHPUnit/Integration/JsProxyTest.php b/tests/PHPUnit/Integration/JsProxyTest.php
index dc900930cf..d95224a452 100644
--- a/tests/PHPUnit/Integration/JsProxyTest.php
+++ b/tests/PHPUnit/Integration/JsProxyTest.php
@@ -6,7 +6,7 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 class Test_Piwik_JsProxy extends PHPUnit_Framework_TestCase
 {
diff --git a/tests/PHPUnit/Integration/LogTest.php b/tests/PHPUnit/Integration/LogTest.php
index 6e453fa858..8934e31e85 100644
--- a/tests/PHPUnit/Integration/LogTest.php
+++ b/tests/PHPUnit/Integration/LogTest.php
@@ -12,7 +12,7 @@ use Piwik\Error;
 use Piwik\ExceptionHandler;
 use Piwik\Log;
 use Piwik\Plugins\TestPlugin\TestLoggingUtility;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 require_once PIWIK_INCLUDE_PATH . '/tests/resources/TestPluginLogClass.php';
 
diff --git a/tests/PHPUnit/Integration/OptionTest.php b/tests/PHPUnit/Integration/OptionTest.php
index 42c8418e12..0e6b8cba7d 100644
--- a/tests/PHPUnit/Integration/OptionTest.php
+++ b/tests/PHPUnit/Integration/OptionTest.php
@@ -8,7 +8,7 @@
 use Piwik\Common;
 use Piwik\Db;
 use Piwik\Option;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * Class Core_OptionTest
diff --git a/tests/PHPUnit/Integration/PiwikTest.php b/tests/PHPUnit/Integration/PiwikTest.php
index c73f8bb0b4..f81aeae081 100644
--- a/tests/PHPUnit/Integration/PiwikTest.php
+++ b/tests/PHPUnit/Integration/PiwikTest.php
@@ -11,7 +11,7 @@ use Piwik\MetricsFormatter;
 use Piwik\Piwik;
 use Piwik\Plugins\SitesManager\API;
 use Piwik\Translate;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * Class Core_PiwikTest
diff --git a/tests/PHPUnit/Integration/Plugin/SettingsTest.php b/tests/PHPUnit/Integration/Plugin/SettingsTest.php
index 29b4cb3b39..ffec54ce58 100644
--- a/tests/PHPUnit/Integration/Plugin/SettingsTest.php
+++ b/tests/PHPUnit/Integration/Plugin/SettingsTest.php
@@ -9,7 +9,7 @@
 use Piwik\Access;
 use Piwik\Plugin\Settings as PluginSettings;
 use Piwik\Settings\Setting;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 class CorePluginSettingsTest extends \Piwik\Plugins\ExampleSettingsPlugin\Settings {
 
diff --git a/tests/PHPUnit/Integration/ReportTest.php b/tests/PHPUnit/Integration/ReportTest.php
index ce3d87d38f..a9a3ef74be 100644
--- a/tests/PHPUnit/Integration/ReportTest.php
+++ b/tests/PHPUnit/Integration/ReportTest.php
@@ -18,8 +18,8 @@ use Piwik\WidgetsList;
 use Piwik\Translate;
 use Piwik\Menu\MenuReporting;
 use Piwik\Plugin\Manager as PluginManager;
-use Piwik\Tests\Impl\Fixture;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 class GetBasicReport extends Report
 {
diff --git a/tests/PHPUnit/Integration/SegmentTest.php b/tests/PHPUnit/Integration/SegmentTest.php
index 15277e379d..c4721b2339 100644
--- a/tests/PHPUnit/Integration/SegmentTest.php
+++ b/tests/PHPUnit/Integration/SegmentTest.php
@@ -8,7 +8,7 @@
 use Piwik\Access;
 use Piwik\Common;
 use Piwik\Segment;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * @group SegmentTest
diff --git a/tests/PHPUnit/Integration/ServeStaticFileTest.php b/tests/PHPUnit/Integration/ServeStaticFileTest.php
index c8ff7f9c69..bdf288efd4 100644
--- a/tests/PHPUnit/Integration/ServeStaticFileTest.php
+++ b/tests/PHPUnit/Integration/ServeStaticFileTest.php
@@ -17,7 +17,7 @@
 
 use Piwik\ProxyHttp;
 use Piwik\SettingsServer;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 define("TEST_FILE_LOCATION", realpath(dirname(__FILE__) . "/../../resources/lipsum.txt"));
 define("TEST_FILE_CONTENT_TYPE", "text/plain");
diff --git a/tests/PHPUnit/Integration/SqlTest.php b/tests/PHPUnit/Integration/SqlTest.php
index 3d6fbac9e3..aed82013c9 100755
--- a/tests/PHPUnit/Integration/SqlTest.php
+++ b/tests/PHPUnit/Integration/SqlTest.php
@@ -1,6 +1,6 @@
 <?php
 use Piwik\Db;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * Piwik - free/libre analytics platform
diff --git a/tests/PHPUnit/Integration/Tracker/ActionTest.php b/tests/PHPUnit/Integration/Tracker/ActionTest.php
index 17da150bd6..dd3388a56c 100644
--- a/tests/PHPUnit/Integration/Tracker/ActionTest.php
+++ b/tests/PHPUnit/Integration/Tracker/ActionTest.php
@@ -13,7 +13,7 @@ use Piwik\Tracker\PageUrl;
 use Piwik\Tracker\Request;
 use Piwik\Translate;
 use Piwik\Plugin\Manager as PluginManager;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * Piwik - free/libre analytics platform
diff --git a/tests/PHPUnit/Integration/Tracker/DbTest.php b/tests/PHPUnit/Integration/Tracker/DbTest.php
index 91d01d0cfe..8bfdd5232f 100644
--- a/tests/PHPUnit/Integration/Tracker/DbTest.php
+++ b/tests/PHPUnit/Integration/Tracker/DbTest.php
@@ -7,7 +7,7 @@
  */
 use Piwik\Common;
 use Piwik\Db;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * Tracker DB test
diff --git a/tests/PHPUnit/Integration/Tracker/Visit2Test.php b/tests/PHPUnit/Integration/Tracker/Visit2Test.php
index a5b3c0541c..5c191d90ee 100644
--- a/tests/PHPUnit/Integration/Tracker/Visit2Test.php
+++ b/tests/PHPUnit/Integration/Tracker/Visit2Test.php
@@ -14,8 +14,8 @@ use Piwik\Tracker\Request;
 use Piwik\Tracker\Visitor;
 use Piwik\Piwik;
 use Piwik\EventDispatcher;
-use Piwik\Tests\Impl\Fixture;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 class FakeTrackerVisitDimension1 extends VisitDimension
 {
diff --git a/tests/PHPUnit/Integration/Tracker/VisitTest.php b/tests/PHPUnit/Integration/Tracker/VisitTest.php
index cdc69110d4..0d1837e2c1 100644
--- a/tests/PHPUnit/Integration/Tracker/VisitTest.php
+++ b/tests/PHPUnit/Integration/Tracker/VisitTest.php
@@ -10,7 +10,7 @@ use Piwik\IP;
 use Piwik\Plugins\SitesManager\API;
 use Piwik\Tracker\Request;
 use Piwik\Tracker\VisitExcluded;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * Class Core_Tracker_VisitTest
diff --git a/tests/PHPUnit/Integration/TrackerTest.php b/tests/PHPUnit/Integration/TrackerTest.php
index 53865b0993..59fa07cd97 100644
--- a/tests/PHPUnit/Integration/TrackerTest.php
+++ b/tests/PHPUnit/Integration/TrackerTest.php
@@ -6,8 +6,8 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  */
 
-use Piwik\Tests\Impl\Fixture;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * @group Core
diff --git a/tests/PHPUnit/Integration/TravisEnvironmentTest.php b/tests/PHPUnit/Integration/TravisEnvironmentTest.php
index c8fce30ba2..5faf9cbe10 100644
--- a/tests/PHPUnit/Integration/TravisEnvironmentTest.php
+++ b/tests/PHPUnit/Integration/TravisEnvironmentTest.php
@@ -1,7 +1,7 @@
 <?php
 
 use Piwik\Translate;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * Class TravisEnvironmentTest
diff --git a/tests/PHPUnit/Integration/UpdaterTest.php b/tests/PHPUnit/Integration/UpdaterTest.php
index a0b7662b63..563de9abfe 100644
--- a/tests/PHPUnit/Integration/UpdaterTest.php
+++ b/tests/PHPUnit/Integration/UpdaterTest.php
@@ -7,9 +7,9 @@
  */
 namespace Piwik\Tests\Integration\Core;
 
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 use Piwik\Updater;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Class Core_UpdaterTest
diff --git a/tests/PHPUnit/Integration/ViewDataTable/ManagerTest.php b/tests/PHPUnit/Integration/ViewDataTable/ManagerTest.php
index 6f73818801..b6ef41d9f6 100644
--- a/tests/PHPUnit/Integration/ViewDataTable/ManagerTest.php
+++ b/tests/PHPUnit/Integration/ViewDataTable/ManagerTest.php
@@ -8,7 +8,7 @@
 
 use Piwik\Access;
 use Piwik\ViewDataTable\Manager as ViewDataTableManager;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * Class Core_Plugin_SettingsTest
diff --git a/tests/PHPUnit/Integration/WidgetsListTest.php b/tests/PHPUnit/Integration/WidgetsListTest.php
index 865dd5a72a..9c980e872c 100644
--- a/tests/PHPUnit/Integration/WidgetsListTest.php
+++ b/tests/PHPUnit/Integration/WidgetsListTest.php
@@ -9,8 +9,8 @@
 use Piwik\Access;
 use Piwik\Plugins\Goals\API;
 use Piwik\WidgetsList;
-use Piwik\Tests\Impl\Fixture;
-use Piwik\Tests\Impl\IntegrationTestCase;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
 /**
  * Class Core_WidgetsListTest
diff --git a/tests/PHPUnit/IntegrationTestCase.php b/tests/PHPUnit/IntegrationTestCase.php
index 8cd33978dc..6c1c495340 100644
--- a/tests/PHPUnit/IntegrationTestCase.php
+++ b/tests/PHPUnit/IntegrationTestCase.php
@@ -7,17 +7,17 @@
  */
 
 /**
- * @deprecated since 2.8.0 extend \Piwik\Tests\Impl\SystemTestCase instead
+ * @deprecated since 2.8.0 extend \Piwik\Tests\Framework\TestCase\SystemTestCase instead
  */
-class IntegrationTestCase extends \Piwik\Tests\Impl\SystemTestCase
+class IntegrationTestCase extends \Piwik\Tests\Framework\TestCase\SystemTestCase
 {
 
     public static function setUpBeforeClass()
     {
-        \Piwik\Log::debug('\IntegrationTestCase is deprecated since 2.8.0 extend \Piwik\Tests\Impl\SystemTestCase instead');
+        \Piwik\Log::debug('\IntegrationTestCase is deprecated since 2.8.0 extend \Piwik\Tests\Framework\TestCase\SystemTestCase instead');
 
         parent::setUpBeforeClass();
     }
 }
 
-IntegrationTestCase::$fixture = new \Piwik\Tests\Impl\Fixture();
\ No newline at end of file
+IntegrationTestCase::$fixture = new \Piwik\Tests\Framework\Fixture();
\ No newline at end of file
diff --git a/tests/PHPUnit/System/AnnotationsTest.php b/tests/PHPUnit/System/AnnotationsTest.php
index 42a5bb2376..722b104978 100755
--- a/tests/PHPUnit/System/AnnotationsTest.php
+++ b/tests/PHPUnit/System/AnnotationsTest.php
@@ -10,7 +10,7 @@ namespace Piwik\Tests\System;
 use Piwik\Access;
 use Piwik\API\Request;
 use Piwik\Plugins\Annotations\API;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\TwoSitesWithAnnotations;
 use FakeAccess;
 use Exception;
diff --git a/tests/PHPUnit/System/ApiGetReportMetadataTest.php b/tests/PHPUnit/System/ApiGetReportMetadataTest.php
index 7772da6224..1270361c39 100755
--- a/tests/PHPUnit/System/ApiGetReportMetadataTest.php
+++ b/tests/PHPUnit/System/ApiGetReportMetadataTest.php
@@ -8,7 +8,7 @@
 namespace Piwik\Tests\System;
 
 use Piwik\API\Proxy;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\ThreeGoalsOnePageview;
 
 /**
diff --git a/tests/PHPUnit/System/ApiGetReportMetadataYearTest.php b/tests/PHPUnit/System/ApiGetReportMetadataYearTest.php
index 78edafbb19..c9b8f30e0d 100755
--- a/tests/PHPUnit/System/ApiGetReportMetadataYearTest.php
+++ b/tests/PHPUnit/System/ApiGetReportMetadataYearTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\InvalidVisits;
 
 /**
diff --git a/tests/PHPUnit/System/ArchiveCronTest.php b/tests/PHPUnit/System/ArchiveCronTest.php
index 3d328a3927..c0a834b5d7 100644
--- a/tests/PHPUnit/System/ArchiveCronTest.php
+++ b/tests/PHPUnit/System/ArchiveCronTest.php
@@ -9,9 +9,9 @@ namespace Piwik\Tests\System;
 
 use Piwik\Date;
 use Piwik\Plugins\SitesManager\API;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\ManySitesImportedLogs;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 use Exception;
 
 /**
diff --git a/tests/PHPUnit/System/ArchiveInvalidationTest.php b/tests/PHPUnit/System/ArchiveInvalidationTest.php
index 1a0d1dff38..bd97f78413 100644
--- a/tests/PHPUnit/System/ArchiveInvalidationTest.php
+++ b/tests/PHPUnit/System/ArchiveInvalidationTest.php
@@ -10,7 +10,7 @@ namespace Piwik\Tests\System;
 use Piwik\API\Request;
 use Piwik\Config;
 use Piwik\Tests\Fixtures\VisitsTwoWebsitesWithAdditionalVisits;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 
 /**
  * Track visits before website creation date and test that Piwik handles them correctly.
diff --git a/tests/PHPUnit/System/ArchiveWebTest.php b/tests/PHPUnit/System/ArchiveWebTest.php
index 610c83de45..869795dec6 100644
--- a/tests/PHPUnit/System/ArchiveWebTest.php
+++ b/tests/PHPUnit/System/ArchiveWebTest.php
@@ -9,9 +9,9 @@ namespace Piwik\Tests\System;
 
 use Piwik\Option;
 use Piwik\Http;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\ManySitesImportedLogs;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 use Exception;
 
 /**
diff --git a/tests/PHPUnit/System/AutoSuggestAPITest.php b/tests/PHPUnit/System/AutoSuggestAPITest.php
index f86e6b869c..d7d23f58c5 100644
--- a/tests/PHPUnit/System/AutoSuggestAPITest.php
+++ b/tests/PHPUnit/System/AutoSuggestAPITest.php
@@ -9,9 +9,9 @@ namespace Piwik\Tests\System;
 
 use Piwik\API\Request;
 use Piwik\Date;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\ManyVisitsWithGeoIP;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * testing a the auto suggest API for all known segments
diff --git a/tests/PHPUnit/System/BackwardsCompatibility1XTest.php b/tests/PHPUnit/System/BackwardsCompatibility1XTest.php
index 0ed7dc208d..cc13b51e91 100644
--- a/tests/PHPUnit/System/BackwardsCompatibility1XTest.php
+++ b/tests/PHPUnit/System/BackwardsCompatibility1XTest.php
@@ -10,9 +10,9 @@ namespace Piwik\Tests\System;
 use Piwik\Common;
 use Piwik\Db;
 use Piwik\Plugins\VisitFrequency\API as VisitFrequencyApi;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\SqlDump;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * Tests that Piwik 2.0 works w/ data from Piwik 1.12.
diff --git a/tests/PHPUnit/System/BlobReportLimitingTest.php b/tests/PHPUnit/System/BlobReportLimitingTest.php
index f38ee05da7..f54a6aaafd 100755
--- a/tests/PHPUnit/System/BlobReportLimitingTest.php
+++ b/tests/PHPUnit/System/BlobReportLimitingTest.php
@@ -9,11 +9,9 @@ namespace Piwik\Tests\System;
 
 use Piwik\Config;
 use Piwik\Plugins\Actions\ArchivingHelper;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\ManyVisitsWithMockLocationProvider;
 
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/MockLocationProvider.php';
-
 /**
  * Test Piwik's report limiting code. Make sure the datatable_archiving_maximum_rows_...
  * config options limit the size of certain reports when archiving.
diff --git a/tests/PHPUnit/System/CsvExportTest.php b/tests/PHPUnit/System/CsvExportTest.php
index 2069b70cd4..5c251186c6 100755
--- a/tests/PHPUnit/System/CsvExportTest.php
+++ b/tests/PHPUnit/System/CsvExportTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\TwoVisitsWithCustomVariables;
 
 /**
diff --git a/tests/PHPUnit/System/CustomEventsTest.php b/tests/PHPUnit/System/CustomEventsTest.php
index 1560a91b21..a655750164 100644
--- a/tests/PHPUnit/System/CustomEventsTest.php
+++ b/tests/PHPUnit/System/CustomEventsTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\TwoVisitsWithCustomEvents;
 
 /**
diff --git a/tests/PHPUnit/System/EcommerceOrderWithItemsTest.php b/tests/PHPUnit/System/EcommerceOrderWithItemsTest.php
index 0cf6423a8d..5ac300b2e9 100755
--- a/tests/PHPUnit/System/EcommerceOrderWithItemsTest.php
+++ b/tests/PHPUnit/System/EcommerceOrderWithItemsTest.php
@@ -9,7 +9,7 @@ namespace Piwik\Tests\System;
 
 use Piwik\Date;
 use Piwik\Piwik;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\TwoSitesEcommerceOrderWithItems;
 
 /**
diff --git a/tests/PHPUnit/System/FlattenReportsTest.php b/tests/PHPUnit/System/FlattenReportsTest.php
index 046bdb8d3d..5d3a645607 100644
--- a/tests/PHPUnit/System/FlattenReportsTest.php
+++ b/tests/PHPUnit/System/FlattenReportsTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\ManyVisitsWithSubDirReferrersAndCustomVars;
 
 /**
diff --git a/tests/PHPUnit/System/ImportLogsTest.php b/tests/PHPUnit/System/ImportLogsTest.php
index 9dcbbd2a1d..44c6b7b0b9 100755
--- a/tests/PHPUnit/System/ImportLogsTest.php
+++ b/tests/PHPUnit/System/ImportLogsTest.php
@@ -9,7 +9,7 @@ namespace Piwik\Tests\System;
 
 use Piwik\Access;
 use Piwik\Plugins\SitesManager\API;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\ManySitesImportedLogs;
 
 /**
diff --git a/tests/PHPUnit/System/LabelFilterTest.php b/tests/PHPUnit/System/LabelFilterTest.php
index d58f42bc4c..809409754b 100644
--- a/tests/PHPUnit/System/LabelFilterTest.php
+++ b/tests/PHPUnit/System/LabelFilterTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\OneVisitSeveralPageViews;
 
 /**
diff --git a/tests/PHPUnit/System/ManyVisitorsOneWebsiteTest.php b/tests/PHPUnit/System/ManyVisitorsOneWebsiteTest.php
index 72994a3f16..8910c8568e 100755
--- a/tests/PHPUnit/System/ManyVisitorsOneWebsiteTest.php
+++ b/tests/PHPUnit/System/ManyVisitorsOneWebsiteTest.php
@@ -7,10 +7,8 @@
  */
 namespace Piwik\Tests\System;
 
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/MockLocationProvider.php';
-
 use Piwik\Date;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\ManyVisitsWithGeoIP;
 
 /**
diff --git a/tests/PHPUnit/System/MultipleSitesArchivingTest.php b/tests/PHPUnit/System/MultipleSitesArchivingTest.php
index 25a1c1569c..b62feb8263 100644
--- a/tests/PHPUnit/System/MultipleSitesArchivingTest.php
+++ b/tests/PHPUnit/System/MultipleSitesArchivingTest.php
@@ -9,9 +9,9 @@ namespace Piwik\Tests\System;
 
 use Piwik\Config;
 use Piwik\Piwik;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 use Piwik\Tests\Fixtures\ThreeSitesWithSharedVisitors;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 
 /**
  * @group Core
diff --git a/tests/PHPUnit/System/NoVisitTest.php b/tests/PHPUnit/System/NoVisitTest.php
index a9851358bf..fb4f498386 100755
--- a/tests/PHPUnit/System/NoVisitTest.php
+++ b/tests/PHPUnit/System/NoVisitTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\InvalidVisits;
 
 /**
diff --git a/tests/PHPUnit/System/NonUnicodeTest.php b/tests/PHPUnit/System/NonUnicodeTest.php
index 5bcbfe1dd0..e498370559 100755
--- a/tests/PHPUnit/System/NonUnicodeTest.php
+++ b/tests/PHPUnit/System/NonUnicodeTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\SomeVisitsWithNonUnicodePageTitles;
 
 /**
diff --git a/tests/PHPUnit/System/OneVisitorLongUrlsTruncatedTest.php b/tests/PHPUnit/System/OneVisitorLongUrlsTruncatedTest.php
index 5ec5f22d4a..d6f2742da5 100644
--- a/tests/PHPUnit/System/OneVisitorLongUrlsTruncatedTest.php
+++ b/tests/PHPUnit/System/OneVisitorLongUrlsTruncatedTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\SomeVisitsWithLongUrls;
 
 /**
diff --git a/tests/PHPUnit/System/OneVisitorNoKeywordSpecifiedTest.php b/tests/PHPUnit/System/OneVisitorNoKeywordSpecifiedTest.php
index 23d418b0ad..0e2f56aa4d 100755
--- a/tests/PHPUnit/System/OneVisitorNoKeywordSpecifiedTest.php
+++ b/tests/PHPUnit/System/OneVisitorNoKeywordSpecifiedTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\TwoVisitsNoKeywordWithBot;
 
 /**
diff --git a/tests/PHPUnit/System/OneVisitorOneWebsiteSeveralDaysDateRangeArchivingTestsTest.php b/tests/PHPUnit/System/OneVisitorOneWebsiteSeveralDaysDateRangeArchivingTestsTest.php
index 85dcb87673..1ab4ed0505 100755
--- a/tests/PHPUnit/System/OneVisitorOneWebsiteSeveralDaysDateRangeArchivingTestsTest.php
+++ b/tests/PHPUnit/System/OneVisitorOneWebsiteSeveralDaysDateRangeArchivingTestsTest.php
@@ -10,7 +10,7 @@ namespace Piwik\Tests\System;
 use Piwik\Common;
 use Piwik\Db;
 use Piwik\Piwik;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\VisitsOverSeveralDays;
 
 /**
diff --git a/tests/PHPUnit/System/OneVisitorOneWebsiteSeveralDaysDateRangeTest.php b/tests/PHPUnit/System/OneVisitorOneWebsiteSeveralDaysDateRangeTest.php
index 82629f69ec..a0bdae8d8f 100755
--- a/tests/PHPUnit/System/OneVisitorOneWebsiteSeveralDaysDateRangeTest.php
+++ b/tests/PHPUnit/System/OneVisitorOneWebsiteSeveralDaysDateRangeTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\VisitsOverSeveralDays;
 
 /**
diff --git a/tests/PHPUnit/System/OneVisitorSeveralDaysImportedInRandomOrderTest.php b/tests/PHPUnit/System/OneVisitorSeveralDaysImportedInRandomOrderTest.php
index de66f3289b..76a165c35c 100644
--- a/tests/PHPUnit/System/OneVisitorSeveralDaysImportedInRandomOrderTest.php
+++ b/tests/PHPUnit/System/OneVisitorSeveralDaysImportedInRandomOrderTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\VisitOverSeveralDaysImportedLogs;
 
 /**
diff --git a/tests/PHPUnit/System/OneVisitorTwoVisitsTest.php b/tests/PHPUnit/System/OneVisitorTwoVisitsTest.php
index a3b25892ef..287e6799f1 100755
--- a/tests/PHPUnit/System/OneVisitorTwoVisitsTest.php
+++ b/tests/PHPUnit/System/OneVisitorTwoVisitsTest.php
@@ -9,7 +9,7 @@ namespace Piwik\Tests\System;
 
 use Piwik\API\Proxy;
 use Piwik\Archive;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\OneVisitorTwoVisits;
 use Exception;
 
diff --git a/tests/PHPUnit/System/OneVisitorTwoVisitsWithCookieSupportTest.php b/tests/PHPUnit/System/OneVisitorTwoVisitsWithCookieSupportTest.php
index 966382045d..82ce3d5e23 100755
--- a/tests/PHPUnit/System/OneVisitorTwoVisitsWithCookieSupportTest.php
+++ b/tests/PHPUnit/System/OneVisitorTwoVisitsWithCookieSupportTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\OneVisitorTwoVisits;
 
 /**
diff --git a/tests/PHPUnit/System/PeriodIsRangeDateIsLastNMetadataAndNormalAPITest.php b/tests/PHPUnit/System/PeriodIsRangeDateIsLastNMetadataAndNormalAPITest.php
index 92f1a8bb4a..e38c680f30 100755
--- a/tests/PHPUnit/System/PeriodIsRangeDateIsLastNMetadataAndNormalAPITest.php
+++ b/tests/PHPUnit/System/PeriodIsRangeDateIsLastNMetadataAndNormalAPITest.php
@@ -8,7 +8,7 @@
 namespace Piwik\Tests\System;
 
 use Piwik\Date;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\TwoVisitsWithCustomVariables;
 
 /**
diff --git a/tests/PHPUnit/System/PivotByQueryParamTest.php b/tests/PHPUnit/System/PivotByQueryParamTest.php
index 15af9b5373..f46813e879 100644
--- a/tests/PHPUnit/System/PivotByQueryParamTest.php
+++ b/tests/PHPUnit/System/PivotByQueryParamTest.php
@@ -10,7 +10,7 @@ namespace Piwik\Tests\System;
 use Piwik\Config;
 use Piwik\Date;
 use Piwik\Tests\Fixtures\ManyVisitsWithMockLocationProvider;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 
 /**
  * @group Core
diff --git a/tests/PHPUnit/System/PrivacyManagerTest.php b/tests/PHPUnit/System/PrivacyManagerTest.php
index 79fcd1bccd..18b197a410 100644
--- a/tests/PHPUnit/System/PrivacyManagerTest.php
+++ b/tests/PHPUnit/System/PrivacyManagerTest.php
@@ -25,8 +25,8 @@ use Piwik\Plugins\VisitorInterest\API as APIVisitorInterest;
 use Piwik\Site;
 use Piwik\Tracker\Cache;
 use Piwik\Tracker\GoalManager;
-use Piwik\Tests\Impl\SystemTestCase;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
+use Piwik\Tests\Framework\Fixture;
 
 require_once PIWIK_INCLUDE_PATH . '/plugins/PrivacyManager/PrivacyManager.php';
 
diff --git a/tests/PHPUnit/System/PurgeDataTest.php b/tests/PHPUnit/System/PurgeDataTest.php
index 3e1d8f4b53..6573f63db0 100755
--- a/tests/PHPUnit/System/PurgeDataTest.php
+++ b/tests/PHPUnit/System/PurgeDataTest.php
@@ -7,12 +7,10 @@
  */
 namespace Piwik\Tests\System;
 
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/MockLocationProvider.php';
-
 use Piwik\API\Request;
 use Piwik\Plugins\PrivacyManager\PrivacyManager;
 use Piwik\Plugins\PrivacyManager\ReportsPurger;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\OneVisitorTwoVisits;
 
 /**
diff --git a/tests/PHPUnit/System/RowEvolutionTest.php b/tests/PHPUnit/System/RowEvolutionTest.php
index e70379279f..0fba18234d 100755
--- a/tests/PHPUnit/System/RowEvolutionTest.php
+++ b/tests/PHPUnit/System/RowEvolutionTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\TwoSitesManyVisitsOverSeveralDaysWithSearchEngineReferrers;
 
 /**
diff --git a/tests/PHPUnit/System/SiteSearchTest.php b/tests/PHPUnit/System/SiteSearchTest.php
index 653d361951..ee9c8bce46 100755
--- a/tests/PHPUnit/System/SiteSearchTest.php
+++ b/tests/PHPUnit/System/SiteSearchTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\ThreeSitesWithManyVisitsWithSiteSearch;
 
 /**
diff --git a/tests/PHPUnit/System/TimezonesTest.php b/tests/PHPUnit/System/TimezonesTest.php
index 952f045c16..da5be4e6e5 100644
--- a/tests/PHPUnit/System/TimezonesTest.php
+++ b/tests/PHPUnit/System/TimezonesTest.php
@@ -8,7 +8,7 @@
 namespace Piwik\Tests\System;
 
 use Piwik\Date;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\VisitsInDifferentTimezones;
 
 /**
diff --git a/tests/PHPUnit/System/TrackCustomVariablesAndCampaignsForceUsingVisitIdNotHeuristicsTest.php b/tests/PHPUnit/System/TrackCustomVariablesAndCampaignsForceUsingVisitIdNotHeuristicsTest.php
index 95da206c6a..2a08882e8d 100755
--- a/tests/PHPUnit/System/TrackCustomVariablesAndCampaignsForceUsingVisitIdNotHeuristicsTest.php
+++ b/tests/PHPUnit/System/TrackCustomVariablesAndCampaignsForceUsingVisitIdNotHeuristicsTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\SomeVisitsCustomVariablesCampaignsNotHeuristics;
 
 /**
diff --git a/tests/PHPUnit/System/TrackGoalsAllowMultipleConversionsPerVisitTest.php b/tests/PHPUnit/System/TrackGoalsAllowMultipleConversionsPerVisitTest.php
index ab345bee35..df052b6e6b 100755
--- a/tests/PHPUnit/System/TrackGoalsAllowMultipleConversionsPerVisitTest.php
+++ b/tests/PHPUnit/System/TrackGoalsAllowMultipleConversionsPerVisitTest.php
@@ -8,7 +8,7 @@
 namespace Piwik\Tests\System;
 
 use Piwik\Plugins\Goals\API;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\SomeVisitsAllConversions;
 
 /**
diff --git a/tests/PHPUnit/System/TrackerWindowLookBackTest.php b/tests/PHPUnit/System/TrackerWindowLookBackTest.php
index aa908ab316..9530c7c0b0 100644
--- a/tests/PHPUnit/System/TrackerWindowLookBackTest.php
+++ b/tests/PHPUnit/System/TrackerWindowLookBackTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\VisitsOverSeveralDays;
 
 /**
diff --git a/tests/PHPUnit/System/TransitionsTest.php b/tests/PHPUnit/System/TransitionsTest.php
index fc0549bdbf..3049d0f823 100644
--- a/tests/PHPUnit/System/TransitionsTest.php
+++ b/tests/PHPUnit/System/TransitionsTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\SomeVisitsManyPageviewsWithTransitions;
 
 /**
diff --git a/tests/PHPUnit/System/TwoVisitorsTwoWebsitesDifferentDaysArchivingDisabledTest.php b/tests/PHPUnit/System/TwoVisitorsTwoWebsitesDifferentDaysArchivingDisabledTest.php
index 4755756614..0676950dc8 100755
--- a/tests/PHPUnit/System/TwoVisitorsTwoWebsitesDifferentDaysArchivingDisabledTest.php
+++ b/tests/PHPUnit/System/TwoVisitorsTwoWebsitesDifferentDaysArchivingDisabledTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\TwoSitesTwoVisitorsDifferentDays;
 
 /**
diff --git a/tests/PHPUnit/System/TwoVisitorsTwoWebsitesDifferentDaysConversionsTest.php b/tests/PHPUnit/System/TwoVisitorsTwoWebsitesDifferentDaysConversionsTest.php
index 8c64abce71..3d9c595367 100755
--- a/tests/PHPUnit/System/TwoVisitorsTwoWebsitesDifferentDaysConversionsTest.php
+++ b/tests/PHPUnit/System/TwoVisitorsTwoWebsitesDifferentDaysConversionsTest.php
@@ -8,7 +8,7 @@
 namespace Piwik\Tests\System;
 
 use Piwik\Plugins\Goals\Archiver;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\TwoSitesTwoVisitorsDifferentDays;
 
 require_once PIWIK_INCLUDE_PATH . '/plugins/Goals/Goals.php';
diff --git a/tests/PHPUnit/System/TwoVisitorsTwoWebsitesDifferentDaysTest.php b/tests/PHPUnit/System/TwoVisitorsTwoWebsitesDifferentDaysTest.php
index 495ada90aa..65ce66105e 100755
--- a/tests/PHPUnit/System/TwoVisitorsTwoWebsitesDifferentDaysTest.php
+++ b/tests/PHPUnit/System/TwoVisitorsTwoWebsitesDifferentDaysTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\TwoSitesTwoVisitorsDifferentDays;
 
 /**
diff --git a/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentContainsTest.php b/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentContainsTest.php
index b2d85a893b..92a4f2dde2 100755
--- a/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentContainsTest.php
+++ b/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentContainsTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\TwoVisitsWithCustomVariables;
 
 /**
diff --git a/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentMatchALLNoGoalDataTest.php b/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentMatchALLNoGoalDataTest.php
index e0f579782f..dca4a1f294 100755
--- a/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentMatchALLNoGoalDataTest.php
+++ b/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentMatchALLNoGoalDataTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\TwoVisitsWithCustomVariables;
 
 /**
diff --git a/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentMatchNONETest.php b/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentMatchNONETest.php
index 1aa078b5b1..2d9c155fee 100755
--- a/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentMatchNONETest.php
+++ b/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentMatchNONETest.php
@@ -8,9 +8,9 @@
 namespace Piwik\Tests\System;
 
 use Piwik\Plugins\API\API;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\TwoVisitsWithCustomVariables;
-use Piwik\Tests\Impl\Fixture;
+use Piwik\Tests\Framework\Fixture;
 
 /**
  * testing a segment containing all supported fields
diff --git a/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentMatchVisitorTypeTest.php b/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentMatchVisitorTypeTest.php
index 01a5005278..a6ba72de3d 100755
--- a/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentMatchVisitorTypeTest.php
+++ b/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentMatchVisitorTypeTest.php
@@ -9,7 +9,7 @@ namespace Piwik\Tests\System;
 
 use Piwik\Common;
 use Piwik\Db;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\TwoVisitsWithCustomVariables;
 
 /**
diff --git a/tests/PHPUnit/System/TwoVisitsWithCustomVariablesTest.php b/tests/PHPUnit/System/TwoVisitsWithCustomVariablesTest.php
index 7bc80d3ade..eb2a28427d 100755
--- a/tests/PHPUnit/System/TwoVisitsWithCustomVariablesTest.php
+++ b/tests/PHPUnit/System/TwoVisitsWithCustomVariablesTest.php
@@ -7,7 +7,7 @@
  */
 namespace Piwik\Tests\System;
 
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\TwoVisitsWithCustomVariables;
 
 /**
diff --git a/tests/PHPUnit/System/UrlNormalizationTest.php b/tests/PHPUnit/System/UrlNormalizationTest.php
index a91a01aad0..0b9a55acea 100644
--- a/tests/PHPUnit/System/UrlNormalizationTest.php
+++ b/tests/PHPUnit/System/UrlNormalizationTest.php
@@ -10,7 +10,7 @@ namespace Piwik\Tests\System;
 use Piwik\Common;
 use Piwik\Db;
 use Piwik\Tracker\Action;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\OneVisitWithAbnormalPageviewUrls;
 
 /**
diff --git a/tests/PHPUnit/System/UserIdAndVisitorIdTest.php b/tests/PHPUnit/System/UserIdAndVisitorIdTest.php
index 4bc0700c08..6652228b3a 100644
--- a/tests/PHPUnit/System/UserIdAndVisitorIdTest.php
+++ b/tests/PHPUnit/System/UserIdAndVisitorIdTest.php
@@ -8,7 +8,7 @@
 namespace Piwik\Tests\System;
 
 use Piwik\API\Proxy;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\FewVisitsWithSetVisitorId;
 
 /**
diff --git a/tests/PHPUnit/System/VisitsInPastInvalidateOldReportsTest.php b/tests/PHPUnit/System/VisitsInPastInvalidateOldReportsTest.php
index d958dcc894..15149f0ec5 100644
--- a/tests/PHPUnit/System/VisitsInPastInvalidateOldReportsTest.php
+++ b/tests/PHPUnit/System/VisitsInPastInvalidateOldReportsTest.php
@@ -8,7 +8,7 @@
 namespace Piwik\Tests\System;
 
 use Piwik\API\Request;
-use Piwik\Tests\Impl\SystemTestCase;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\TwoSitesVisitsInPast;
 use Exception;
 
diff --git a/tests/PHPUnit/Unit/DeprecatedMethodsTest.php b/tests/PHPUnit/Unit/DeprecatedMethodsTest.php
index 4d07c93857..8bd55c49f8 100644
--- a/tests/PHPUnit/Unit/DeprecatedMethodsTest.php
+++ b/tests/PHPUnit/Unit/DeprecatedMethodsTest.php
@@ -33,6 +33,9 @@ class DeprecatedMethodsTest extends PHPUnit_Framework_TestCase
         $validTill = '2015-02-06';
         $this->assertDeprecatedClassIsRemoved('\IntegrationTestCase', $validTill);
         $this->assertDeprecatedClassIsRemoved('\DatabaseTestCase', $validTill);
+        $this->assertDeprecatedClassIsRemoved('\BenchmarkTestCase', $validTill);
+        $this->assertDeprecatedClassIsRemoved('\FakeAccess', $validTill);
+        $this->assertDeprecatedClassIsRemoved('\Piwik\Tests\ConsoleCommandTestCase', $validTill);
         $this->assertDeprecatedClassIsRemoved('\Piwik\Tests\Fixture', $validTill);
         $this->assertDeprecatedClassIsRemoved('\Piwik\Tests\OverrideLogin', $validTill);
 
@@ -68,7 +71,7 @@ class DeprecatedMethodsTest extends PHPUnit_Framework_TestCase
 
         if (!$now->isLater($removalDate)) {
 
-            $errorMessage = $className . 'should still exists until ' . $removalDate . ' although it is deprecated.';
+            $errorMessage = $className . ' should still exists until ' . $removalDate . ' although it is deprecated.';
             $this->assertTrue($classExists, $errorMessage);
             return;
         }
diff --git a/tests/PHPUnit/Unit/TaskSchedulerTest.php b/tests/PHPUnit/Unit/TaskSchedulerTest.php
index 3ec8781df7..70ec2f2ef4 100644
--- a/tests/PHPUnit/Unit/TaskSchedulerTest.php
+++ b/tests/PHPUnit/Unit/TaskSchedulerTest.php
@@ -9,6 +9,7 @@ use Piwik\EventDispatcher;
 use Piwik\ScheduledTask;
 use Piwik\ScheduledTaskTimetable;
 use Piwik\TaskScheduler;
+use Piwik\Tests\Framework\Mock\PiwikOption;
 
 class TaskSchedulerTest extends PHPUnit_Framework_TestCase
 {
@@ -313,7 +314,7 @@ class TaskSchedulerTest extends PHPUnit_Framework_TestCase
 
     private static function stubPiwikOption($timetable)
     {
-        self::getReflectedPiwikOptionInstance()->setValue(new MockPiwikOption($timetable));
+        self::getReflectedPiwikOptionInstance()->setValue(new PiwikOption($timetable));
     }
 
     private static function resetPiwikOption()
diff --git a/tests/PHPUnit/bootstrap.php b/tests/PHPUnit/bootstrap.php
index 8335346c6b..4ab7f06466 100644
--- a/tests/PHPUnit/bootstrap.php
+++ b/tests/PHPUnit/bootstrap.php
@@ -27,26 +27,21 @@ if (!defined('PIWIK_INCLUDE_SEARCH_PATH')) {
 error_reporting(E_ALL | E_NOTICE);
 @date_default_timezone_set('UTC');
 
-require_once file_exists(PIWIK_INCLUDE_PATH . '/vendor/autoload.php')
-    ? PIWIK_INCLUDE_PATH . '/vendor/autoload.php' // Piwik is the main project
-    : PIWIK_INCLUDE_PATH . '/../../autoload.php'; // Piwik is installed as a dependency
+require_once PIWIK_INCLUDE_PATH . '/core/Loader.php';
+
+\Piwik\Loader::init();
+\Piwik\Loader::registerTestNamespace();
 
 require_once PIWIK_INCLUDE_PATH . '/libs/upgradephp/upgrade.php';
 require_once PIWIK_INCLUDE_PATH . '/core/testMinimumPhpVersion.php';
 require_once PIWIK_INCLUDE_PATH . '/core/FrontController.php';
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/Impl/Fixture.php';
 require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/Fixture.php';
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/Impl/SystemTestCase.php';
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/Impl/IntegrationTestCase.php';
 require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/DatabaseTestCase.php';
 require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/IntegrationTestCase.php';
 require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/ConsoleCommandTestCase.php';
+require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/BenchmarkTestCase.php';
 require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/FakeAccess.php';
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/MockPiwikOption.php';
 require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/TestingEnvironment.php';
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/Impl/TestRequestCollection.php';
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/Impl/TestRequestResponse.php';
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/Impl/ApiTestConfig.php';
 
 if (getenv('PIWIK_USE_XHPROF') == 1) {
     \Piwik\Profiler::setupProfilerXHProf();
@@ -84,7 +79,7 @@ Try again.
 -> If you still get this message, you can work around it by specifying Host + Request_Uri at the top of this file tests/PHPUnit/bootstrap.php. <-";
         exit(1);
     }
-    $baseUrl = \Piwik\Tests\Impl\Fixture::getRootUrl();
+    $baseUrl = \Piwik\Tests\Framework\Fixture::getRootUrl();
 
     \Piwik\SettingsPiwik::checkPiwikServerWorking($baseUrl, $acceptInvalidSSLCertificates = true);
 }
diff --git a/tests/PHPUnit/proxy/includes.php b/tests/PHPUnit/proxy/includes.php
index b813fd21ad..01a28db163 100644
--- a/tests/PHPUnit/proxy/includes.php
+++ b/tests/PHPUnit/proxy/includes.php
@@ -9,9 +9,8 @@ if (!defined('PIWIK_USER_PATH')) {
     define('PIWIK_USER_PATH', PIWIK_INCLUDE_PATH);
 }
 
-require_once file_exists(PIWIK_INCLUDE_PATH . '/vendor/autoload.php')
-    ? PIWIK_INCLUDE_PATH . '/vendor/autoload.php' // Piwik is the main project
-    : PIWIK_INCLUDE_PATH . '/../../autoload.php'; // Piwik is installed as a dependency
+require_once PIWIK_INCLUDE_PATH . '/core/Loader.php';
+\Piwik\Loader::init();
 
 require_once PIWIK_INCLUDE_PATH . '/core/EventDispatcher.php';
 require_once PIWIK_INCLUDE_PATH . '/core/Piwik.php';
diff --git a/tests/resources/staticFileServer.php b/tests/resources/staticFileServer.php
index 6ad277863e..7975b79348 100644
--- a/tests/resources/staticFileServer.php
+++ b/tests/resources/staticFileServer.php
@@ -39,7 +39,9 @@ require_once PIWIK_INCLUDE_PATH . '/core/testMinimumPhpVersion.php';
 
 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';
+\Piwik\Loader::init();
 
 // This is Piwik logo, the static file used in this test suit
 define("TEST_FILE_LOCATION", dirname(__FILE__) . "/lipsum.txt");
-- 
GitLab