diff --git a/tests/PHPUnit/BaseFixture.php b/tests/PHPUnit/BaseFixture.php
index b94dbabd6c925d66bd7baa64ac002ebdeb462bf0..fffe2aa4a4ac0855dab381830fb37514767a78a5 100644
--- a/tests/PHPUnit/BaseFixture.php
+++ b/tests/PHPUnit/BaseFixture.php
@@ -400,4 +400,14 @@ abstract class Test_Piwik_BaseFixture extends PHPUnit_Framework_Assert
 
         return $output;
     }
-}
+
+    public static function siteCreated($idSite)
+    {
+        return Db::fetchOne("SELECT COUNT(*) FROM " . Common::prefixTable('site') . " WHERE idsite = ?", array($idSite)) != 0;
+    }
+
+    public static function goalExists($idSite, $idGoal)
+    {
+        return Db::fetchOne("SELECT COUNT(*) FROM " . Common::prefixTable('goal') . " WHERE idgoal = ? AND idsite = ?", array($idGoal, $idSite)) != 0;
+    }
+}
\ No newline at end of file
diff --git a/tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorId.php b/tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorId.php
index 2284a14aa98d4e9f48a457931b89b6fb2effa567..189a5ce1d377e4b50d4e30c712eefa1bff03370d 100644
--- a/tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorId.php
+++ b/tests/PHPUnit/Fixtures/FewVisitsWithSetVisitorId.php
@@ -30,7 +30,9 @@ class Test_Piwik_Fixture_FewVisitsWithSetVisitorId extends Test_Piwik_BaseFixtur
     private function setUpWebsitesAndGoals()
     {
         // tests run in UTC, the Tracker in UTC
-        self::createWebsite($this->dateTime);
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime);
+        }
     }
 
     private function trackVisits()
diff --git a/tests/PHPUnit/Fixtures/InvalidVisits.php b/tests/PHPUnit/Fixtures/InvalidVisits.php
index b2938b6b2dc56eb41e4d834d2b5b8dec84a10479..14aafc79114c203dbf26e75f5218d671e297d05a 100644
--- a/tests/PHPUnit/Fixtures/InvalidVisits.php
+++ b/tests/PHPUnit/Fixtures/InvalidVisits.php
@@ -32,7 +32,9 @@ class Test_Piwik_Fixture_InvalidVisits extends Test_Piwik_BaseFixture
 
     private function setUpWebsitesAndGoals()
     {
-        self::createWebsite($this->dateTime);
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime);
+        }
     }
 
     private function trackVisits()
diff --git a/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php b/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php
index eb3ee16ed9b6cd2971ea9976a10518e299606887..d4f66a67d0dcfbad5f8f57ff755e489cb0ca8441 100644
--- a/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php
+++ b/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php
@@ -47,10 +47,18 @@ class Test_Piwik_Fixture_ManySitesImportedLogs extends Test_Piwik_BaseFixture
     public function setUpWebsitesAndGoals()
     {
         // for conversion testing
-        self::createWebsite($this->dateTime);
-        APIGoals::getInstance()->addGoal($this->idSite, 'all', 'url', 'http', 'contains', false, 5);
-        self::createWebsite($this->dateTime, $ecommerce = 0, $siteName = 'Piwik test two',
-            $siteUrl = 'http://example-site-two.com');
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime);
+        }
+
+        if (!self::goalExists($idSite = 1, $idGoal = 1)) {
+            APIGoals::getInstance()->addGoal($this->idSite, 'all', 'url', 'http', 'contains', false, 5);
+        }
+
+        if (!self::siteCreated($idSite = 2)) {
+            self::createWebsite($this->dateTime, $ecommerce = 0, $siteName = 'Piwik test two',
+                $siteUrl = 'http://example-site-two.com');
+        }
     }
     
     public function getDefaultSegments()
diff --git a/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php b/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php
index 1f268e0f396a7e7302ecf09c0ca7600d1aed0df8..ea78fba9c10b10633ca52b4216f62e33d5a7b738 100644
--- a/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php
+++ b/tests/PHPUnit/Fixtures/ManySitesImportedLogsWithXssAttempts.php
@@ -49,13 +49,20 @@ class Test_Piwik_Fixture_ManySitesImportedLogsWithXssAttempts extends Test_Piwik
     public function setUpWebsitesAndGoals()
     {
         // for conversion testing
-        $siteName = self::makeXssContent("site name", $sanitize = true);
-        self::createWebsite($this->dateTime, $ecommerce = 1, $siteName);
-        APIGoals::getInstance()->addGoal(
-            $this->idSite, self::makeXssContent("goal name"), 'url', 'http', 'contains', false, 5);
-        
-        self::createWebsite($this->dateTime, $ecommerce = 0, $siteName = 'Piwik test two',
-            $siteUrl = 'http://example-site-two.com');
+        if (!self::siteCreated($idSite = 1)) {
+            $siteName = self::makeXssContent("site name", $sanitize = true);
+            self::createWebsite($this->dateTime, $ecommerce = 1, $siteName);
+        }
+
+        if (!self::goalExists($idSite = 1, $idGoal = 1)) {
+            APIGoals::getInstance()->addGoal(
+                $this->idSite, self::makeXssContent("goal name"), 'url', 'http', 'contains', false, 5);
+        }
+
+        if (!self::siteCreated($idSite = 2)) {
+            self::createWebsite($this->dateTime, $ecommerce = 0, $siteName = 'Piwik test two',
+                $siteUrl = 'http://example-site-two.com');
+        }
     }
     
     /** Creates two dashboards that split the widgets up into different groups. */
diff --git a/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php b/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php
index 29176789d67c4b2115e3a768dc7fa0b1d8a360f3..524c92bdd1c0726674e544aab57f76d20c5794b9 100644
--- a/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php
+++ b/tests/PHPUnit/Fixtures/ManyVisitsWithGeoIP.php
@@ -65,9 +65,17 @@ class Test_Piwik_Fixture_ManyVisitsWithGeoIP extends Test_Piwik_BaseFixture
 
     private function setUpWebsitesAndGoals()
     {
-        self::createWebsite($this->dateTime, 0, "Site 1");
-        $this->idGoal = API::getInstance()->addGoal($this->idSite, 'all', 'url', 'http', 'contains', false, 5);
-        $this->idGoal2 = API::getInstance()->addGoal($this->idSite, 'two', 'url', 'xxxxxxxxxxxxx', 'contains', false, 5);
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime, 0, "Site 1");
+        }
+
+        if (!self::goalExists($idSite = 1, $idGoal = 1)) {
+            $this->idGoal = API::getInstance()->addGoal($this->idSite, 'all', 'url', 'http', 'contains', false, 5);
+        }
+
+        if (!self::goalExists($idSite = 1, $idGoal = 2)) {
+            $this->idGoal2 = API::getInstance()->addGoal($this->idSite, 'two', 'url', 'xxxxxxxxxxxxx', 'contains', false, 5);
+        }
     }
 
     private function trackVisits($visitorCount, $setIp = false, $useLocal = true, $doBulk = false)
diff --git a/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php b/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php
index b34cca1ad349e0d503da8a895281acd8f8e5a3f1..9a4a228f47adb551c3d89ad0ec2d9584fbb19481 100644
--- a/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php
+++ b/tests/PHPUnit/Fixtures/ManyVisitsWithMockLocationProvider.php
@@ -39,7 +39,9 @@ class Test_Piwik_Fixture_ManyVisitsWithMockLocationProvider extends Test_Piwik_B
 
     private function setUpWebsitesAndGoals()
     {
-        self::createWebsite($this->dateTime);
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime);
+        }
     }
 
     private function trackVisits()
diff --git a/tests/PHPUnit/Fixtures/ManyVisitsWithSubDirReferrersAndCustomVars.php b/tests/PHPUnit/Fixtures/ManyVisitsWithSubDirReferrersAndCustomVars.php
index abbe2b13ee8708b6559f1d7ed8b5ba3723563dcb..f933df190dbe5281e97511f4b6d2c220a12e3028 100644
--- a/tests/PHPUnit/Fixtures/ManyVisitsWithSubDirReferrersAndCustomVars.php
+++ b/tests/PHPUnit/Fixtures/ManyVisitsWithSubDirReferrersAndCustomVars.php
@@ -30,7 +30,9 @@ class Test_Piwik_Fixture_ManyVisitsWithSubDirReferrersAndCustomVars extends Test
 
     private function setUpWebsitesAndGoals()
     {
-        self::createWebsite($this->dateTime);
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime);
+        }
     }
 
     private function trackVisits()
diff --git a/tests/PHPUnit/Fixtures/OmniFixture.php b/tests/PHPUnit/Fixtures/OmniFixture.php
new file mode 100644
index 0000000000000000000000000000000000000000..061f2f4e4b7160df721b99399c0088bd2cb793c6
--- /dev/null
+++ b/tests/PHPUnit/Fixtures/OmniFixture.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+use Piwik\Date;
+use Piwik\Tracker\Visit;
+
+/**
+ * This fixture is the combination of every other fixture defined by Piwik. Should be used
+ * with year periods.
+ */
+class Test_Piwik_Fixture_OmniFixture extends Test_Piwik_BaseFixture
+{
+    public $month = '2012-01';
+    public $idSite = 'all';
+    public $dateTime = '2012-02-01';
+    public $now = null;
+
+    public $fixtures = array();
+
+    /**
+     * Constructor.
+     */
+    public function __construct()
+    {
+        $date = $this->month . '-01';
+
+        $classes = get_declared_classes();
+        foreach ($classes as $className) {
+            if (is_subclass_of($className, 'Test_Piwik_BaseFixture')
+                && $className != __CLASS__
+            ) {
+                $fixture = new $className();
+                if (!property_exists($fixture, 'dateTime')) {
+                    continue;
+                }
+
+                $fixture->dateTime = $this->adjustDateTime($fixture->dateTime, $date);
+
+                $this->fixtures[$className] = $fixture;
+
+                $date = Date::factory($date)->addDay(1)->toString();
+            }
+        }
+
+        $this->now = $this->fixtures['Test_Piwik_Fixture_ManySitesImportedLogsWithXssAttempts']->now;
+
+        // make sure Test_Piwik_Fixture_ManySitesImportedLogsWithXssAttempts is the first fixture
+        $fixture = $this->fixtures['Test_Piwik_Fixture_ManySitesImportedLogsWithXssAttempts'];
+        unset($this->fixtures['Test_Piwik_Fixture_ManySitesImportedLogsWithXssAttempts']);
+        $this->fixtures = array_merge(array('Test_Piwik_Fixture_ManySitesImportedLogsWithXssAttempts' => $fixture), $this->fixtures);
+    }
+
+    private function adjustDateTime($dateTime, $adjustToDate)
+    {
+        $parts = explode(' ', $dateTime);
+
+        $result = $adjustToDate . ' ';
+        $result .= isset($parts[1]) ? $parts[1] : '11:22:33';
+
+        return $result;
+    }
+
+    public function setUp()
+    {
+        foreach ($this->fixtures as $name => $fixture) {
+            $fixture->setUp();
+        }
+    }
+
+    public function tearDown()
+    {
+        foreach ($this->fixtures as $fixture) {
+            $fixture->tearDown();
+        }
+    }
+}
\ No newline at end of file
diff --git a/tests/PHPUnit/Fixtures/OneVisitSeveralPageViews.php b/tests/PHPUnit/Fixtures/OneVisitSeveralPageViews.php
index 2f2341dd821777c278be9d31566427bb8225056f..f4268ee911e14d02153d80f17b15935ff5115f55 100644
--- a/tests/PHPUnit/Fixtures/OneVisitSeveralPageViews.php
+++ b/tests/PHPUnit/Fixtures/OneVisitSeveralPageViews.php
@@ -28,7 +28,9 @@ class Test_Piwik_Fixture_OneVisitSeveralPageViews extends Test_Piwik_BaseFixture
 
     private function setUpWebsitesAndGoals()
     {
-        self::createWebsite($this->dateTime);
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime);
+        }
     }
 
     private function trackVisits()
diff --git a/tests/PHPUnit/Fixtures/OneVisitWithAbnormalPageviewUrls.php b/tests/PHPUnit/Fixtures/OneVisitWithAbnormalPageviewUrls.php
index 638a35d5b2886bd789ef21fd55607d2a1f7c4b0d..ab3fe5278a6dfc594b193843b2f2c439da9d0e81 100644
--- a/tests/PHPUnit/Fixtures/OneVisitWithAbnormalPageviewUrls.php
+++ b/tests/PHPUnit/Fixtures/OneVisitWithAbnormalPageviewUrls.php
@@ -29,7 +29,9 @@ class Test_Piwik_Fixture_OneVisitWithAbnormalPageviewUrls extends Test_Piwik_Bas
 
     private function setUpWebsitesAndGoals()
     {
-        self::createWebsite($this->dateTime);
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime);
+        }
     }
 
     private function trackVisits()
diff --git a/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php b/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php
index cc150e448263c8e7aae1db91c73654c8f400dc94..955abedf56ea0d32c5518af0e031d86acc26f5a3 100644
--- a/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php
+++ b/tests/PHPUnit/Fixtures/OneVisitorTwoVisits.php
@@ -36,10 +36,17 @@ class Test_Piwik_Fixture_OneVisitorTwoVisits extends Test_Piwik_BaseFixture
 
     private function setUpWebsitesAndGoals()
     {
-        self::createWebsite($this->dateTime);
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime);
+        }
+
+        if (!self::siteCreated($idSite = 2)) {
+            $this->idSiteEmptyBis = $this->createWebsite($this->dateTime);
+        }
 
-        $this->idSiteEmptyBis = $this->createWebsite($this->dateTime);
-        $this->idSiteEmptyTer = $this->createWebsite($this->dateTime);
+        if (!self::siteCreated($idStie = 3)) {
+            $this->idSiteEmptyTer = $this->createWebsite($this->dateTime);
+        }
     }
 
     private function trackVisits()
@@ -109,7 +116,11 @@ class Test_Piwik_Fixture_OneVisitorTwoVisits extends Test_Piwik_BaseFixture
         self::checkResponse($t->doTrackAction('http://dev.piwik.org/svn', 'link'));
 
         // Create Goal 1: Triggered by JS, after 18 minutes
-        $idGoal = APIGoals::getInstance()->addGoal($idSite, 'triggered js', 'manually', '', '');
+        $idGoal = 1;
+        if (!self::goalExists($idSite, $idGoal)) {
+            $idGoal = APIGoals::getInstance()->addGoal($idSite, 'triggered js', 'manually', '', '');
+        }
+
         $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.3)->getDatetime());
 
         // Change to Thai  browser to ensure the conversion is credited to FR instead (the visitor initial country)
@@ -146,7 +157,9 @@ class Test_Piwik_Fixture_OneVisitorTwoVisits extends Test_Piwik_BaseFixture
         // End of first visit: 24min
 
         // Create Goal 2: Matching on URL
-        APIGoals::getInstance()->addGoal($idSite, 'matching purchase.htm', 'url', '(.*)store\/purchase\.(.*)', 'regex', false, $revenue = 1);
+        if (!self::goalExists($idSite, $idGoal = 2)) {
+            APIGoals::getInstance()->addGoal($idSite, 'matching purchase.htm', 'url', '(.*)store\/purchase\.(.*)', 'regex', false, $revenue = 1);
+        }
 
         // -
         // Start of returning visit, 1 hour after first page view
diff --git a/tests/PHPUnit/Fixtures/SomeVisitsAllConversions.php b/tests/PHPUnit/Fixtures/SomeVisitsAllConversions.php
index 272a80915405eb7ea5f01048d29d4903a6811e16..6fef9443d582bd7e5a483ddb184e4da501c23723 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsAllConversions.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsAllConversions.php
@@ -31,19 +31,25 @@ class Piwik_Test_Fixture_SomeVisitsAllConversions extends Test_Piwik_BaseFixture
 
     private function setUpWebsitesAndGoals()
     {
-        self::createWebsite($this->dateTime);
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime);
+        }
 
         // First, a goal that is only recorded once per visit
-        API::getInstance()->addGoal(
-            $this->idSite, 'triggered js ONCE', 'title', 'Thank you', 'contains', $caseSensitive = false,
-            $revenue = 10, $allowMultipleConversions = false
-        );
+        if (!self::goalExists($idSite = 1, $idGoal = 1)) {
+            API::getInstance()->addGoal(
+                $this->idSite, 'triggered js ONCE', 'title', 'Thank you', 'contains', $caseSensitive = false,
+                $revenue = 10, $allowMultipleConversions = false
+            );
+        }
 
         // Second, a goal allowing multiple conversions
-        API::getInstance()->addGoal(
-            $this->idSite, 'triggered js MULTIPLE ALLOWED', 'manually', '', '', $caseSensitive = false,
-            $revenue = 10, $allowMultipleConversions = true
-        );
+        if (!self::goalExists($idSite = 1, $idGoal = 2)) {
+            API::getInstance()->addGoal(
+                $this->idSite, 'triggered js MULTIPLE ALLOWED', 'manually', '', '', $caseSensitive = false,
+                $revenue = 10, $allowMultipleConversions = true
+            );
+        }
     }
 
     private function trackVisits()
diff --git a/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php b/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php
index bd15390b10192d13b9b655c648934c15995fc9b5..70c8bb3f494628fe15343ad7407f81500b80f619 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsCustomVariablesCampaignsNotHeuristics.php
@@ -31,8 +31,13 @@ class Test_Piwik_Fixture_SomeVisitsCustomVariablesCampaignsNotHeuristics extends
 
     private function setUpWebsitesAndGoals()
     {
-        self::createWebsite($this->dateTime);
-        API::getInstance()->addGoal($this->idSite, 'triggered js', 'manually', '', '');
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime);
+        }
+
+        if (!self::goalExists($idSite = 1, $idGoal = 1)) {
+            API::getInstance()->addGoal($this->idSite, 'triggered js', 'manually', '', '');
+        }
     }
 
     private function trackVisits()
diff --git a/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php b/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php
index ba7032f177701e47e90844d5a97ff612febd51ee..68f09c06e002970a1a1a9c20c10ca71c07a5d46d 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php
@@ -31,8 +31,10 @@ class Test_Piwik_Fixture_SomeVisitsManyPageviewsWithTransitions extends Test_Piw
 
     private function setUpWebsitesAndGoals()
     {
-        self::createWebsite($this->dateTime, $ecommerce = 0, $siteName = 'Piwik test', $siteUrl = false,
-                            $siteSearch = 1);
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime, $ecommerce = 0, $siteName = 'Piwik test', $siteUrl = false,
+                                $siteSearch = 1);
+        }
     }
 
     private function trackVisits()
diff --git a/tests/PHPUnit/Fixtures/SomeVisitsWithLongUrls.php b/tests/PHPUnit/Fixtures/SomeVisitsWithLongUrls.php
index c78a3fb9da0a6222074ce37518a888da5c89e743..0284ff05ea02c63dfc9c73c2b03e13f88faddc82 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsWithLongUrls.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsWithLongUrls.php
@@ -29,7 +29,9 @@ class Test_Piwik_Fixture_SomeVisitsWithLongUrls extends Test_Piwik_BaseFixture
 
     private function setUpWebsitesAndGoals()
     {
-        self::createWebsite($this->dateTime);
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime);
+        }
     }
 
     private function trackVisits()
diff --git a/tests/PHPUnit/Fixtures/SomeVisitsWithNonUnicodePageTitles.php b/tests/PHPUnit/Fixtures/SomeVisitsWithNonUnicodePageTitles.php
index 23819ec4e30aaca63c9087363cd85db05f7a53f2..96758636a90722da2fe7c80080daeef67e330d92 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsWithNonUnicodePageTitles.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsWithNonUnicodePageTitles.php
@@ -35,7 +35,10 @@ class Test_Piwik_Fixture_SomeVisitsWithNonUnicodePageTitles extends Test_Piwik_B
     private function setUpWebsites()
     {
         API::getInstance()->setGlobalSearchParameters($searchKeywordParameters = 'gkwd', $searchCategoryParameters = 'gcat');
-        self::createWebsite(Date::factory($this->dateTime)->getDatetime(), 0, "Site 1 - Site search", $siteurl = false, $search = 1, $searchKwd = 'q,mykwd,p', $searchCat = 'cats');
+
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite(Date::factory($this->dateTime)->getDatetime(), 0, "Site 1 - Site search", $siteurl = false, $search = 1, $searchKwd = 'q,mykwd,p', $searchCat = 'cats');
+        }
     }
 
     private function trackVisits()
diff --git a/tests/PHPUnit/Fixtures/ThreeGoalsOnePageview.php b/tests/PHPUnit/Fixtures/ThreeGoalsOnePageview.php
index 71d0be9fb0b4b779ce2b5f9250304080b1bb45e6..fbb3579c393153268fdf97b33b0e48eabf964f1c 100644
--- a/tests/PHPUnit/Fixtures/ThreeGoalsOnePageview.php
+++ b/tests/PHPUnit/Fixtures/ThreeGoalsOnePageview.php
@@ -33,18 +33,27 @@ class Test_Piwik_Fixture_ThreeGoalsOnePageview extends Test_Piwik_BaseFixture
 
     private function setUpWebsitesAndGoals()
     {
-        self::createWebsite($this->dateTime, $ecommerce = 1);
-        API::getInstance()->addGoal(
-            $this->idSite, 'Goal 1 - Thank you', 'title', 'Thank you', 'contains', $caseSensitive = false,
-            $revenue = 10, $allowMultipleConversions = 1
-        );
-
-        API::getInstance()->addGoal(
-            $this->idSite, 'Goal 2 - Hello', 'url', 'hellow', 'contains', $caseSensitive = false,
-            $revenue = 10, $allowMultipleConversions = 0
-        );
-
-        API::getInstance()->addGoal($this->idSite, 'triggered js', 'manually', '', '');
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime, $ecommerce = 1);
+        }
+
+        if (!self::goalExists($idSite = 1, $idGoal = 1)) {
+            API::getInstance()->addGoal(
+                $this->idSite, 'Goal 1 - Thank you', 'title', 'Thank you', 'contains', $caseSensitive = false,
+                $revenue = 10, $allowMultipleConversions = 1
+            );
+        }
+
+        if (!self::goalExists($idSite = 1, $idGoal = 2)) {
+            API::getInstance()->addGoal(
+                $this->idSite, 'Goal 2 - Hello', 'url', 'hellow', 'contains', $caseSensitive = false,
+                $revenue = 10, $allowMultipleConversions = 0
+            );
+        }
+
+        if (!self::goalExists($idSite = 1, $idGoal = 3)) {
+            API::getInstance()->addGoal($this->idSite, 'triggered js', 'manually', '', '');
+        }
     }
 
     private function trackVisits()
diff --git a/tests/PHPUnit/Fixtures/ThreeSitesWithManyVisitsWithSiteSearch.php b/tests/PHPUnit/Fixtures/ThreeSitesWithManyVisitsWithSiteSearch.php
index 353ad4ec31292d6969b8cb51eecbaf0e7fcf347e..7fe98161735ca105b769dc9359eb5486dd828496 100644
--- a/tests/PHPUnit/Fixtures/ThreeSitesWithManyVisitsWithSiteSearch.php
+++ b/tests/PHPUnit/Fixtures/ThreeSitesWithManyVisitsWithSiteSearch.php
@@ -38,9 +38,18 @@ class Test_Piwik_Fixture_ThreeSitesWithManyVisitsWithSiteSearch extends Test_Piw
     protected function setUpWebsites()
     {
         API::getInstance()->setGlobalSearchParameters($searchKeywordParameters = 'gkwd', $searchCategoryParameters = 'gcat');
-        self::createWebsite(Date::factory($this->dateTime)->subHour(200)->getDatetime(), 0, "Site 1 - Site search", $siteurl = false, $search = 1, $searchKwd = 'q,mykwd,p', $searchCat = 'cats');
-        self::createWebsite(Date::factory($this->dateTime)->subHour(400)->getDatetime(), 0, "Site 2 - Site search use default", $siteurl = false, $search = 1, $searchKwd = '', $searchCat = '');
-        self::createWebsite(Date::factory($this->dateTime)->subHour(600)->getDatetime(), 0, "Site 3 - No site search", $siteurl = false, $search = 0);
+
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite(Date::factory($this->dateTime)->subHour(200)->getDatetime(), 0, "Site 1 - Site search", $siteurl = false, $search = 1, $searchKwd = 'q,mykwd,p', $searchCat = 'cats');
+        }
+
+        if (!self::siteCreated($idSite = 2)) {
+            self::createWebsite(Date::factory($this->dateTime)->subHour(400)->getDatetime(), 0, "Site 2 - Site search use default", $siteurl = false, $search = 1, $searchKwd = '', $searchCat = '');
+        }
+
+        if (!self::siteCreated($idSite = 3)) {
+            self::createWebsite(Date::factory($this->dateTime)->subHour(600)->getDatetime(), 0, "Site 3 - No site search", $siteurl = false, $search = 0);
+        }
     }
 
     protected function trackVisits()
diff --git a/tests/PHPUnit/Fixtures/TwoSitesEcommerceOrderWithItems.php b/tests/PHPUnit/Fixtures/TwoSitesEcommerceOrderWithItems.php
index 0402a163253025437430551541e37adb72b5ca59..d83a2018095b898cb8c57b62e032854e85722678 100644
--- a/tests/PHPUnit/Fixtures/TwoSitesEcommerceOrderWithItems.php
+++ b/tests/PHPUnit/Fixtures/TwoSitesEcommerceOrderWithItems.php
@@ -34,12 +34,20 @@ class Test_Piwik_Fixture_TwoSitesEcommerceOrderWithItems extends Test_Piwik_Base
 
     private function setUpWebsitesAndGoals()
     {
-        $this->idSite = self::createWebsite($this->dateTime, $ecommerce = 1);
-        $this->idSite2 = self::createWebsite($this->dateTime);
-        API::getInstance()->addGoal(
-            $this->idSite, 'title match, triggered ONCE', 'title', 'incredible', 'contains',
-            $caseSensitive = false, $revenue = 10, $allowMultipleConversions = true
-        );
+        if (!self::siteCreated($idSite = 1)) {
+            $this->idSite = self::createWebsite($this->dateTime, $ecommerce = 1);
+        }
+
+        if (!self::siteCreated($idSite = 2)) {
+            $this->idSite2 = self::createWebsite($this->dateTime);
+        }
+
+        if (!self::goalExists($idSite = 1, $idGoal = 1)) {
+            API::getInstance()->addGoal(
+                $this->idSite, 'title match, triggered ONCE', 'title', 'incredible', 'contains',
+                $caseSensitive = false, $revenue = 10, $allowMultipleConversions = true
+            );
+        }
     }
 
     protected function trackVisitsSite1($url, $orderId = '937nsjusu 3894', $orderId2 = '1037nsjusu4s3894', $orderId3 = '666', $orderId4 = '777')
diff --git a/tests/PHPUnit/Fixtures/TwoSitesManyVisitsOverSeveralDaysWithSearchEngineReferrers.php b/tests/PHPUnit/Fixtures/TwoSitesManyVisitsOverSeveralDaysWithSearchEngineReferrers.php
index 29a29c39c82acef86c7083394a54197f61582bf4..318b18594c2b41c1e36cd62e56767cbd99331a62 100644
--- a/tests/PHPUnit/Fixtures/TwoSitesManyVisitsOverSeveralDaysWithSearchEngineReferrers.php
+++ b/tests/PHPUnit/Fixtures/TwoSitesManyVisitsOverSeveralDaysWithSearchEngineReferrers.php
@@ -14,7 +14,7 @@ use Piwik\Plugins\Goals\API;
  */
 class Test_Piwik_Fixture_TwoSitesManyVisitsOverSeveralDaysWithSearchEngineReferrers extends Test_Piwik_BaseFixture
 {
-    public $today = '2010-03-06 11:22:33';
+    public $dateTime = '2010-02-01 11:22:33';
     public $idSite = 1;
     public $idSite2 = 2;
     public $keywords = array(
@@ -36,19 +36,29 @@ class Test_Piwik_Fixture_TwoSitesManyVisitsOverSeveralDaysWithSearchEngineReferr
 
     private function setUpWebsitesAndGoals()
     {
-        $siteCreated = '2010-02-01 11:22:33';
+        $siteCreated = $this->dateTime;
 
-        self::createWebsite($siteCreated);
-        API::getInstance()->addGoal($this->idSite, 'triggered php', 'manually', '', '');
-        API::getInstance()->addGoal(
-            $this->idSite, 'another triggered php', 'manually', '', '', false, false, true);
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($siteCreated);
+        }
+
+        if (!self::goalExists($idSite = 1, $idGoal = 1)) {
+            API::getInstance()->addGoal($this->idSite, 'triggered php', 'manually', '', '');
+        }
 
-        self::createWebsite($siteCreated);
+        if (!self::goalExists($idSite = 1, $idGoal = 2)) {
+            API::getInstance()->addGoal(
+                $this->idSite, 'another triggered php', 'manually', '', '', false, false, true);
+        }
+
+        if (!self::siteCreated($idSite = 2)) {
+            self::createWebsite($siteCreated);
+        }
     }
 
     private function trackVisits()
     {
-        $dateTime = $this->today;
+        $dateTime = Date::factory($this->dateTime)->addPeriod(1, 'MONTH')->addDay(5)->getDatetime();
         $idSite = $this->idSite;
         $idSite2 = $this->idSite2;
 
diff --git a/tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php b/tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php
index 36b384d97804290e75df2e7a3f4c488e84647be5..bb4071b1cbce6b882d39f004033f23f03055a6cf 100644
--- a/tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php
+++ b/tests/PHPUnit/Fixtures/TwoSitesTwoVisitorsDifferentDays.php
@@ -39,12 +39,22 @@ class Test_Piwik_Fixture_TwoSitesTwoVisitorsDifferentDays extends Test_Piwik_Bas
         $ecommerce = $this->allowConversions ? 1 : 0;
 
         // tests run in UTC, the Tracker in UTC
-        self::createWebsite($this->dateTime, $ecommerce, "Site 1");
-        self::createWebsite($this->dateTime, 0, "Site 2");
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime, $ecommerce, "Site 1");
+        }
+
+        if (!self::siteCreated($idSite = 2)) {
+            self::createWebsite($this->dateTime, 0, "Site 2");
+        }
 
         if ($this->allowConversions) {
-            APIGoals::getInstance()->addGoal($this->idSite1, 'all', 'url', 'http', 'contains', false, 5);
-            APIGoals::getInstance()->addGoal($this->idSite2, 'all', 'url', 'http', 'contains');
+            if (!self::goalExists($idSite = 1, $idGoal = 1)) {
+                APIGoals::getInstance()->addGoal($this->idSite1, 'all', 'url', 'http', 'contains', false, 5);
+            }
+
+            if (!self::goalExists($idSite = 1, $idGoal = 2)) {
+                APIGoals::getInstance()->addGoal($this->idSite2, 'all', 'url', 'http', 'contains');
+            }
         }
 
         APISitesManager::getInstance()->updateSite(
diff --git a/tests/PHPUnit/Fixtures/TwoSitesVisitsInPast.php b/tests/PHPUnit/Fixtures/TwoSitesVisitsInPast.php
index eae1b9749f7232c8cd7bfde429c0cfe7ea6c71f2..5b1ddfc0a0663e8d58eabb9ba4c8fb5c7b901bf0 100644
--- a/tests/PHPUnit/Fixtures/TwoSitesVisitsInPast.php
+++ b/tests/PHPUnit/Fixtures/TwoSitesVisitsInPast.php
@@ -32,8 +32,13 @@ class Test_Piwik_Fixture_TwoSitesVisitsInPast extends Test_Piwik_BaseFixture
 
     public function setUpWebsitesAndGoals()
     {
-        self::createWebsite($this->dateTimeFirstDateWebsite1);
-        self::createWebsite($this->dateTimeFirstDateWebsite2);
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTimeFirstDateWebsite1);
+        }
+
+        if (!self::siteCreated($idSite = 2)) {
+            self::createWebsite($this->dateTimeFirstDateWebsite2);
+        }
     }
 
     protected function trackVisits()
diff --git a/tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php b/tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php
index 29f9d75da8a9fd8340e2ec442979a836b7637611..26cd3a2092eaa60b230546df1680fedda6c26e3f 100644
--- a/tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php
+++ b/tests/PHPUnit/Fixtures/TwoSitesWithAnnotations.php
@@ -67,7 +67,12 @@ class Test_Piwik_Fixture_TwoSitesWithAnnotations extends Test_Piwik_BaseFixture
     private function setUpWebsitesAndGoals()
     {
         // add two websites
-        self::createWebsite($this->dateTime, $ecommerce = 1);
-        self::createWebsite($this->dateTime, $ecommerce = 1);
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime, $ecommerce = 1);
+        }
+
+        if (!self::siteCreated($idSite = 2)) {
+            self::createWebsite($this->dateTime, $ecommerce = 1);
+        }
     }
 }
diff --git a/tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php b/tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php
index 2e69bacded2b6659a6ad8c63560e9ad268cbf1bc..51a9ef8651252c0f2f1b463919cf52a3085cbf47 100644
--- a/tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php
+++ b/tests/PHPUnit/Fixtures/TwoVisitsNoKeywordWithBot.php
@@ -30,7 +30,9 @@ class Test_Piwik_Fixture_TwoVisitsNoKeywordWithBot extends Test_Piwik_BaseFixtur
 
     private function setUpWebsitesAndGoals()
     {
-        self::createWebsite($this->dateTime);
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime);
+        }
     }
 
     private function trackVisits()
@@ -50,7 +52,10 @@ class Test_Piwik_Fixture_TwoVisitsNoKeywordWithBot extends Test_Piwik_BaseFixtur
         $t->setUrlReferrer('http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CC&url=http%3A%2F%2Fpiwik.org%2F&ei=&usg=');
         $t->setUrl('http://example.org/this%20is%20cool!');
         self::checkResponse($t->doTrackPageView('incredible title!'));
-        $idGoal = API::getInstance()->addGoal($idSite, 'triggered js', 'manually', '', '');
+        $idGoal = 1;
+        if (!self::goalExists($idSite, $idGoal)) {
+            $idGoal = API::getInstance()->addGoal($idSite, 'triggered js', 'manually', '', '');
+        }
         $t->setForceVisitDateTime(Date::factory($dateTime)->addHour(0.3)->getDatetime());
         self::checkResponse($t->doTrackGoal($idGoal, $revenue = 42));
 
diff --git a/tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php b/tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php
index 303d32c3e6a9cc1d24dbaebb878818b99217c710..88ba17670c17e98f73f2f71c49bdae4eb535d827 100644
--- a/tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php
+++ b/tests/PHPUnit/Fixtures/TwoVisitsWithCustomEvents.php
@@ -26,8 +26,13 @@ class Test_Piwik_Fixture_TwoVisitsWithCustomEvents extends Test_Piwik_BaseFixtur
     private function setUpWebsitesAndGoals()
     {
         // tests run in UTC, the Tracker in UTC
-        self::createWebsite($this->dateTime);
-        APIGoals::getInstance()->addGoal($this->idSite, 'triggered js', 'manually', '', '');
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime);
+        }
+
+        if (!self::goalExists($idSite = 1, $idGoal = 1)) {
+            APIGoals::getInstance()->addGoal($this->idSite, 'triggered js', 'manually', '', '');
+        }
     }
 
     public function trackVisits()
diff --git a/tests/PHPUnit/Fixtures/TwoVisitsWithCustomVariables.php b/tests/PHPUnit/Fixtures/TwoVisitsWithCustomVariables.php
index 46ef24c36d783f3cc0556d9a3fecfe6c2609573f..a707b22ef2e76b226d30fe885220380910489815 100644
--- a/tests/PHPUnit/Fixtures/TwoVisitsWithCustomVariables.php
+++ b/tests/PHPUnit/Fixtures/TwoVisitsWithCustomVariables.php
@@ -39,9 +39,17 @@ class Test_Piwik_Fixture_TwoVisitsWithCustomVariables extends Test_Piwik_BaseFix
     private function setUpWebsitesAndGoals()
     {
         // tests run in UTC, the Tracker in UTC
-        self::createWebsite($this->dateTime);
-        API::getInstance()->addGoal($this->idSite, 'triggered js', 'manually', '', '');
-        API::getInstance()->addGoal($this->idSite, 'second goal', 'manually', '', '');
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime);
+        }
+
+        if (!self::goalExists($idSite = 1, $idGoal = 1)) {
+            API::getInstance()->addGoal($this->idSite, 'triggered js', 'manually', '', '');
+        }
+
+        if (!self::goalExists($idSite = 1, $idGoal = 2)) {
+            API::getInstance()->addGoal($this->idSite, 'second goal', 'manually', '', '');
+        }
     }
 
     private function trackVisits()
diff --git a/tests/PHPUnit/Fixtures/VisitOverSeveralDaysImportedLogs.php b/tests/PHPUnit/Fixtures/VisitOverSeveralDaysImportedLogs.php
index f6fd4a223fcc71d26c09d5153d77b23ee5a10d31..6a4ad7393a38845f002e4164db7440192f65d26c 100644
--- a/tests/PHPUnit/Fixtures/VisitOverSeveralDaysImportedLogs.php
+++ b/tests/PHPUnit/Fixtures/VisitOverSeveralDaysImportedLogs.php
@@ -29,7 +29,9 @@ class Test_Piwik_Fixture_VisitOverSeveralDaysImportedLogs extends Test_Piwik_Bas
 
     public function setUpWebsitesAndGoals()
     {
-        self::createWebsite($this->dateTime);
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTime);
+        }
     }
 
     private function trackVisits()
diff --git a/tests/PHPUnit/Fixtures/VisitsOverSeveralDays.php b/tests/PHPUnit/Fixtures/VisitsOverSeveralDays.php
index c845fabbf1dbfafa3b86fcb7def6234cbff11efe..90f01e35472cab6d66380618882708f3cf67452a 100644
--- a/tests/PHPUnit/Fixtures/VisitsOverSeveralDays.php
+++ b/tests/PHPUnit/Fixtures/VisitsOverSeveralDays.php
@@ -52,8 +52,13 @@ class Test_Piwik_Fixture_VisitsOverSeveralDays extends Test_Piwik_BaseFixture
 
     private function setUpWebsitesAndGoals()
     {
-        self::createWebsite($this->dateTimes[0], $ecommerce = 0, $siteName = 'Site AAAAAA');
-        self::createWebsite($this->dateTimes[0], $ecommerce = 0, $siteName = 'SITE BBbbBB');
+        if (!self::siteCreated($idSite = 1)) {
+            self::createWebsite($this->dateTimes[0], $ecommerce = 0, $siteName = 'Site AAAAAA');
+        }
+
+        if (!self::siteCreated($idSite = 2)) {
+            self::createWebsite($this->dateTimes[0], $ecommerce = 0, $siteName = 'SITE BBbbBB');
+        }
     }
 
     private function trackVisits()
diff --git a/tests/PHPUnit/Integration/RowEvolutionTest.php b/tests/PHPUnit/Integration/RowEvolutionTest.php
index 5d34aeced6af8ee890ed087815e2657e37e96397..a3cb49569204aceb3b56c1a77cfc439d3394ca3c 100755
--- a/tests/PHPUnit/Integration/RowEvolutionTest.php
+++ b/tests/PHPUnit/Integration/RowEvolutionTest.php
@@ -26,7 +26,7 @@ class Test_Piwik_Integration_RowEvolution extends IntegrationTestCase
     {
         $idSite = self::$fixture->idSite;
         $idSite2 = self::$fixture->idSite2;
-        $today = self::$fixture->today;
+        $dateTime = self::$fixture->dateTime;
         $keywords = self::$fixture->keywords;
 
         $return = array();
@@ -34,7 +34,7 @@ class Test_Piwik_Integration_RowEvolution extends IntegrationTestCase
         $config = array(
             'testSuffix'             => '_referrer1',
             'idSite'                 => $idSite,
-            'date'                   => $today,
+            'date'                   => $dateTime,
             'otherRequestParameters' => array(
                 'date'      => '2010-02-06,2010-03-06',
                 'period'    => 'day',
@@ -138,7 +138,7 @@ class Test_Piwik_Integration_RowEvolution extends IntegrationTestCase
             'testSuffix'             => '_multipleDates_lastNoData',
             'periods'                => 'month',
             'idSite'                 => $idSite,
-            'date'                   => $today,
+            'date'                   => $dateTime,
             'otherRequestParameters' => array(
                 'date'      => '2010-02-01,2010-04-08',
                 'period'    => 'month',
@@ -153,7 +153,7 @@ class Test_Piwik_Integration_RowEvolution extends IntegrationTestCase
             'testSuffix'             => '_processedRowLabel',
             'periods'                => 'day',
             'idSite'                 => $idSite2,
-            'date'                   => $today,
+            'date'                   => $dateTime,
             'otherRequestParameters' => array(
                 'date'      => '2010-03-01,2010-03-06',
                 'period'    => 'month',
@@ -168,7 +168,7 @@ class Test_Piwik_Integration_RowEvolution extends IntegrationTestCase
             'testSuffix'             => '_mobileDesktop',
             'periods'                => 'day',
             'idSite'                 => $idSite2,
-            'date'                   => $today,
+            'date'                   => $dateTime,
             'otherRequestParameters' => array(
                 'date'      => '2010-03-01,2010-03-06',
                 'period'    => 'month',
@@ -183,7 +183,7 @@ class Test_Piwik_Integration_RowEvolution extends IntegrationTestCase
             'testSuffix'             => '_multiWithFilterLimit',
             'periods'                => 'day',
             'idSite'                 => $idSite,
-            'date'                   => $today,
+            'date'                   => $dateTime,
             'otherRequestParameters' => array(
                 'date'         => '2010-03-01,2010-03-06',
                 'period'       => 'day',
@@ -198,7 +198,7 @@ class Test_Piwik_Integration_RowEvolution extends IntegrationTestCase
             'testSuffix'             => '_multiWithNoData',
             'periods'                => 'day',
             'idSite'                 => $idSite,
-            'date'                   => $today,
+            'date'                   => $dateTime,
             'otherRequestParameters' => array(
                 'date'      => '2010-04-01,2010-04-06',
                 'period'    => 'day',
diff --git a/tests/PHPUnit/UI b/tests/PHPUnit/UI
index 673d21c6a750d8280f4e9ab9d203072dd8d844d2..c316d4b07f69cb153605b095eb74279ed7aad218 160000
--- a/tests/PHPUnit/UI
+++ b/tests/PHPUnit/UI
@@ -1 +1 @@
-Subproject commit 673d21c6a750d8280f4e9ab9d203072dd8d844d2
+Subproject commit c316d4b07f69cb153605b095eb74279ed7aad218
diff --git a/tests/PHPUnit/UITest.php b/tests/PHPUnit/UITest.php
index da6811205f12ff663f337972c39d37fdd3e648e6..5d7c555a321205f0b6e15096e08b360a426f217e 100644
--- a/tests/PHPUnit/UITest.php
+++ b/tests/PHPUnit/UITest.php
@@ -11,6 +11,7 @@ use Piwik\Date;
 use Piwik\Db;
 use Piwik\DbHelper;
 use Piwik\Plugins\VisitsSummary\API;
+use Piwik\ArchiveProcessor\Rules;
 
 abstract class UITest extends IntegrationTestCase
 {
@@ -51,6 +52,7 @@ abstract class UITest extends IntegrationTestCase
         AssetManager::removeMergedAssets();
         
         // launch archiving so tests don't run out of time
+        Rules::$purgeDisabledByTests = true;
         $date = Date::factory(static::$fixture->dateTime)->toString();
         API::getInstance()->get(static::$fixture->idSite, 'year', $date);