diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000000000000000000000000000000000000..b978e604f8a52b6c8cae411ea0813084dad8125e
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,36 @@
+# Auto detect text files and perform LF normalization
+* text eol=lf
+
+# Custom for Visual Studio
+*.cs     diff=csharp
+
+# Standard to msysgit
+*.doc	 diff=astextplain
+*.DOC	 diff=astextplain
+*.docx   diff=astextplain
+*.DOCX   diff=astextplain
+*.dot    diff=astextplain
+*.DOT    diff=astextplain
+*.pdf    diff=astextplain
+*.PDF	 diff=astextplain
+*.rtf	 diff=astextplain
+*.RTF	 diff=astextplain
+
+# BS3
+*.eot    diff=astextplain
+*.EOT    diff=astextplain
+*.svg    diff=astextplain
+*.SVG    diff=astextplain
+*.ttf    diff=astextplain
+*.TTF    diff=astextplain
+*.woff   diff=astextplain
+*.WOFF   diff=astextplain
+*.woff2  diff=astextplain
+*.WOFF2  diff=astextplain
+
+*.z binary
+*.xls binary
+*.xlsx binary
+*.png binary
+*.jpg binary
+*.gif binary
diff --git a/.gitmodules b/.gitmodules
index f1a6686460d5d7c2f4e1fecbbb041079e64fde4b..aedc0c3a15443a8096004946ac3e30b6e7258c42 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -29,6 +29,10 @@
 [submodule "tests/UI/expected-ui-screenshots"]
     path = tests/UI/expected-ui-screenshots
     url = https://github.com/piwik/piwik-ui-tests.git
+[submodule "tests/travis"]
+    path = tests/travis
+    url = https://github.com/piwik/travis-scripts
+    branch = master
 
 # Note: when you add a submodule that SHOULD be left in the packaged release such as the few submodules below,
 #       then you MUST add these submodules names in the SUBMODULES_PACKAGED_WITH_CORE variable in:
@@ -43,7 +47,3 @@
     path = misc/log-analytics
     url = https://github.com/piwik/piwik-log-analytics.git
     branch = master
-
-[submodule "tests/travis"]
-	path = tests/travis
-	url = https://github.com/piwik/travis-scripts
diff --git a/.travis.yml b/.travis.yml
index 37a01b154749161a37938205ac9495466003b5b7..eef27e1d5ed13de69a40a3c81dfdb43a98166f46 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -30,7 +30,8 @@ env:
     # All tests after another
     - TEST_SUITE=AllTests MYSQL_ADAPTER=PDO_MYSQL
     - TEST_SUITE=AllTests MYSQL_ADAPTER=MYSQLI
-    - TEST_SUITE=UITests MYSQL_ADAPTER=PDO_MYSQL
+    - TEST_SUITE=UITests MYSQL_ADAPTER=PDO_MYSQL UITEST_EXTRA_OPTIONS="--run-first-half-only"
+    - TEST_SUITE=UITests MYSQL_ADAPTER=PDO_MYSQL UITEST_EXTRA_OPTIONS="--run-second-half-only"
   global:
     - PIWIK_ROOT_DIR=$TRAVIS_BUILD_DIR
     - SKIP_INSTALL_MYSQL_56=1
@@ -60,7 +61,9 @@ matrix:
       env: TEST_SUITE=UnitTests MYSQL_ADAPTER=PDO_MYSQL
     # run UI tests on PHP 5.3.3 only
     - php: 5.6
-      env: TEST_SUITE=UITests MYSQL_ADAPTER=PDO_MYSQL
+      env: TEST_SUITE=UITests MYSQL_ADAPTER=PDO_MYSQL UITEST_EXTRA_OPTIONS="--run-first-half-only"
+    - php: 5.6
+      env: TEST_SUITE=UITests MYSQL_ADAPTER=PDO_MYSQL UITEST_EXTRA_OPTIONS="--run-second-half-only"
     # run all tests not on PHP 5.6 and run MySQLI tests only on 5.6
     - php: 5.6
       env: TEST_SUITE=AllTests MYSQL_ADAPTER=PDO_MYSQL
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e22b56d36ee976990d3ad0be3f335ceaf8e45d32..5218540d6c6fe3668092290624c3da9a154e7230 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,7 +9,8 @@ This is a changelog for Piwik platform developers. All changes for our HTTP API'
 * We fixed a bug where the API method `Sites.getPatternMatchSites` only returned a very limited number of websites by default. We now return all websites by default unless a limit is specified specifically.
 
 ### Deprecations
-
+* The API method `SitesManager.getSitesIdWithVisits` has been deprecated and will be removed in Piwik 3.0
+* The API method `\Piwik\Plugin::getListHooksRegistered()` has been deprecated and will be removed in Piwik 3.0. Use `\Piwik\Plugin::registerEvents()` instead.
 * The following events have been deprecated and will be removed in Piwik 3.0. Use [dimensions](http://developer.piwik.org/guides/dimensions) instead.
  * `Tracker.existingVisitInformation`
  * `Tracker.getVisitFieldsToPersist`
@@ -19,9 +20,18 @@ This is a changelog for Piwik platform developers. All changes for our HTTP API'
  * `Tracker.recordEcommerceGoal`
  * `Tracker.recordStandardGoals`
 
+
+### New APIs
+
+* The JavaScript Tracker `piwik.js` got a new method `logAllContentBlocksOnPage` to log all found content blocks within a page to the console. This is useful to debug / test content tracking. It can be triggered via `_paq.push(['logAllContentBlocksOnPage'])`
+* The Class `Piwik\Plugins\Login\Controller` is now considered a public API.
+
 ### Internal Change
 * The option `branch` of the console command `development:sync-system-test-processed` was removed as it is no longer needed.
 
+### APIs
+* There is a new event `CronArchive.getIdSitesNotUsingTracker` that allows you to set a list of idSites that do not use the Tracker API to make sure we archive these sites if needed.
+
 ## Piwik 2.14.0
 
 ### Breaking Changes
diff --git a/composer.lock b/composer.lock
index 45dd480da0bc57bd76145be673038de7399f6a3f..7879657d88e01a365b2ddd9d351fe0bf51f0a65e 100644
--- a/composer.lock
+++ b/composer.lock
@@ -816,16 +816,16 @@
         },
         {
             "name": "piwik/device-detector",
-            "version": "3.4.0",
+            "version": "3.4.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/piwik/device-detector.git",
-                "reference": "afa85c4a1ebada71cec1e5422b02408b9b9952be"
+                "reference": "fcb61cc9e669653febdce2cd1a1f0833b569fbb6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/piwik/device-detector/zipball/afa85c4a1ebada71cec1e5422b02408b9b9952be",
-                "reference": "afa85c4a1ebada71cec1e5422b02408b9b9952be",
+                "url": "https://api.github.com/repos/piwik/device-detector/zipball/fcb61cc9e669653febdce2cd1a1f0833b569fbb6",
+                "reference": "fcb61cc9e669653febdce2cd1a1f0833b569fbb6",
                 "shasum": ""
             },
             "require": {
@@ -863,7 +863,7 @@
                 "parser",
                 "useragent"
             ],
-            "time": "2015-08-23 20:35:24"
+            "time": "2015-09-09 20:28:18"
         },
         {
             "name": "piwik/ini",
diff --git a/core/Common.php b/core/Common.php
index c578dce6c688de88e06f988b6808800f45369a34..7e3296bee15a0e7ace4c6991e032031d069e46ad 100644
--- a/core/Common.php
+++ b/core/Common.php
@@ -130,9 +130,15 @@ class Common
             return self::$isCliMode;
         }
 
-        $remoteAddr = @$_SERVER['REMOTE_ADDR'];
-        return PHP_SAPI == 'cli' ||
-        (self::isPhpCgiType() && empty($remoteAddr));
+        if(PHP_SAPI == 'cli'){
+            return true;
+        }
+        
+        if(self::isPhpCgiType() && (!isset($_SERVER['REMOTE_ADDR']) || empty($_SERVER['REMOTE_ADDR']))){
+            return true;
+        }
+        
+        return false;
     }
 
     /**
diff --git a/core/Config.php b/core/Config.php
index 7971c5d47ca2ba80a87a6c7d534b5692fa9db849..a1bbabc3496d28507ced807772e4195b92e905c0 100644
--- a/core/Config.php
+++ b/core/Config.php
@@ -287,7 +287,10 @@ class Config
     public function deleteLocalConfig()
     {
         $configLocal = $this->getLocalPath();
-        unlink($configLocal);
+        
+        if(file_exists($configLocal)){
+            @unlink($configLocal);
+        }
     }
 
     /**
diff --git a/core/Config/IniFileChain.php b/core/Config/IniFileChain.php
index e8384a4f3a206765f4699a48bb311401b60fde53..d8b4e4e28bd6adce4a6f6beafa50b1236703e764 100644
--- a/core/Config/IniFileChain.php
+++ b/core/Config/IniFileChain.php
@@ -141,7 +141,11 @@ class IniFileChain
 
         $configToWrite = array();
         foreach ($this->mergedSettings as $sectionName => $changedSection) {
-            $existingMutableSection = @$existingMutableSettings[$sectionName] ?: array();
+            if(isset($existingMutableSettings[$sectionName])){
+                $existingMutableSection = $existingMutableSettings[$sectionName];
+            } else{
+                $existingMutableSection = array();
+            }
 
             // remove default values from both (they should not get written to local)
             if (isset($defaultSettings[$sectionName])) {
diff --git a/core/CronArchive.php b/core/CronArchive.php
index ba0b1632203843223ce342a8f305b505b890ffd8..69f7a032986c69d9fab418679564f116d208e920 100644
--- a/core/CronArchive.php
+++ b/core/CronArchive.php
@@ -15,6 +15,7 @@ use Piwik\Container\StaticContainer;
 use Piwik\CronArchive\FixedSiteIds;
 use Piwik\CronArchive\SharedSiteIds;
 use Piwik\Archive\ArchiveInvalidator;
+use Piwik\DataAccess\RawLogDao;
 use Piwik\Exception\UnexpectedWebsiteFoundException;
 use Piwik\Metrics\Formatter;
 use Piwik\Period\Factory as PeriodFactory;
@@ -75,6 +76,8 @@ class CronArchive
     private $websiteDayHasFinishedSinceLastRun = array();
     private $idSitesInvalidatedOldReports = array();
     private $shouldArchiveOnlySpecificPeriods = array();
+    private $idSitesNotUsingTracker;
+
     /**
      * @var SharedSiteIds|FixedSiteIds
      */
@@ -210,6 +213,8 @@ class CronArchive
     private $processed = 0;
     private $archivedPeriodsArchivesWebsite = 0;
 
+    private $archivingStartingTime;
+
     private $formatter;
 
     /**
@@ -272,6 +277,17 @@ class CronArchive
 
     public function init()
     {
+        /**
+         * This event is triggered during initializing archiving.
+         *
+         * @param CronArchive $this
+         */
+        Piwik::postEvent('CoreArchive.run.start', array($this));
+
+        SettingsServer::setMaxExecutionTime(0);
+
+        $this->archivingStartingTime = time();
+
         // Note: the order of methods call matters here.
         $this->initStateFromParameters();
 
@@ -341,6 +357,29 @@ class CronArchive
                 continue;
             }
 
+            $shouldCheckIfArchivingIsNeeded    = !$this->shouldArchiveSpecifiedSites && !$this->shouldArchiveAllSites;
+            $hasWebsiteDayFinishedSinceLastRun = in_array($idSite, $this->websiteDayHasFinishedSinceLastRun);
+            $isOldReportInvalidatedForWebsite  = $this->isOldReportInvalidatedForWebsite($idSite);
+
+            if ($shouldCheckIfArchivingIsNeeded) {
+                // if not specific sites and not all websites should be archived, we check whether we actually have
+                // to process the archives for this website (only if there were visits since midnight)
+                if (!$hasWebsiteDayFinishedSinceLastRun && !$isOldReportInvalidatedForWebsite) {
+
+                    if ($this->isWebsiteUsingTheTracker($idSite) &&
+                        !$this->hadWebsiteTrafficSinceMidnightInTimezone($idSite)) {
+                        $this->logger->info("Will skip website $idSite as archiving is not needed");
+                        $this->skipped++;
+                        continue;
+                    }
+
+                } elseif ($hasWebsiteDayFinishedSinceLastRun) {
+                    $this->logger->info("Day has finished for website $idSite since last run");
+                } elseif ($isOldReportInvalidatedForWebsite) {
+                    $this->logger->info("Old report was invalidated for website $idSite");
+                }
+            }
+
             /**
              * This event is triggered before the cron archiving process starts archiving data for a single
              * site.
@@ -386,6 +425,7 @@ class CronArchive
                 ? self::NO_ERROR
                 : (count($this->errors) . " errors."))
         );
+
         $this->logger->info($timer->__toString());
     }
 
@@ -408,6 +448,13 @@ class CronArchive
 
         $summary = count($this->errors) . " total errors during this script execution, please investigate and try and fix these errors.";
         $this->logFatalError($summary);
+
+        /**
+         * This event is triggered after archiving.
+         *
+         * @param CronArchive $this
+         */
+        Piwik::postEvent('CoreArchive.run.finish', array($this));
     }
 
     public function logFatalError($m)
@@ -607,18 +654,24 @@ class CronArchive
                 continue;
             }
 
+            $timer = new Timer();
+
             $date = $this->getApiDateParameter($idSite, $period, $lastTimestampWebsiteProcessedPeriods);
-            $periodArchiveWasSuccessful = $this->archiveReportsFor($idSite, $period, $date, $archiveSegments = true);
+            $periodArchiveWasSuccessful = $this->archiveReportsFor($idSite, $period, $date, $archiveSegments = true, $timer);
             $success = $periodArchiveWasSuccessful && $success;
         }
 
-        // period=range
-        $customDateRangesToPreProcessForSite = $this->getCustomDateRangeToPreProcess($idSite);
-        foreach ($customDateRangesToPreProcessForSite as $dateRange) {
-            $archiveSegments = false; // do not pre-process segments for period=range #7611
-            $periodArchiveWasSuccessful = $this->archiveReportsFor($idSite, 'range', $dateRange, $archiveSegments);
-            $success = $periodArchiveWasSuccessful && $success;
+        if ($this->shouldProcessPeriod('range')) {
+            // period=range
+            $customDateRangesToPreProcessForSite = $this->getCustomDateRangeToPreProcess($idSite);
+            foreach ($customDateRangesToPreProcessForSite as $dateRange) {
+                $timer = new Timer();
+                $archiveSegments = false; // do not pre-process segments for period=range #7611
+                $periodArchiveWasSuccessful = $this->archiveReportsFor($idSite, 'range', $dateRange, $archiveSegments, $timer);
+                $success = $periodArchiveWasSuccessful && $success;
+            }
         }
+
         return $success;
     }
 
@@ -661,6 +714,8 @@ class CronArchive
             return true;
         }
 
+        $timer = new Timer();
+
         // Fake that the request is already done, so that other core:archive commands
         // running do not grab the same website from the queue
         Option::set($this->lastRunKey($idSite, "day"), time());
@@ -730,7 +785,8 @@ class CronArchive
             && !$shouldArchivePeriods
             && $this->shouldArchiveAllSites
         ) {
-            $this->logger->info("Skipped website id $idSite, no visits in the last " . $date . " days, " . $timerWebsite->__toString());
+            $humanReadableDate = $this->formatReadableDateRange($date);
+            $this->logger->info("Skipped website id $idSite, no visits in the $humanReadableDate days, " . $timerWebsite->__toString());
             $this->skipped++;
             return false;
         }
@@ -738,7 +794,7 @@ class CronArchive
         $this->visitsToday += $visitsToday;
         $this->websitesWithVisitsSinceLastRun++;
 
-        $this->archiveReportsFor($idSite, "day", $this->getApiDateParameter($idSite, "day", $processDaysSince), $archiveSegments = true);
+        $this->archiveReportsFor($idSite, "day", $this->getApiDateParameter($idSite, "day", $processDaysSince), $archiveSegments = true, $timer);
 
         return true;
     }
@@ -751,6 +807,19 @@ class CronArchive
         return $segments;
     }
 
+    private function formatReadableDateRange($date)
+    {
+        if (0 === strpos($date, 'last')) {
+            $readable = 'last ' . str_replace('last', '', $date);
+        } elseif (0 === strpos($date, 'previous')) {
+            $readable = 'previous ' . str_replace('previous', '', $date);
+        } else {
+            $readable = 'last ' . $date;
+        }
+
+        return $readable;
+    }
+
     /**
      * Will trigger API requests for the specified Website $idSite,
      * for the specified $period, for all segments that are pre-processed for this website.
@@ -760,12 +829,11 @@ class CronArchive
      * @param $period string
      * @param $date string
      * @param $archiveSegments bool Whether to pre-process all custom segments
+     * @param Timer $periodTimer
      * @return bool True on success, false if some request failed
      */
-    private function archiveReportsFor($idSite, $period, $date, $archiveSegments)
+    private function archiveReportsFor($idSite, $period, $date, $archiveSegments, Timer $periodTimer)
     {
-        $timer = new Timer();
-
         $url = $this->getVisitsRequestUrl($idSite, $period, $date, $segment = false);
         $url = $this->makeRequestUrl($url);
 
@@ -820,7 +888,7 @@ class CronArchive
             }
         }
 
-        $this->logArchivedWebsite($idSite, $period, $date, $segmentRequestsCount, $visitsInLastPeriods, $visitsLastPeriod, $timer);
+        $this->logArchivedWebsite($idSite, $period, $date, $segmentRequestsCount, $visitsInLastPeriods, $visitsLastPeriod, $periodTimer);
 
         return $success;
     }
@@ -913,24 +981,29 @@ class CronArchive
         $this->shouldArchiveOnlySitesWithTrafficSince = $this->isShouldArchiveAllSitesWithTrafficSince();
         $this->shouldArchiveOnlySpecificPeriods = $this->getPeriodsToProcess();
 
-        if ($this->shouldArchiveOnlySitesWithTrafficSince === false) {
-            // force-all-periods is not set here
-            if (empty($this->lastSuccessRunTimestamp)) {
-                // First time we run the script
-                $this->shouldArchiveOnlySitesWithTrafficSince = self::ARCHIVE_SITES_WITH_TRAFFIC_SINCE;
-            } else {
-                // there was a previous successful run
-                $this->shouldArchiveOnlySitesWithTrafficSince = time() - $this->lastSuccessRunTimestamp;
-            }
-        } else {
+        if ($this->shouldArchiveOnlySitesWithTrafficSince !== false) {
             // force-all-periods is set here
             $this->archiveAndRespectTTL = false;
+        }
+    }
 
-            if ($this->shouldArchiveOnlySitesWithTrafficSince === true) {
-                // force-all-periods without value
-                $this->shouldArchiveOnlySitesWithTrafficSince = self::ARCHIVE_SITES_WITH_TRAFFIC_SINCE;
-            }
+    private function getSecondsSinceLastArchive()
+    {
+        $wasNotCustomTimeRequested = $this->shouldArchiveOnlySitesWithTrafficSince === false;
+
+        if ($wasNotCustomTimeRequested && !empty($this->lastSuccessRunTimestamp)) {
+            // there was a previous successful run
+
+            return time() - $this->lastSuccessRunTimestamp;
+
+        } elseif (is_numeric($this->shouldArchiveOnlySitesWithTrafficSince)) {
+            // $shouldArchiveAllPeriodsSince was specified
+            $secondsSinceStart = time() - $this->archivingStartingTime;
+            return $this->shouldArchiveOnlySitesWithTrafficSince + $secondsSinceStart;
         }
+
+        // force-all-periods without value
+        return self::ARCHIVE_SITES_WITH_TRAFFIC_SINCE;
     }
 
     public function filterWebsiteIds(&$websiteIds)
@@ -966,7 +1039,7 @@ class CronArchive
 
         return CoreAdminHomeAPI::getInstance();
     }
-    
+
     public function invalidateArchivedReportsForSitesThatNeedToBeArchivedAgain()
     {
         $invalidator  = new ArchiveInvalidator();
@@ -976,7 +1049,7 @@ class CronArchive
             $listSiteIds = implode(',', $siteIds);
 
             try {
-                $this->logger->info('Will invalidate archived reports for ' . $date . ' for following siteIds: ' . $listSiteIds);
+                $this->logger->info('Will invalidate archived reports for ' . $date . ' for following websites ids: ' . $listSiteIds);
                 $this->getApiToInvalidateArchivedReport()->invalidateArchivedReports($siteIds, $date);
             } catch (Exception $e) {
                 $this->logger->info('Failed to invalidate archived reports: ' . $e->getMessage());
@@ -995,17 +1068,15 @@ class CronArchive
 
             return $this->shouldArchiveSpecifiedSites;
         }
+
+        $this->findWebsiteIdsInTimezoneWithNewDay($this->allWebsites);
+        $this->findInvalidatedSitesToReprocess();
+
         if ($this->shouldArchiveAllSites) {
             $this->logger->info("- Will process all " . count($this->allWebsites) . " websites");
-            return $this->allWebsites;
         }
 
-        $websiteIds = array_merge(
-            $this->addWebsiteIdsWithVisitsSinceLastRun(),
-            $this->getInvalidatedSitesToReprocess()
-        );
-        $websiteIds = array_merge($websiteIds, $this->addWebsiteIdsInTimezoneWithNewDay($websiteIds));
-        return array_unique($websiteIds);
+        return $this->allWebsites;
     }
 
     private function updateIdSitesInvalidatedOldReports()
@@ -1021,7 +1092,7 @@ class CronArchive
      *
      * @return array
      */
-    private function getInvalidatedSitesToReprocess()
+    private function findInvalidatedSitesToReprocess()
     {
         $this->updateIdSitesInvalidatedOldReports();
 
@@ -1036,20 +1107,37 @@ class CronArchive
     }
 
     /**
-     * Returns all sites that had visits since specified time
+     * Detects whether a site had visits since midnight in the websites timezone
      *
-     * @return string
+     * @return bool
      */
-    private function addWebsiteIdsWithVisitsSinceLastRun()
+    private function hadWebsiteTrafficSinceMidnightInTimezone($idSite)
     {
-        $sitesIdWithVisits = APISitesManager::getInstance()->getSitesIdWithVisits(time() - $this->shouldArchiveOnlySitesWithTrafficSince);
-        $websiteIds = !empty($sitesIdWithVisits) ? ", IDs: " . implode(", ", $sitesIdWithVisits) : "";
-        $prettySeconds = $this->formatter->getPrettyTimeFromSeconds($this->shouldArchiveOnlySitesWithTrafficSince, true);
-        $this->logger->info("- Will process " . count($sitesIdWithVisits) . " websites with new visits since "
-            . $prettySeconds
-            . " "
-            . $websiteIds);
-        return $sitesIdWithVisits;
+        $timezone = Site::getTimezoneFor($idSite);
+
+        $nowInTimezone      = Date::factory('now', $timezone);
+        $midnightInTimezone = $nowInTimezone->setTime('00:00:00');
+
+        $secondsSinceMidnight = $nowInTimezone->getTimestamp() - $midnightInTimezone->getTimestamp();
+
+        $secondsSinceLastArchive = $this->getSecondsSinceLastArchive();
+        if ($secondsSinceLastArchive < $secondsSinceMidnight) {
+            $secondsSinceMidnight = $secondsSinceLastArchive;
+        }
+
+        $from = Date::now()->subSeconds($secondsSinceMidnight)->getDatetime();
+        $to   = Date::now()->addHour(1)->getDatetime();
+
+        $dao = new RawLogDao();
+        $hasVisits = $dao->hasSiteVisitsBetweenTimeframe($from, $to, $idSite);
+
+        if ($hasVisits) {
+            $this->logger->info("$idSite has visits between $from and $to");
+        } else {
+            $this->logger->info("$idSite has no visits between $from and $to");
+        }
+
+        return $hasVisits;
     }
 
     /**
@@ -1097,7 +1185,7 @@ class CronArchive
      * @param $websiteIds
      * @return array Website IDs
      */
-    private function addWebsiteIdsInTimezoneWithNewDay($websiteIds)
+    private function findWebsiteIdsInTimezoneWithNewDay($websiteIds)
     {
         $timezones = $this->getTimezonesHavingNewDay();
         $websiteDayHasFinishedSinceLastRun = APISitesManager::getInstance()->getSitesIdFromTimezones($timezones);
@@ -1242,7 +1330,8 @@ class CronArchive
     private function logArchivedWebsite($idSite, $period, $date, $segmentsCount, $visitsInLastPeriods, $visitsToday, Timer $timer)
     {
         if (strpos($date, 'last') === 0 || strpos($date, 'previous') === 0) {
-            $visitsInLastPeriods = (int)$visitsInLastPeriods . " visits in last " . $date . " " . $period . "s, ";
+            $humanReadable = $this->formatReadableDateRange($date);
+            $visitsInLastPeriods = (int)$visitsInLastPeriods . " visits in $humanReadable " . $period . "s, ";
             $thisPeriod = $period == "day" ? "today" : "this " . $period;
             $visitsInLastPeriod = (int)$visitsToday . " visits " . $thisPeriod . ", ";
         } else {
@@ -1285,7 +1374,7 @@ class CronArchive
      */
     private function getDefaultPeriodsToProcess()
     {
-        return array('day', 'week', 'month', 'year');
+        return array('day', 'week', 'month', 'year', 'range');
     }
 
     /**
@@ -1297,6 +1386,39 @@ class CronArchive
         return in_array($idSite, $this->idSitesInvalidatedOldReports);
     }
 
+    private function isWebsiteUsingTheTracker($idSite)
+    {
+        if (!isset($this->idSitesNotUsingTracker)) {
+            // we want to trigger event only once
+            $this->idSitesNotUsingTracker = array();
+
+            /**
+             * This event is triggered when detecting whether there are sites that do not use the tracker.
+             *
+             * By default we only archive a site when there was actually any visit since the last archiving.
+             * However, some plugins do import data from another source instead of using the tracker and therefore
+             * will never have any visits for this site. To make sure we still archive data for such a site when
+             * archiving for this site is requested, you can listen to this event and add the idSite to the list of
+             * sites that do not use the tracker.
+             *
+             * @param bool $idSitesNotUsingTracker The list of idSites that rather import data instead of using the tracker
+             */
+            Piwik::postEvent('CronArchive.getIdSitesNotUsingTracker', array(&$this->idSitesNotUsingTracker));
+
+            if (!empty($this->idSitesNotUsingTracker)) {
+                $this->logger->info("The following websites do not use the tracker: " . implode(',', $this->idSitesNotUsingTracker));
+            }
+        }
+
+        $isUsingTracker = !in_array($idSite, $this->idSitesNotUsingTracker);
+
+        if (!$isUsingTracker) {
+            $this->logger->info("The website $idSite is not using the tracker");
+        }
+
+        return $isUsingTracker;
+    }
+
     private function shouldProcessPeriod($period)
     {
         if (empty($this->shouldArchiveOnlySpecificPeriods)) {
diff --git a/core/DataAccess/ArchiveTableCreator.php b/core/DataAccess/ArchiveTableCreator.php
index c6b958449b95154ad1e7b4f9404908eb49e93d4a..ca94b7239997b0b19a027fd0d1901119e66bf188 100644
--- a/core/DataAccess/ArchiveTableCreator.php
+++ b/core/DataAccess/ArchiveTableCreator.php
@@ -33,7 +33,7 @@ class ArchiveTableCreator
     protected static function getTable(Date $date, $type)
     {
         $tableNamePrefix = "archive_" . $type;
-        $tableName = $tableNamePrefix . "_" . $date->toString('Y_m');
+        $tableName = $tableNamePrefix . "_" . self::getTableMonthFromDate($date);
         $tableName = Common::prefixTable($tableName);
 
         self::createArchiveTablesIfAbsent($tableName, $tableNamePrefix);
@@ -100,6 +100,11 @@ class ArchiveTableCreator
         return $date;
     }
 
+    public static function getTableMonthFromDate(Date $date)
+    {
+        return $date->toString('Y_m');
+    }
+
     public static function getTypeFromTableName($tableName)
     {
         if (strpos($tableName, 'archive_numeric_') !== false) {
diff --git a/core/DataAccess/RawLogDao.php b/core/DataAccess/RawLogDao.php
index 184b33909f1d4aec70eb0632e233e87e4457daad..7310267b4436ed9d8a2c2ef1b52c173415539aeb 100644
--- a/core/DataAccess/RawLogDao.php
+++ b/core/DataAccess/RawLogDao.php
@@ -11,7 +11,6 @@ namespace Piwik\DataAccess;
 use Piwik\Common;
 use Piwik\Container\StaticContainer;
 use Piwik\Db;
-use Piwik\Piwik;
 use Piwik\Plugin\Dimension\DimensionMetadataProvider;
 
 /**
@@ -208,6 +207,26 @@ class RawLogDao
         Db::unlockAllTables();
     }
 
+
+    /**
+     * Returns the list of the website IDs that received some visits between the specified timestamp.
+     *
+     * @param string $fromDateTime
+     * @param string $toDateTime
+     * @return bool true if there are visits for this site between the given timeframe, false if not
+     */
+    public function hasSiteVisitsBetweenTimeframe($fromDateTime, $toDateTime, $idSite)
+    {
+        $sites = Db::fetchOne("SELECT 1
+                FROM " . Common::prefixTable('log_visit') . "
+                WHERE idsite = ?
+                AND visit_last_action_time > ?
+                AND visit_last_action_time < ?
+                LIMIT 1", array($idSite, $fromDateTime, $toDateTime));
+
+        return (bool) $sites;
+    }
+
     /**
      * @param array $columnsToSet
      * @return string
diff --git a/core/Date.php b/core/Date.php
index 4f792200e202aa99b38ea20faba15d56400b745f..1448c238260ab090746b030bdcecdf7768989545 100644
--- a/core/Date.php
+++ b/core/Date.php
@@ -709,6 +709,17 @@ class Date
         return $this->addHour(-$n);
     }
 
+    /**
+     * Subtracts `$n` seconds from `$this` date and returns the result in a new Date.
+     *
+     * @param int $n Number of seconds to subtract. Can be less than 0.
+     * @return \Piwik\Date
+     */
+    public function subSeconds($n)
+    {
+        return new Date($this->timestamp - $n, $this->timezone);
+    }
+
     /**
      * Adds a period to `$this` date and returns the result in a new Date instance.
      *
diff --git a/core/Db/BatchInsert.php b/core/Db/BatchInsert.php
index 160412418207b799c11678b725be300fe4330846..8d54c163b2951dd0bcdc3ce8ad2b9fe26e064a83 100644
--- a/core/Db/BatchInsert.php
+++ b/core/Db/BatchInsert.php
@@ -98,7 +98,10 @@ class BatchInsert
         }
 
         // if all else fails, fallback to a series of INSERTs
-        @unlink($filePath);
+        if(file_exists($filePath)){
+            @unlink($filePath);
+        }
+        
         self::tableInsertBatchIterate($tableName, $fields, $values);
         return false;
     }
diff --git a/core/ExceptionHandler.php b/core/ExceptionHandler.php
index 12552b85e449504b998b286dd7063475c420347f..aa20344dd1d892c59152a290061d823f203c3393 100644
--- a/core/ExceptionHandler.php
+++ b/core/ExceptionHandler.php
@@ -56,7 +56,7 @@ class ExceptionHandler
 
     public static function dieWithHtmlErrorPage(Exception $exception)
     {
-        Common::sendHeader('Content-Type: text/html; char1set=utf-8');
+        Common::sendHeader('Content-Type: text/html; charset=utf-8');
 
         echo self::getErrorResponse($exception);
 
diff --git a/core/Filesystem.php b/core/Filesystem.php
index 73a07a54bb541ebf58fbf288563784505bd304df..7549192a2c567826afe1f8b2a5c49885e64d8da3 100644
--- a/core/Filesystem.php
+++ b/core/Filesystem.php
@@ -135,7 +135,7 @@ class Filesystem
 
             $output = @shell_exec($command);
             if ($output) {
-                $output = explode("\n", $output);
+                $output = explode("\n", trim($output));
 
                 $commandFailed = (false !== strpos($output, "no file systems processed"));
                 if (!$commandFailed
diff --git a/core/Http.php b/core/Http.php
index df9df3e5aa417ee0780778092238f86303bdda09..b5533262e4a156b76fc75925bacbe7dcf309c5f1 100644
--- a/core/Http.php
+++ b/core/Http.php
@@ -426,7 +426,9 @@ class Http
 
             // save to file
             if (is_resource($file)) {
-                $handle = fopen($aUrl, 'rb', false, $ctx);
+                if (!($handle = fopen($aUrl, 'rb', false, $ctx))) {
+                    throw new Exception("Unable to open $aUrl");
+                }
                 while (!feof($handle)) {
                     $response = fread($handle, 8192);
                     $fileLength += strlen($response);
diff --git a/core/Intl/Locale.php b/core/Intl/Locale.php
index 5b284d5a9731bb35e922bfcf58e0ec3a6abfd626..0c7676569af4e306c2649bbfe8bbd34bd93bda33 100644
--- a/core/Intl/Locale.php
+++ b/core/Intl/Locale.php
@@ -10,16 +10,31 @@ namespace Piwik\Intl;
 
 class Locale
 {
+    /**
+     * @param string|array $locale
+     */
     public static function setLocale($locale)
     {
-        $localeVariant = str_replace('UTF-8', 'UTF8', $locale);
-
-        setlocale(LC_ALL, $locale, $localeVariant);
+        if(!is_array($locale)){
+            $locale = array($locale);
+        }
+        
+        $newLocale = array();
+        foreach($locale as $localePart){
+            $newLocale[] = $localePart;
+            
+            $localeVariant = str_replace('UTF-8', 'UTF8', $localePart);
+            if($localeVariant != $localePart){
+                $newLocale[] = $localeVariant;
+            }
+        }
+        
+        setlocale(LC_ALL, $newLocale);
         setlocale(LC_CTYPE, '');
     }
 
     public static function setDefaultLocale()
     {
-        self::setLocale('en_US.UTF-8');
+        self::setLocale(array('en_US.UTF-8', 'en-US'));
     }
 }
diff --git a/core/Plugin.php b/core/Plugin.php
index 560e7581b1525e7ac626d1b2f3a38e833dc36b15..ff938a659f7921e1748d8604983d019a8679b773 100644
--- a/core/Plugin.php
+++ b/core/Plugin.php
@@ -56,7 +56,7 @@ require_once PIWIK_INCLUDE_PATH . '/core/Plugin/MetadataLoader.php';
  *
  *     class MyPlugin extends Plugin
  *     {
- *         public function getListHooksRegistered()
+ *         public function registerEvents()
  *         {
  *             return array(
  *                 'API.getReportMetadata' => 'getReportMetadata',
@@ -192,7 +192,7 @@ class Plugin
     }
 
     /**
-     * Returns a list of hooks with associated event observers.
+     * Returns a list of events with associated event observers.
      *
      * Derived classes should use this method to associate callbacks with events.
      *
@@ -209,12 +209,22 @@ class Plugin
      *                                                      'before'   => true // execute before callbacks w/o ordering
      *                                                  )
      *                   )
+     * @since 2.15.0
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array();
     }
 
+    /**
+     * @deprecated since 2.15.0 use {@link registerEvents()} instead.
+     * @return array
+     */
+    public function getListHooksRegistered()
+    {
+        return $this->registerEvents();
+    }
+
     /**
      * This method is executed after a plugin is loaded and translations are registered.
      * Useful for initialization code that uses translated strings.
diff --git a/core/Plugin/ControllerAdmin.php b/core/Plugin/ControllerAdmin.php
index c82fcaf92bfd9aad59bebaf7cb307bb621dd604c..3431d701566663ff2bc82b92b9448866fb6a5f9d 100644
--- a/core/Plugin/ControllerAdmin.php
+++ b/core/Plugin/ControllerAdmin.php
@@ -11,12 +11,14 @@ namespace Piwik\Plugin;
 use Piwik\Config as PiwikConfig;
 use Piwik\Config;
 use Piwik\Date;
+use Piwik\Development;
 use Piwik\Menu\MenuAdmin;
 use Piwik\Menu\MenuTop;
 use Piwik\Menu\MenuUser;
 use Piwik\Notification;
 use Piwik\Notification\Manager as NotificationManager;
 use Piwik\Piwik;
+use Piwik\Tracker\TrackerConfig;
 use Piwik\Url;
 use Piwik\Version;
 use Piwik\View;
@@ -140,6 +142,25 @@ abstract class ControllerAdmin extends Controller
         NotificationManager::notify('PHP53VersionCheck', $notification);
     }
 
+    private static function notifyWhenDebugOnDemandIsEnabled($trackerSetting)
+    {
+        if (!Development::isEnabled()
+            && Piwik::hasUserSuperUserAccess() &&
+            TrackerConfig::getConfigValue($trackerSetting)) {
+
+            $message = Piwik::translate('General_WarningDebugOnDemandEnabled');
+            $message = sprintf($message, '"' . $trackerSetting . '"', '"[Tracker] ' .  $trackerSetting . '"', '"0"',
+                                               '"config/config.ini.php"');
+            $notification = new Notification($message);
+            $notification->title = Piwik::translate('General_Warning');
+            $notification->priority = Notification::PRIORITY_LOW;
+            $notification->context = Notification::CONTEXT_WARNING;
+            $notification->type = Notification::TYPE_TRANSIENT;
+            $notification->flags = Notification::FLAG_NO_CLEAR;
+            NotificationManager::notify('Tracker' . $trackerSetting, $notification);
+        }
+    }
+
     /**
      * Assigns view properties that would be useful to views that render admin pages.
      *
@@ -185,6 +206,8 @@ abstract class ControllerAdmin extends Controller
         self::checkPhpVersion($view);
 
         self::notifyWhenPhpVersionIsEOL();
+        self::notifyWhenDebugOnDemandIsEnabled('debug');
+        self::notifyWhenDebugOnDemandIsEnabled('debug_on_demand');
 
         $adminMenu = MenuAdmin::getInstance()->getMenu();
         $view->adminMenu = $adminMenu;
diff --git a/core/Plugin/Segment.php b/core/Plugin/Segment.php
index b9164898a8b44e22429956412dc415a58033c70b..8a9688fb0b0ae7ca356c5ea3ba39f23c7918609e 100644
--- a/core/Plugin/Segment.php
+++ b/core/Plugin/Segment.php
@@ -52,6 +52,14 @@ class Segment
     private $permission;
     private $suggestedValuesCallback;
 
+    /**
+     * If true, this segment will only be visible to the user if the user has view access
+     * to one of the requested sites (see API.getSegmentsMetadata).
+     *
+     * @var bool
+     */
+    private $requiresAtLeastViewAccess = false;
+
     /**
      * @ignore
      */
@@ -255,4 +263,29 @@ class Segment
 
         return $segment;
     }
+
+    /**
+     * Returns true if this segment should only be visible to the user if the user has view access
+     * to one of the requested sites (see API.getSegmentsMetadata), false if it should always be
+     * visible to the user (even the anonymous user).
+     *
+     * @return boolean
+     * @ignore
+     */
+    public function isRequiresAtLeastViewAccess()
+    {
+        return $this->requiresAtLeastViewAccess;
+    }
+
+    /**
+     * Sets whether the segment should only be visible if the user requesting it has view access
+     * to one of the requested sites and if the user is not the anonymous user.
+     *
+     * @param boolean $requiresAtLeastViewAccess
+     * @ignore
+     */
+    public function setRequiresAtLeastViewAccess($requiresAtLeastViewAccess)
+    {
+        $this->requiresAtLeastViewAccess = $requiresAtLeastViewAccess;
+    }
 }
diff --git a/core/ReportRenderer.php b/core/ReportRenderer.php
index a693d1b7f33e6514896f892812e78b49da3fd236..6b809f5b1697a893ee114f1225b1d6f7ed427040 100644
--- a/core/ReportRenderer.php
+++ b/core/ReportRenderer.php
@@ -151,7 +151,11 @@ abstract class ReportRenderer extends BaseFactory
         $outputFilename = StaticContainer::get('path.tmp') . '/assets/' . $filename;
 
         @chmod($outputFilename, 0600);
-        @unlink($outputFilename);
+        
+        if(file_exists($outputFilename)){
+            @unlink($outputFilename);
+        }
+        
         return $outputFilename;
     }
 
diff --git a/core/Tracker/GoalManager.php b/core/Tracker/GoalManager.php
index 7bd5e97f1e588af67de0ec7eac947f07e34f13f8..89c55b2d67043f18a665881c103c3b580986405f 100644
--- a/core/Tracker/GoalManager.php
+++ b/core/Tracker/GoalManager.php
@@ -125,53 +125,71 @@ class GoalManager
             return array();
         }
 
-        $actionType = $action->getActionType();
         $goals = $this->getGoalDefinitions($idSite);
 
         $convertedGoals = array();
         foreach ($goals as $goal) {
-            $attribute = $goal['match_attribute'];
-            // if the attribute to match is not the type of the current action
-            if ((($attribute == 'url' || $attribute == 'title') && $actionType != Action::TYPE_PAGE_URL)
-              || ($attribute == 'file' && $actionType != Action::TYPE_DOWNLOAD)
-              || ($attribute == 'external_website' && $actionType != Action::TYPE_OUTLINK)
-              || ($attribute == 'manually')
-              || in_array($attribute, array('event_action', 'event_name', 'event_category')) && $actionType != Action::TYPE_EVENT
-            ) {
-                continue;
+            $convertedUrl = $this->detectGoalMatch($goal, $action);
+            if (!empty($convertedUrl)) {
+                $convertedGoals[] = array('url' => $convertedUrl) + $goal;
             }
+        }
+        return $convertedGoals;
+    }
 
+    /**
+     * Detects if an Action matches a given goal. If it does, the URL that triggered the goal
+     * is returned. Otherwise null is returned.
+     *
+     * @param array $goal
+     * @param Action $action
+     * @return string|null
+     */
+    public function detectGoalMatch($goal, Action $action)
+    {
+        $actionType = $action->getActionType();
 
-            switch ($attribute) {
-                case 'title':
-                    // Matching on Page Title
-                    $url = $action->getActionName();
-                    break;
-                case 'event_action':
-                    $url = $action->getEventAction();
-                    break;
-                case 'event_name':
-                    $url = $action->getEventName();
-                    break;
-                case 'event_category':
-                    $url = $action->getEventCategory();
-                    break;
-                // url, external_website, file, manually...
-                default:
-                    $url = $action->getActionUrlRaw();
-                    break;
-            }
+        $attribute = $goal['match_attribute'];
+
+        // if the attribute to match is not the type of the current action
+        if ((($attribute == 'url' || $attribute == 'title') && $actionType != Action::TYPE_PAGE_URL)
+          || ($attribute == 'file' && $actionType != Action::TYPE_DOWNLOAD)
+          || ($attribute == 'external_website' && $actionType != Action::TYPE_OUTLINK)
+          || ($attribute == 'manually')
+          || in_array($attribute, array('event_action', 'event_name', 'event_category')) && $actionType != Action::TYPE_EVENT
+        ) {
+            return null;
+        }
 
-            $pattern_type = $goal['pattern_type'];
 
-            $match = $this->isUrlMatchingGoal($goal, $pattern_type, $url);
-            if ($match) {
-                $goal['url'] = $action->getActionUrl();
-                $convertedGoals[] = $goal;
-            }
+        switch ($attribute) {
+            case 'title':
+                // Matching on Page Title
+                $url = $action->getActionName();
+                break;
+            case 'event_action':
+                $url = $action->getEventAction();
+                break;
+            case 'event_name':
+                $url = $action->getEventName();
+                break;
+            case 'event_category':
+                $url = $action->getEventCategory();
+                break;
+            // url, external_website, file, manually...
+            default:
+                $url = $action->getActionUrlRaw();
+                break;
         }
 
-        return $convertedGoals;
+        $pattern_type = $goal['pattern_type'];
+
+        $match = $this->isUrlMatchingGoal($goal, $pattern_type, $url);
+        if (!$match) {
+            return null;
+        }
+
+        return $action->getActionUrl();
     }
 
     public function detectGoalId($idSite, Request $request)
@@ -216,7 +234,7 @@ class GoalManager
         // Copy Custom Variables from Visit row to the Goal conversion
         // Otherwise, set the Custom Variables found in the cookie sent with this request
         $goal += $visitCustomVariables;
-        $maxCustomVariables = CustomVariables::getMaxCustomVariables();
+        $maxCustomVariables = CustomVariables::getNumUsableCustomVariables();
 
         for ($i = 1; $i <= $maxCustomVariables; $i++) {
             if (isset($visitorInformation['custom_var_k' . $i])
diff --git a/core/Tracker/Request.php b/core/Tracker/Request.php
index b5d358f25dc8ebbc05149344e6688c916795739d..489ee313e7db80cb83e12a159198b79bb735d7ae 100644
--- a/core/Tracker/Request.php
+++ b/core/Tracker/Request.php
@@ -540,7 +540,7 @@ class Request
         }
 
         $customVariables = array();
-        $maxCustomVars   = CustomVariables::getMaxCustomVariables();
+        $maxCustomVars   = CustomVariables::getNumUsableCustomVariables();
 
         foreach ($customVar as $id => $keyValue) {
             $id = (int)$id;
diff --git a/core/Tracker/TrackerCodeGenerator.php b/core/Tracker/TrackerCodeGenerator.php
index 7a0204dbda9b3ce042f101ba247415b2cae41150..ceca8a3e7103e82f5e45aa2726c6bd3b64f055aa 100644
--- a/core/Tracker/TrackerCodeGenerator.php
+++ b/core/Tracker/TrackerCodeGenerator.php
@@ -63,7 +63,7 @@ class TrackerCodeGenerator
         if ($mergeSubdomains || $mergeAliasUrls) {
             $options .= $this->getJavascriptTagOptions($idSite, $mergeSubdomains, $mergeAliasUrls);
         }
-        $maxCustomVars = CustomVariables::getMaxCustomVariables();
+        $maxCustomVars = CustomVariables::getNumUsableCustomVariables();
 
         if ($visitorCustomVariables && count($visitorCustomVariables) > 0) {
             $options .= '  // you can set up to ' . $maxCustomVars . ' custom variables for each visitor' . PHP_EOL;
diff --git a/core/Tracker/Visit.php b/core/Tracker/Visit.php
index da0959b8b08e1443362a5cae09b22bb6f4b8ae1f..fc11d0cc3f80c62ea858e88e2ae6b4ca8a88c667 100644
--- a/core/Tracker/Visit.php
+++ b/core/Tracker/Visit.php
@@ -264,6 +264,8 @@ class Visit implements VisitInterface
             $this->triggerHookOnDimensions($dimensions, 'onConvertedVisit');
         }
 
+        $properties = &$this->visitProperties->getProperties();
+
         /**
          * Triggered before a new [visit entity](/guides/persistence-and-the-mysql-backend#visits) is persisted.
          *
@@ -278,7 +280,7 @@ class Visit implements VisitInterface
          *
          * @deprecated
          */
-        Piwik::postEvent('Tracker.newVisitorInformation', array($this->visitProperties->getProperties(), $this->request));
+        Piwik::postEvent('Tracker.newVisitorInformation', array(&$properties, $this->request));
 
         foreach ($this->requestProcessors as $processor) {
             $processor->onNewVisit($this->visitProperties, $this->request);
diff --git a/core/Tracker/VisitorRecognizer.php b/core/Tracker/VisitorRecognizer.php
index ff91f57d7ec00d5738d5fde26fce6a5f6a5ef675..d5f5e3c502268b1b7bc59998c7c05a60b8995a15 100644
--- a/core/Tracker/VisitorRecognizer.php
+++ b/core/Tracker/VisitorRecognizer.php
@@ -256,7 +256,7 @@ class VisitorRecognizer
             array_unshift($fields, 'visit_first_action_time');
             array_unshift($fields, 'visit_last_action_time');
 
-            for ($index = 1; $index <= CustomVariables::getMaxCustomVariables(); $index++) {
+            for ($index = 1; $index <= CustomVariables::getNumUsableCustomVariables(); $index++) {
                 $fields[] = 'custom_var_k' . $index;
                 $fields[] = 'custom_var_v' . $index;
             }
diff --git a/core/Updates/2.15.0-b4.php b/core/Updates/2.15.0-b4.php
new file mode 100644
index 0000000000000000000000000000000000000000..132c3319817d220e53c90556eec661654fc10b1d
--- /dev/null
+++ b/core/Updates/2.15.0-b4.php
@@ -0,0 +1,25 @@
+<?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\Updates;
+
+use Piwik\Plugins\Installation\ServerFilesGenerator;
+use Piwik\Updates;
+use Piwik\Updater;
+
+/**
+ */
+class Updates_2_15_0_b4 extends Updates
+{
+    public function doUpdate(Updater $updater)
+    {
+        // added .ttf whitelisted file for apache webserver
+        ServerFilesGenerator::deleteHtAccessFiles();
+        ServerFilesGenerator::createHtAccessFiles();
+    }
+}
diff --git a/core/Version.php b/core/Version.php
index 36a823aef3c4911b3fb7ba6b579c9a57318168c4..6ab960b7e25d6b71bdb528d0ffe8a89d6ca4f36a 100644
--- a/core/Version.php
+++ b/core/Version.php
@@ -20,7 +20,7 @@ final class Version
      * The current Piwik version.
      * @var string
      */
-    const VERSION = '2.15.0-b3';
+    const VERSION = '2.15.0-b6';
 
     public function isStableVersion($version)
     {
diff --git a/core/ViewDataTable/Factory.php b/core/ViewDataTable/Factory.php
index 8822fd04b649cdddef64cc072f4549e41d6f6ede..43db3161e98a027b2e99c57bc316ba8321d40d1d 100644
--- a/core/ViewDataTable/Factory.php
+++ b/core/ViewDataTable/Factory.php
@@ -146,10 +146,6 @@ class Factory
             return self::createViewDataTableInstance($visualizations[$type], $controllerAction, $apiAction, $params);
         }
 
-        if (class_exists($type)) {
-            return self::createViewDataTableInstance($type, $controllerAction, $apiAction, $params);
-        }
-
         if (array_key_exists($defaultType, $visualizations)) {
             return self::createViewDataTableInstance($visualizations[$defaultType], $controllerAction, $apiAction, $params);
         }
diff --git a/js/piwik.js b/js/piwik.js
index b568d541a02bbc057f89e6e1c1c76b66a2b7d66a..9d012d6941b1f7f65e8154c6d546710bfee83550 100644
--- a/js/piwik.js
+++ b/js/piwik.js
@@ -455,7 +455,7 @@ if (typeof JSON2 !== 'object') {
     getTrackedContentImpressions, getCurrentlyVisibleContentImpressionsRequestsIfNotTrackedYet,
     contentInteractionTrackingSetupDone, contains, match, pathname, piece, trackContentInteractionNode,
     trackContentInteractionNode, trackContentImpressionsWithinNode, trackContentImpression,
-    enableTrackOnlyVisibleContent, trackContentInteraction, clearEnableTrackOnlyVisibleContent,
+    enableTrackOnlyVisibleContent, trackContentInteraction, clearEnableTrackOnlyVisibleContent, logAllContentBlocksOnPage,
     trackVisibleContentImpressions, isTrackOnlyVisibleContentEnabled, port, isUrlToCurrentDomain,
     isNodeAuthorizedToTriggerInteraction, replaceHrefIfInternalLink, getConfigDownloadExtensions, disableLinkTracking,
     substr, setAnyAttribute, wasContentTargetAttrReplaced, max, abs, childNodes, compareDocumentPosition, body,
@@ -474,6 +474,7 @@ if (typeof JSON2 !== 'object') {
 /*members amd */
 /*global console:true */
 /*members error */
+/*members log */
 
 // asynchronous tracker (or proxy)
 if (typeof _paq !== 'object') {
@@ -5318,6 +5319,20 @@ if (typeof Piwik !== 'object') {
                     });
                 },
 
+                /**
+                 * Useful to debug content tracking. This method will log all detected content blocks to console
+                 * (if the browser supports the console). It will list the detected name, piece, and target of each
+                 * content block.
+                 */
+                logAllContentBlocksOnPage: function () {
+                    var contentNodes = content.findContentNodes();
+                    var contents = content.collectContent(contentNodes);
+
+                    if (console !== undefined && console && console.log) {
+                        console.log(contents);
+                    }
+                },
+
                 /**
                  * Records an event
                  *
diff --git a/lang/am.json b/lang/am.json
index 1eddffc184834ee80741320c3807c3f080d48e29..3635057355eeae1a9eaad34da0517cc99f058967 100644
--- a/lang/am.json
+++ b/lang/am.json
@@ -61,7 +61,6 @@
         "Settings": "ቅንብሮች",
         "Table": "ሰንጠረዥ",
         "TagCloud": "መለያ Cloud",
-        "TranslatorEmail": "info@addismap.com",
         "TranslatorName": "Alazar Tekle of <a href=\"http:\/\/www.addismap.com\">Addis Map<\/a> \/ <a href=\"http:\/\/www.map.et\">Ethiopia Map<\/a>",
         "Unknown": "ያልታወቀ",
         "VBarGraph": "አቀባዊ አሞሌ ግራፍ",
diff --git a/lang/ar.json b/lang/ar.json
index c5991d763e60156fe502750e8b1526fd8a17bc62..c15a8b69e30728bea3afaa63ed6ef619b53aac65 100644
--- a/lang/ar.json
+++ b/lang/ar.json
@@ -215,7 +215,6 @@
         "TagCloud": "سحابة وسوم",
         "Total": "مجموع",
         "TotalRevenue": "إجمالي الإيرادات",
-        "TranslatorEmail": "mustafa@i-translate.info, benkheil.abdelouali@gmail.com",
         "TranslatorName": "Mustafa Rawi, Benkheil Abdelouali",
         "Unknown": "غير معروف",
         "Upload": "رفع",
diff --git a/lang/be.json b/lang/be.json
index b9fc7dca13abe70c7a0e4b8e5cdaa6745d7c1bd3..4a439c13cb65066bea4784d6befee24d871bcad2 100644
--- a/lang/be.json
+++ b/lang/be.json
@@ -231,7 +231,6 @@
         "Tax": "Падатак",
         "Total": "Агульна",
         "TotalRevenue": "Агульны прыбытак",
-        "TranslatorEmail": "by.marcis@gmail.com, albanardua@gmail.com, iflexion.1@gmail.com",
         "TranslatorName": "Marcis G, <a href=\"http:\/\/finfact.org\">Alban 'r4bble' Ardua<\/a>, Iflexion design",
         "UniquePurchases": "Унікальныя пакупкі",
         "Unknown": "Невядома",
diff --git a/lang/bg.json b/lang/bg.json
index 0d9ad4ad02521b58f0734b042e45c145f224b772..985f187b43fa8c09fd3f0594f87b80be98ad8922 100644
--- a/lang/bg.json
+++ b/lang/bg.json
@@ -345,7 +345,6 @@
         "TotalRatioTooltip": "Това е %1$s от всички %2$s %3$s.",
         "TotalRevenue": "Общо приход",
         "TransitionsRowActionTooltip": "Вижте какво посетителите са правили преди и след посещаването на тази страница",
-        "TranslatorEmail": "kristalin[at]kividesign[dot]com, Virosss[at]abv[dot]bg, tomivr[at]abv[dot]bg, pak69[at]abv[dot]bg, pamir[at]abv[dot]bg",
         "TranslatorName": "Kristalin Chavdarov, <a href=\"http:\/\/coffebreak.info\">Андон Иванов<\/a>, Tom Atanasov, Dimitar Stamenov, Панайотис Кондоянис",
         "UniquePurchases": "Уникални поръчки",
         "Unknown": "Неизвестен",
diff --git a/lang/bn.json b/lang/bn.json
index ebcb8de19fa56e03292088f0f5aefca6fe8c6087..e70de759112a7f95912e54f706e01fa6e519da0e 100644
--- a/lang/bn.json
+++ b/lang/bn.json
@@ -52,7 +52,6 @@
         "SmtpUsername": "SMTP ব্যবহারকারীর নাম",
         "Table": "সারণি",
         "Total": "সর্বমোট",
-        "TranslatorEmail": "-",
         "TranslatorName": "Anjan Dutta, Rezaul Hasan",
         "Upload": "আপলোড",
         "Username": "ব্যবহারকারীর নাম",
diff --git a/lang/bs.json b/lang/bs.json
index a23eb6596d43d0fa6e895b3c43e1e4d7aeb019b7..cd7a6521420eb889480354e4a805fd97f4d0ce6f 100644
--- a/lang/bs.json
+++ b/lang/bs.json
@@ -273,7 +273,6 @@
         "TimeOnPage": "Vrijeme na stranici",
         "Total": "Ukupno",
         "TotalRevenue": "Ukupna zarada",
-        "TranslatorEmail": "translations@piwik.org",
         "TranslatorName": "Piwik",
         "UniquePurchases": "Jedinstvene narudžbe",
         "Unknown": "Nepoznato",
diff --git a/lang/ca.json b/lang/ca.json
index 4d8902fa17e235272ce59312ebc1215236311c89..da54b06a0b7ab318f1cba3eb0036a97dc0150806 100644
--- a/lang/ca.json
+++ b/lang/ca.json
@@ -310,7 +310,6 @@
         "TotalRevenue": "Total Ingressos",
         "TransitionsRowActionTooltip": "Observar que van fer els visitants abans i desprès de veure aquesta pàgina",
         "TransitionsRowActionTooltipTitle": "Obre les transicions",
-        "TranslatorEmail": "isb1009 [at] [don't write this] astronomipedia [dot] es,jjuvan@grn.cat",
         "TranslatorName": "Isaac Sánchez Barrera, Joan Juvanteny",
         "UniquePurchases": "Compres úniques",
         "Unknown": "Desconegut",
diff --git a/lang/cs.json b/lang/cs.json
index e0ae8910df504fffc434f667f644b46ef57ffb25..a98e31ccca3bbbdd68da59b7774773dafd425e83 100644
--- a/lang/cs.json
+++ b/lang/cs.json
@@ -138,6 +138,7 @@
         "ExceptionContactSupportGeneric": "Pokud problém přetrvá, %skontaktujte pro pomoc vašeho Piwik administrátora%s.",
         "ExceptionCheckUserHasSuperUserAccessOrIsTheUser": "Uživatel musí být super uživatel nebo uživatel %s.",
         "ExceptionConfigurationFileNotFound": "Konfigurační soubor {%s} nebyl nalezen",
+        "ExceptionConfigurationFileNotFound2": "Pokud soubor existuje, ověřte, že %s může číst uživatel '%s'.",
         "ExceptionDatabaseVersion": "Vaše %1$s verze je %2$s ale Piwik vyžaduje minimálně %3$s.",
         "ExceptionDatabaseVersionNewerThanCodebase": "Kód Piwiku je z verze %1$s, ale bylo zjištěno, že databáze byla již aktualizována na verzi %2$s.",
         "ExceptionDatabaseVersionNewerThanCodebaseWait": "Vaši administrátoři možná pracují na aktualizaci. Zkuste to, prosím, za pár minut.",
@@ -292,6 +293,8 @@
         "Price": "Cena",
         "ProductConversionRate": "Konverzní poměr",
         "ProductRevenue": "Hodnota produktu",
+        "Measurable": "Měřitelné",
+        "Measurables": "Měřitelná",
         "PurchasedProducts": "Zakoupené produkty",
         "Quantity": "Množství",
         "RangeReports": "Vlastní rozsahy dat",
@@ -308,6 +311,7 @@
         "ReportRatioTooltip": "'%1$s' reprezentuje %2$s z %3$s %4$s s %5$s.",
         "Reports": "Hlášení",
         "ReportsContainingTodayWillBeProcessedAtMostEvery": "Archivovat hlášení nejvýše každých X sekund",
+        "RearchiveTimeIntervalOnlyForTodayReports": "Toto ovlivní pouze hlášení zahrnující dnešek nebo období, která dnešek obsahují.",
         "ReportsWillBeProcessedAtMostEveryHour": "Proto budou hlášení zpracovávaná každou hodinu",
         "RequestTimedOut": "Datový požadavek na %s vypršel. Prosím vyzkoušejte jej znovu",
         "Required": "%s požadováno",
@@ -349,9 +353,9 @@
         "Total": "Celkem",
         "TotalRatioTooltip": "Toto je %1$s ze všech %2$s %3$s.",
         "TotalRevenue": "Celková hodnota",
+        "TotalVisitsPageviewsActionsRevenue": "(Celkem: %s návštěv, %s zobrazení, %s akcí, %s příjem)",
         "TransitionsRowActionTooltip": "Podívejte se, co dělali návštěvníci před a po návštěvě této stránky",
         "TransitionsRowActionTooltipTitle": "Otevřít přechody",
-        "TranslatorEmail": "info@joomladev.eu, salab@email.cz, michal@cihar.com",
         "TranslatorName": "Filip Bartmann, Jakub Baláš, Michal Čihař",
         "UniquePurchases": "Jedineční nakupující",
         "Unknown": "Neznámý",
@@ -384,6 +388,7 @@
         "WarningFileIntegrityNoManifestDeployingFromGit": "Pokud nasazujete Piwik z Gitu, pak je tato zpráva normální.",
         "WarningFileIntegrityNoMd5file": "Test integrity nemůže být dokončen z důvodů chybějící funkce md5_file().",
         "WarningPasswordStored": "%sUpozornění:%s Toto heslo bude uloženo v konfiguračním souboru viditelné pro všechny s přístupem k němu.",
+        "WarningDebugOnDemandEnabled": "Režim sledování %s povolen. Z bezpečnostních důvodů je doporučováno ponechat toto nastavení pouze po krátkou dobu. Pokud ho chcete zakázat, nastavte %s v %s na %s.",
         "Website": "Web stránky",
         "Weekly": "Týdně",
         "WeeklyReport": "Týdně",
diff --git a/lang/cy.json b/lang/cy.json
index 8a2f3b921802ccac6b96acddae6afce0ad69df2c..71bf2b10dadec122266a6d8168c89da56a4cf958 100644
--- a/lang/cy.json
+++ b/lang/cy.json
@@ -199,7 +199,6 @@
         "Tax": "Treth",
         "Total": "Cyfanswm",
         "TotalRevenue": "Cyfanswm Refeniw",
-        "TranslatorEmail": "hefinw@deudraeth.net",
         "TranslatorName": "Hefin Williams",
         "UniquePurchases": "Pryniant Unigol",
         "Unknown": "Anadnabyddus",
diff --git a/lang/da.json b/lang/da.json
index 8903add47f4bf57d8a29ea493a678d52f00d09d6..b5035993533f0daa89d02b2cc5e002c827f4ab2d 100644
--- a/lang/da.json
+++ b/lang/da.json
@@ -345,7 +345,6 @@
         "TotalRevenue": "Indtægter i alt",
         "TransitionsRowActionTooltip": "See hvad besøgende gjorde før og efter de så denne side",
         "TransitionsRowActionTooltipTitle": "Ã…ben overgange",
-        "TranslatorEmail": "danieljuhl@gmail.com, jsm@janz.dk",
         "TranslatorName": "<a href=\"http:\/\/danieljuhl.dk\/\">Daniel Juhl<\/a>, jan madsen",
         "UniquePurchases": "Unikke køb",
         "Unknown": "Ukendt",
diff --git a/lang/de.json b/lang/de.json
index 25bd4b8b4f00c087cd93b7861e42569faca0b84c..058a0248cf339e15e1ed6642891497b057d9e3a4 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -30,7 +30,7 @@
         "ChoosePeriod": "Zeitraum wählen",
         "ChooseWebsite": "Website wählen",
         "ClickHere": "Klicken Sie hier für mehr Informationen.",
-        "ClickToChangePeriod": "Klicke erneut, um den Zeitraum zu ändern.",
+        "ClickToChangePeriod": "Klicken Sie erneut, um den Zeitraum zu ändern.",
         "Close": "Schließen",
         "ClickToSearch": "Zum Suchen klicken",
         "ColumnActionsPerVisit": "Aktionen pro Besuch",
@@ -60,7 +60,7 @@
         "ColumnLabel": "Bezeichnung",
         "ColumnMaxActions": "Maximale Aktionen pro Besuch",
         "ColumnNbActions": "Aktionen",
-        "ColumnNbActionsDocumentation": "Die Anzahl der Aktionen, die ein Besucher durchgeführt hat. Aktionen sind Seitenansichten, Downloads und der Aufruf von ausgehenden Verweisen und interne Suchen.",
+        "ColumnNbActionsDocumentation": "Die Anzahl der Aktionen, die ihre Besucher durchgeführt hat. Aktionen sind Seitenansichten, Downloads, der Aufruf von ausgehenden Verweisen und interne Suchen.",
         "ColumnNbUniqVisitors": "Eindeutige Besucher",
         "ColumnNbUniqVisitorsDocumentation": "Die Anzahl der eindeutigen Besucher auf der Website. Jeder Benutzer wird nur einmal gezählt, auch wenn er die Website mehrmals täglich besucht hat.",
         "ColumnNbUsers": "Benutzer",
@@ -149,7 +149,7 @@
         "ExceptionInvalidArchiveTimeToLive": "Die Archivierungszeit von Live-Berichten muss eine Zahl in Sekunden (größer als Null) sein.",
         "ExceptionInvalidDateFormat": "Das Datumsformat muss %s oder eine andere, von der Funktion %s unterstützte Zeichenkette sein. (Besuchen Sie %s für nähere Informationen)",
         "ExceptionInvalidDateRange": "Das Datum '%s' ist keine korrekte Zeitspanne. Es sollte das folgende Format haben: %s",
-        "ExceptionInvalidPeriod": "Die Periode '%s' wird nicht unterstützt. Versuchen Sie es stattdessen mit einem der folgenden: %s",
+        "ExceptionInvalidPeriod": "Der Zeitraum '%s' wird nicht unterstützt. Versuchen Sie es stattdessen mit einem der folgenden: %s",
         "ExceptionInvalidRendererFormat": "Das Renderer-Format '%s' ist ungültig. Versuchen Sie stattdessen eines der folgenden Formate: %s.",
         "ExceptionInvalidReportRendererFormat": "Berichtsformat '%s' ist ungültig. Versuchen Sie stattdessen eines der folgenden: %s.",
         "ExceptionInvalidStaticGraphType": "Typ des statischen Graphs '%s' ist ungültig. Versuchen Sie stattdessen einen der folgenden Typen: %s",
@@ -162,7 +162,7 @@
         "ExceptionPrivilegeAccessWebsite": "Sie können auf diese Ressource nicht zugreifen, da es mindestens %s-Rechte für die Website-ID %d benötigt.",
         "ExceptionPrivilegeAtLeastOneWebsite": "Sie können auf diese Ressource nicht zugreifen, da eine %s Berechtigung für mindestens eine Website benötigt wird.",
         "ExceptionUnableToStartSession": "Starten einer Session nicht möglich.",
-        "ExceptionUndeletableFile": "Kann %s nicht löschen.",
+        "ExceptionUndeletableFile": "Löschen von %s nicht möglich",
         "ExceptionUnreadableFileDisabledMethod": "Die Konfigurationsdatei {%s} konnte nicht gelesen werden. Ihr Host hat möglicherweise %s deaktiviert.",
         "ExceptionReportNotFound": "Der gesuchte Bericht existiert nicht.",
         "ExceptionWidgetNotFound": "Das gesuchte Widget existiert nicht.",
@@ -356,8 +356,7 @@
         "TotalVisitsPageviewsActionsRevenue": "(Gesamt: %s Besuche, %s Seitenansichten, %s Aktionen, %s Einnahmen)",
         "TransitionsRowActionTooltip": "Die Aktionen vor und nach dieser Seite auswerten",
         "TransitionsRowActionTooltipTitle": "Transitions öffnen",
-        "TranslatorEmail": "frank@bueltge.de, piwik@thorstentaube.de, arthur.borens@gmx.de, mail@marco-ziesing.de, andreas.just@cmsmadesimple.de, halfdan@xnorfz.de, ich@pascal90.de, christian@conlabz.de, michael.stenz@email.de, djsoldier1988@gmail.com, de@piwik.org,sebastian.gumprich@38.de",
-        "TranslatorName": "Frank Bueltge, Thorsten Taube, Arthur W. Borens, Marco Ziesing, Andreas Just, Fabian Becker, Henry Müller, Pascal Herbert, Christian W. Schneider, Michael Stenz, Itransition, Timo Besenreuther",
+        "TranslatorName": "Frank Bueltge, Thorsten Taube, Arthur W. Borens, Marco Ziesing, Andreas Just, Fabian Becker, Henry Müller, Pascal Herbert, Christian W. Schneider, Michael Stenz, Itransition, Timo Besenreuther, Stefan Giehl",
         "UniquePurchases": "Eindeutige Käufe",
         "Unknown": "unbekannt",
         "Upload": "Upload",
@@ -389,6 +388,7 @@
         "WarningFileIntegrityNoManifestDeployingFromGit": "Wenn Sie Piwik von Git deployen ist diese Nachricht normal.",
         "WarningFileIntegrityNoMd5file": "Durch die fehlende md5_file() Funktion konnte die Integritätsprüfung nicht durchgeführt werden.",
         "WarningPasswordStored": "%sWarnung:%s Dieses Passwort wird in der Konfigurationsdatei gespeichert und ist so für jeden sichtbar, der auf diese Datei Zugriff hat.",
+        "WarningDebugOnDemandEnabled": "Der Tracker befindet sich im %s Modus. Aus Sicherheitsgründen sollte dieser nur für einen kurzen Zeitraum aktiv sein. Um Ihn zu deaktivieren setzen Sie %s auf %s in %s",
         "Website": "Website",
         "Weekly": "Wöchentlich",
         "WeeklyReport": "wöchentlich",
diff --git a/lang/el.json b/lang/el.json
index 6a637c5780c15031c3d69f5702e93c67def3a418..193114dbf46b1cd3d8067645971ea202c9fab8b6 100644
--- a/lang/el.json
+++ b/lang/el.json
@@ -356,7 +356,6 @@
         "TotalVisitsPageviewsActionsRevenue": "(Σύνολα: %s επισκέψεις, %s προβολές σελίδων, %s ενέργειες, %s κέρδος)",
         "TransitionsRowActionTooltip": "Δείτε τι έκαναν οι επισκέπτες πριν και μετά την προβολή αυτής της σελίδας",
         "TransitionsRowActionTooltipTitle": "Άνοιγμα Μεταβάσεων",
-        "TranslatorEmail": "jimaek@hotmail.com, info@onsite.net.gr, papaz_p@yahoo.com",
         "TranslatorName": "Jim Black www.jblack.info, Γεώργιος Τέλλος OnSite.Net VoIP & IT Solutions, Παναγιώτης Παπάζογλου Δρ. Δασολόγος-Περιβαλλοντολόγος, <a href=\"http:\/\/www.lourdas.name\">Λούρδας Βασίλειος<\/a>",
         "UniquePurchases": "Μοναδικές Παραγγελίες",
         "Unknown": "Άγνωστο",
@@ -389,6 +388,7 @@
         "WarningFileIntegrityNoManifestDeployingFromGit": "Αν παίρνετε το Piwik από το Git, το μήνυμα αυτό είναι φυσιολογικό.",
         "WarningFileIntegrityNoMd5file": "Ο έλεγχος ακεραιότητας αρχείου δεν μπορεί να ολοκληρωθεί γιατί είναι ανενεργή η συνάρτηση md5_file().",
         "WarningPasswordStored": "%sΠροειδοποίηση:%s Αυτός ο κωδικός πρόσβασης θα αποθηκευτεί στο αρχείο ρυθμίσεων και θα είναι ορατός από οποιονδήποτε έχει πρόσβαση σε αυτό.",
+        "WarningDebugOnDemandEnabled": "Η κατάσταση Παρακολούθησης %s είναι ενεργή. Για λόγους ασφαλείας, θα πρέπει να ενεργοποιείται μόνο για συγκεκριμένο χρονικό διάστημα. Για να την απενεργοποιήσετε, ορίστε το %s σε %s στο %s",
         "Website": "Ιστοσελίδα",
         "Weekly": "Εβδομαδιαίως",
         "WeeklyReport": "εβδομαδιαία",
diff --git a/lang/en.json b/lang/en.json
index 46bc9744caa02c4667aec3a3ee6c053e49716e72..8a3b9df0fc61b0637994c10a741e8d927d3770fa 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -356,7 +356,6 @@
         "TotalVisitsPageviewsActionsRevenue": "(Total: %s visits, %s pageviews, %s actions, %s revenue)",
         "TransitionsRowActionTooltip": "See what visitors did before and after viewing this page",
         "TransitionsRowActionTooltipTitle": "Open Transitions",
-        "TranslatorEmail": "hello@piwik.org",
         "TranslatorName": "-",
         "UniquePurchases": "Unique Purchases",
         "Unknown": "Unknown",
@@ -389,6 +388,7 @@
         "WarningFileIntegrityNoManifestDeployingFromGit": "If you are deploying Piwik from Git, this message is normal.",
         "WarningFileIntegrityNoMd5file": "File integrity check could not be completed due to missing md5_file() function.",
         "WarningPasswordStored": "%sWarning:%s This password will be stored in the config file visible to everybody who can access it.",
+        "WarningDebugOnDemandEnabled": "Tracker %s mode is enabled. For security reasons this should be enabled only for a short time frame. To disable it set %s to %s in %s",
         "Website": "Website",
         "Weekly": "Weekly",
         "WeeklyReport": "weekly",
diff --git a/lang/es.json b/lang/es.json
index 0dc8f86cc6a2f516bd81c458dc1c7908c95c8cb7..d631e1f1f2eeef40b9c2b48cec411150e78c3f96 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -355,7 +355,6 @@
         "TotalRevenue": "Ingresos totales",
         "TransitionsRowActionTooltip": "Vea que hicieron los visitantes antes y después de observar esta página",
         "TransitionsRowActionTooltipTitle": "Transiciones abiertas",
-        "TranslatorEmail": "ahriman89@gmail.com, ddiods@hotmail.com, fersfeir@niux.com.ar, magallania@gmail.com, dave96@dtecno.com, hnicolas.suero@gmail.com, paolo@psdmedia.se,",
         "TranslatorName": "Marcos Alberto Sanmartín Pereira, David Ernesto Soto Vásquez, Fernando SFEIR, Darío Hereñu, David Álvarez Robert, Adrián Seldes, Héctor Nicolás Suero",
         "UniquePurchases": "Compras únicas",
         "Unknown": "Desconocido",
diff --git a/lang/et.json b/lang/et.json
index befd5a91d6ef9280d33f7b2184bd830bf4807bec..90c87fbd6008976667ef3564628074130b6c5144 100644
--- a/lang/et.json
+++ b/lang/et.json
@@ -262,7 +262,6 @@
         "TotalRevenue": "Kogutulu",
         "TransitionsRowActionTooltip": "Vaata mida külastajad tegid enne ja peale selle lehe vaatamist",
         "TransitionsRowActionTooltipTitle": "Ava üleminekud",
-        "TranslatorEmail": "aivo.koger@gmail.com, toomingas.k@gmail.com",
         "TranslatorName": "<a href=\"http:\/\/ee.linkedin.com\/in\/aivokoger\/\">Aivo Koger<\/a>, Kaido Toomingas",
         "UniquePurchases": "Unikaalseid oste",
         "Unknown": "Tundmatu",
diff --git a/lang/eu.json b/lang/eu.json
index e0b76075db720b36a5e1b9d3f80ae8a6fb1ddc01..462bc4c60c01a954c6ffc05c0d46e487ab59860c 100644
--- a/lang/eu.json
+++ b/lang/eu.json
@@ -127,7 +127,6 @@
         "SmtpUsername": "SMTP erabiltzaile-izena",
         "Table": "Taula",
         "TagCloud": "Etiketa-hodeia",
-        "TranslatorEmail": "librezale@librezale.org",
         "TranslatorName": "Librezale.org",
         "Unknown": "Ezezaguna",
         "Username": "Erabiltzaile-izena",
diff --git a/lang/fa.json b/lang/fa.json
index 6377fe1d5a2743d570da7f149237f300b0f6c4a7..bb414924992c75a59bfbc9d05dbd4b0e47979533 100644
--- a/lang/fa.json
+++ b/lang/fa.json
@@ -315,7 +315,6 @@
         "TotalRevenue": "درآمد کل",
         "TransitionsRowActionTooltip": "کارهایی که بازدیدکنندگان قبل و بعد از دیدن این صفحه انجام داده اند را ببینید",
         "TransitionsRowActionTooltipTitle": "انتقال های باز",
-        "TranslatorEmail": "rasez_secure@yahoo.com, info[at]sweddata[.]com , info[at]parsigate[.]com , Hojat.ghanad@gmail.com",
         "TranslatorName": "reza abbasi, <a href=\"http:\/\/parsigate.com\">ParsiGate and Sweddata<\/a>, Hojat Ghanad",
         "UniquePurchases": "خرید های متفاوت",
         "Unknown": "ناشناس",
diff --git a/lang/fi.json b/lang/fi.json
index 1ea3851712f84226c4baa0a5d084b8d88ee6f554..238a36763c83c1e3de79ba0fa23d579455fcd310 100644
--- a/lang/fi.json
+++ b/lang/fi.json
@@ -346,7 +346,6 @@
         "TotalRevenue": "Tulot yhteensä",
         "TransitionsRowActionTooltip": "Näe mitä kävijät tekivät ennen ja jälkeen tällä sivulla käymistä",
         "TransitionsRowActionTooltipTitle": "Avaa muutokset",
-        "TranslatorEmail": "olli@jarva.fi, sara@alennuskoodia.fi",
         "TranslatorName": "<a href=\"http:\/\/olli.jarva.fi\/\">Olli Jarva<\/a>, <a href=\"http:\/\/www.alennuskoodia.fi\/\">Alennuskoodia.fi<\/a>",
         "UniquePurchases": "Uniikit ostot",
         "Unknown": "Tuntematon",
diff --git a/lang/fr.json b/lang/fr.json
index 4fe78f86d3a4a7577a2d93014453db225d6ad8e1..3065d7f498b23acae5527ed230355be094c9ada9 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -356,7 +356,6 @@
         "TotalVisitsPageviewsActionsRevenue": "(Total : %s visites, %s pages vues, %s actions, %s revenu)",
         "TransitionsRowActionTooltip": "Visualisez ce que les visiteurs ont fait après avoir visité cette page",
         "TransitionsRowActionTooltipTitle": "Ouvrir les transitions",
-        "TranslatorEmail": "admin@get-surf.com, piwik@ludovicevrard.be, daniel@castronovo.fr,",
         "TranslatorName": "<a href=\"http:\/\/microsofttouch.fr\/default\/b\/vincent\/default.aspx\">Vincent BIRET<\/a>, <a href=\"http:\/\/www.ludovicevrard.com\">Ludovic Evrard<\/a>, Daniel Castronovo",
         "UniquePurchases": "Achats uniques",
         "Unknown": "Inconnu",
@@ -389,6 +388,7 @@
         "WarningFileIntegrityNoManifestDeployingFromGit": "Si vous déployez Piwik depuis Git, ce message est normal.",
         "WarningFileIntegrityNoMd5file": "Le contrôle d'intégrité n'a pu être effectué car la fonction md5_file() est manquante.",
         "WarningPasswordStored": "%sAttention :%s Ce mot de passe sera stocké dans le fichier de configuration et sera visible pour n'importe qui y ayant accès.",
+        "WarningDebugOnDemandEnabled": "Le mode %s du suivit est activé. Pour des raisons de sécurité ceci ne devrait être activité que pour une courte période de temps. Pour le désactivé définir %s à %s dans %s",
         "Website": "Site",
         "Weekly": "Hebdomadaire",
         "WeeklyReport": "hebdomadaire",
diff --git a/lang/gl.json b/lang/gl.json
index c1e978ffedc52af9aea0f96cf2b0e3b48d1de273..f8a1527c35648a4ca7cd03a1c82db9a0289c7470 100644
--- a/lang/gl.json
+++ b/lang/gl.json
@@ -114,7 +114,6 @@
         "Settings": "Configuración",
         "Table": "Táboa",
         "TagCloud": "Nube de etiquetas",
-        "TranslatorEmail": "info@ousli.org",
         "TranslatorName": "OUSLI - Ourense Software Libre, Antonio Andina",
         "Unknown": "Descoñecido",
         "Username": "Usuario",
diff --git a/lang/he.json b/lang/he.json
index ab5862be9556d76ab25685be3760c5b26c798e4a..afed55b473e6062dc19f52519de6420f79ab1df0 100644
--- a/lang/he.json
+++ b/lang/he.json
@@ -190,7 +190,6 @@
         "Table": "טבלה",
         "TagCloud": "ענן תגים",
         "Total": "סך הכל",
-        "TranslatorEmail": "nirlah@gmail.com",
         "TranslatorName": "<a href=\"http:\/\/www.nirlah.com\">Nirlah - Nir Lahad<\/a>",
         "Unknown": "לא ידוע",
         "Upload": "העלאה",
diff --git a/lang/hi.json b/lang/hi.json
index 65cfc293fb188bf2e431b19d3ff18cee8490d3f8..6d79821f25f12bd3d2d45ec2ba81d4775ee5e3d0 100644
--- a/lang/hi.json
+++ b/lang/hi.json
@@ -341,8 +341,7 @@
         "TotalRevenue": "कुल राजस्व",
         "TransitionsRowActionTooltip": "पहले और इस पृष्ठ को देखने के बाद दर्शकों ने क्या किया देखें",
         "TransitionsRowActionTooltipTitle": "ओपन बदलाव",
-        "TranslatorEmail": "ashish@ajoft.com",
-        "TranslatorName": "<a href=\"http:\/\/www.ajoft.com\/\">Ajoft Softwares<\/a> , <a href=http:\/\/search-sos.org>Ritesh Kumar<\/a> , <a href=http:\/\/www.best-whiteningstrips.com\/>Rahul Patil<\/a>",
+        "TranslatorName": "<a href=\"http:\/\/www.ajoft.com\/\">Ajoft Softwares<\/a> , <a href=\"http:\/\/search-sos.org\">Ritesh Kumar<\/a> , <a href=\"http:\/\/www.best-whiteningstrips.com\/\">Rahul Patil<\/a>",
         "UniquePurchases": "अद्वितीय खरीद",
         "Unknown": "अज्ञात",
         "Upload": "अपलोड करें",
diff --git a/lang/hr.json b/lang/hr.json
index 8aa3a82433d665fbc76850ab7d3d4f7e0fe0c210..bf4c101275988366b2cc165995e58485c017b5be 100644
--- a/lang/hr.json
+++ b/lang/hr.json
@@ -260,7 +260,6 @@
         "Tax": "Porez",
         "Total": "Ukupno",
         "TotalRevenue": "Ukupan prihod",
-        "TranslatorEmail": "riba@ml1.net, mirko@domidona.com",
         "TranslatorName": "Tomislav Ribičić, Mirko Lednicki",
         "UniquePurchases": "Jedinstvene kupovine",
         "Unknown": "Nepoznato",
diff --git a/lang/hu.json b/lang/hu.json
index f1f58537b3c5b935e6d9cc7f50f38ea415c86eb1..84fee7907dbfc68c9078b09c8db9bc89aa39ac52 100644
--- a/lang/hu.json
+++ b/lang/hu.json
@@ -219,7 +219,6 @@
         "Tax": "Adó",
         "Total": "Összesítve",
         "TotalRevenue": "Teljes bevétel",
-        "TranslatorEmail": "en@innen.hu, fityazz@yahoo.co.uk, kw@kardiweb.org",
         "TranslatorName": "József Jároli, Viktor Horvath & Mr. Balu, KardiWeb",
         "UniquePurchases": "Egyedi vásárlások",
         "Unknown": "Ismeretlen",
diff --git a/lang/id.json b/lang/id.json
index 1e4da1caf627a8480021dd009f54988c1b2aa949..10d1b8830a943f71bd087b2f3ad26f68f4c38a1b 100644
--- a/lang/id.json
+++ b/lang/id.json
@@ -312,7 +312,6 @@
         "TotalRevenue": "Jumalh Pendapatan",
         "TransitionsRowActionTooltip": "Lihat apa yang pengujung lakukan sebelum dan sesudah melihat halaman ini",
         "TransitionsRowActionTooltipTitle": "Buka Peralihan",
-        "TranslatorEmail": "translationsproject-b@yuah.web.id, jakenenator@gmail.com, hendry.lee@gmail.com",
         "TranslatorName": "<a href=\"http:\/\/alihbahasa.yuah.web.id\/?asal=piwikfl\">Bayu Aditya H<\/a>, Djaka PM, Hendry Lee",
         "UniquePurchases": "Pembelian Unik",
         "Unknown": "TakTahu",
diff --git a/lang/is.json b/lang/is.json
index 5bd8a8708813924cbd78c603a2967b7f4b37807f..6e741497628efd4eb5a64e3d369014cce3c22fac 100644
--- a/lang/is.json
+++ b/lang/is.json
@@ -136,7 +136,6 @@
         "SmtpUsername": "SMTP notendanafn",
         "Table": "Tafla",
         "TagCloud": "Klisjuský",
-        "TranslatorEmail": "annaj@hi.is, ivarbj@hi.is, johannbg@gmail.com",
         "TranslatorName": "Anna Jonna Ármannsdóttir, Ívar Björn Hilmarsson, Jóhann B. Guðmundsson",
         "Unknown": "Óþekkt",
         "Username": "Notandanafn",
diff --git a/lang/it.json b/lang/it.json
index 49c562f94e7ba40d0bf9ede52bb0656a9cf1fc46..850a74aea26ce1cd80042c0c6691634d829e434f 100644
--- a/lang/it.json
+++ b/lang/it.json
@@ -5,6 +5,7 @@
         "Action": "Azione",
         "Actions": "Azioni",
         "Add": "Aggiungi",
+        "AfterEntry": "dopo essere entrato qui",
         "All": "Tutto",
         "AllowPiwikArchivingToTriggerBrowser": "Archivia i report quando sono stati visti dal browser",
         "AllWebsitesDashboard": "Le dashboard di tutti i siti",
@@ -38,12 +39,12 @@
         "ColumnAverageGenerationTimeDocumentation": "Tempo medio per generare la pagina. Questa metrica include il tempo che è stato necessario al server per generare la pagina web, più il tempo che è stato necessario al visitatore per scaricare la rissposta del server. Un 'tempo medio di generazione' più basso vuol dire un sito più veloce per i vostri visitatori!",
         "ColumnAverageTimeOnPage": "Tempo medio sulla pagina",
         "ColumnAverageTimeOnPageDocumentation": "Il tempo medio passato dai visitatori su questa pagina (solo su questa pagina, non sul sito intero).",
-        "ColumnAvgTimeOnSite": "Durata media",
-        "ColumnAvgTimeOnSiteDocumentation": "La durata media di una visita.",
+        "ColumnAvgTimeOnSite": "Tempo medio sul sito",
+        "ColumnAvgTimeOnSiteDocumentation": "Durata media di una visita.",
         "ColumnBounceRate": "% rimbalzi",
         "ColumnBounceRateDocumentation": "La percentuale di visite che aveva solo una singola pagina visualizzata. Questo significa che il visitatore ha lasciato il sito web direttamente dalla pagina d'ingresso.",
         "ColumnBounceRateForPageDocumentation": "Percentuale di visite che sono partite e finite in questa pagina.",
-        "ColumnBounces": "Rifiuti",
+        "ColumnBounces": "Rimbalzi",
         "ColumnBouncesDocumentation": "Il numero delle visite che sono partite e finite in questa pagina. Questo vuol dire che il visitatore ha lasciato il sito vedendo solo questa pagina.",
         "ColumnConversionRate": "Tasso di conversione",
         "ColumnConversionRateDocumentation": "La percentuale di visite che ha attivato una conversione di obiettivo.",
@@ -74,14 +75,14 @@
         "ColumnSumVisitLength": "Durata totale delle visite (in secondi)",
         "ColumnTotalPageviews": "Pagine viste Totali",
         "ColumnUniqueEntrances": "Accessi unici",
-        "ColumnUniqueExits": "Uniche uscite",
+        "ColumnUniqueExits": "Uscite uniche",
         "ColumnUniquePageviews": "Visualizzazioni uniche",
         "ColumnUniquePageviewsDocumentation": "Il numero di visite che includono questa pagina. Se una pagina è stata visitata più volte all'interno di una stessa visita, verrà conteggiata una volta sola.",
-        "ColumnValuePerVisit": "Valore per visita",
+        "ColumnValuePerVisit": "Ricavo per visita",
         "ColumnViewedAfterSearch": "Cliccati nei risultati ricerca",
         "ColumnViewedAfterSearchDocumentation": "Numero di volte in cui questa Pagina è stata visitata dopo che un visitatore ha fatto una ricerca nel vostro sito e ha cliccato su questa pagina nei risultati della ricerca.",
         "ColumnVisitDuration": "Durata delle visite (in secondi)",
-        "ColumnVisitsWithConversions": "Visite per Conversione",
+        "ColumnVisitsWithConversions": "Visite con Conversioni",
         "ConfigFileIsNotWritable": "Il file di configurazione di Piwik %s non è scrivibile, alcune delle tue impostazioni potrebbero non essere state salvate. %s Cambia i permessi del file di configurazione per farlo diventare modificabile.",
         "Continue": "Continua",
         "ContinueToPiwik": "Vai a Piwik",
@@ -89,7 +90,7 @@
         "CurrentWeek": "Settimana corrente",
         "CurrentYear": "Anno corrente",
         "Daily": "Giornalmente",
-        "DailyReport": "giornaliero",
+        "DailyReport": "giornalmente",
         "DailyReports": "Reports giornalieri",
         "DailySum": "somma giornaliera",
         "DashboardForASpecificWebsite": "Dashboard per un sito specifico",
@@ -116,7 +117,7 @@
         "DisplayTableWithGoalMetrics": "Visualizza una tabella con le metriche dei Goal (Obiettivi)",
         "DisplayTableWithMoreMetrics": "Visualizza una tabella con più metriche",
         "Documentation": "Documentazione",
-        "Donate": "Donate",
+        "Donate": "Fa' una donazione",
         "Done": "Fatto",
         "Download": "Download",
         "DownloadFail_FileExists": "Il file %s esiste già!",
@@ -125,7 +126,7 @@
         "DownloadFullVersion": "%1$sScarica%2$s la versione completa! Check out %3$s",
         "DownloadPleaseRemoveExisting": "Se volete sostituirlo, eliminate il file esistente.",
         "Downloads": "Download",
-        "EcommerceOrders": "Ordine Ecommerce",
+        "EcommerceOrders": "Ordini Ecommerce",
         "EcommerceVisitStatusDesc": "Visita lo status dell'e-commerce alla fine della visita",
         "EcommerceVisitStatusEg": "Ad esempio, per selezionare tutte le visite che hanno fatto un ordine di e-commerce, la richiesta di API conterrebbe %s",
         "Edit": "Modifica",
@@ -154,7 +155,7 @@
         "ExceptionInvalidStaticGraphType": "Tipo di grafico statico '%s' non è valido. Provare una delle seguenti operazioni: %s.",
         "ExceptionInvalidToken": "Il token non è valido.",
         "ExceptionLanguageFileNotFound": "File di lingua '%s' non trovato.",
-        "ExceptionMethodNotFound": "Il metodo '%s' non esiste o non è disponibile non modulo '%s'.",
+        "ExceptionMethodNotFound": "Il metodo '%s' non esiste o non è disponibile nel modulo '%s'.",
         "ExceptionMissingFile": "Manca il file: %s",
         "ExceptionNonceMismatch": "Non è possibile verificare il token di sicurezza di questo form.",
         "ExceptionPrivilege": "Non puoi accedere a questa risorsa con un accesso %s.",
@@ -352,9 +353,9 @@
         "Total": "Totale",
         "TotalRatioTooltip": "Questo è %1$s di tuttti i %2$s %3$s.",
         "TotalRevenue": "Totale guadagni",
+        "TotalVisitsPageviewsActionsRevenue": "(Totale: %s visite, %s pagine, %s azioni, %s ricavi)",
         "TransitionsRowActionTooltip": "Guarda cosa hanno fatto i visitatori prima e dopo aver visto questa pagina",
         "TransitionsRowActionTooltipTitle": "Apri Transizioni",
-        "TranslatorEmail": "php_staff@yahoo.it, francesco@pixelstyle.it, contact@yusefmaali.net, aepic@cilea.it, fabriziorocca.bolzano@gmail.com, tmosbyd@gmail.com, info@alfioemanuele.it, giovanni94m@yahoo.it, blau@anche.no",
         "TranslatorName": "Alessandro Coscia, Giovdi, Yusef Maali, Andrea Marchitelli (CILEA), Fabrizio Rocca, Ted Mosby, Alfio E. Fresta, Giovanni Matina, Blau",
         "UniquePurchases": "Acquisti unici",
         "Unknown": "Sconosciuto",
@@ -442,7 +443,7 @@
         "NetworkError": "Errore di Rete",
         "NetworkErrorWithStatusCode": "C'è stato un errore \"%s\". La richiesta ha restituito lo status \"%s\". L'URL era \"%s\". Si prega di controllare l'URL immessa e il log degli errori su questo server per ulteriori informazioni sull'errore e su come risolverlo.",
         "NetworkErrorWithStatusCodeShort": "Errore di Rete %s",
-        "NetworkNotReachable": "Impossibile connettersi",
+        "NetworkNotReachable": "Rete non raggiungibile",
         "NoAccountIsSelected": "Devi scegliere un account. Aggiungi un nuovo account se non ne hai configurato uno.",
         "NoDataShort": "Nessun Dato",
         "NoPiwikAccount": "Non hai un account Piwik?",
@@ -464,7 +465,7 @@
         "RequestTimedOutShort": "Errore di Timeout Rete",
         "RestrictedCompatibility": "Compatibilità limitata",
         "RestrictedCompatibilityExplanation": "La versione %s di Piwik che stai utilizzando non è completamente supportata da Piwik Mobile 2. Potresti riscontrare alcuni bugs. Raccomandiamo di aggiornare Piwik all'ultima versione o di utilizzare Piwik Mobile 1.",
-        "SaveSuccessError": "Per favore verifica le impostazioni",
+        "SaveSuccessError": "L'URL di Piwik o la combinazione nome utente e password sono sbagliati,",
         "SearchWebsite": "Cerca siti",
         "ShowAll": "Mostra tutto",
         "ShowLess": "Mostra meno",
@@ -484,6 +485,7 @@
         "ComparingRecords": "Comparazione di %s righe",
         "Documentation": "Clicca sulle metriche per visualizzarle in un grafico evoluzione di grandi dimensioni. Usa Shift-click per visualizzare più parametri contemporaneamente.",
         "MetricBetweenText": "da %s e %s",
+        "MetricChangeText": "%s cambiamenti nel periodo",
         "MetricMinMax": "%1$s tra %2$s e %3$s nel periodo",
         "MetricsFor": "Metriche per %s",
         "MultiRowEvolutionTitle": "Evoluzione di righe multiple",
diff --git a/lang/ja.json b/lang/ja.json
index 42b7a75569832123d3fa47ac63cc9352c165cbf9..058718da534e15befc3824272d54bbf27bb3694c 100644
--- a/lang/ja.json
+++ b/lang/ja.json
@@ -347,7 +347,6 @@
         "TotalRevenue": "総収益",
         "TransitionsRowActionTooltip": "訪問者が、このページの表示前後に何をしていたか見てください",
         "TransitionsRowActionTooltipTitle": "トランジションを開く",
-        "TranslatorEmail": "hello@piwik.org",
         "TranslatorName": "Takafumi\/Drupal Japan - http:\/\/drupal.jp Takeshi Ueda\/Piwik Japan Team - http:\/\/piwikjapan.org",
         "UniquePurchases": "ユニークな購入",
         "Unknown": "不明",
diff --git a/lang/ka.json b/lang/ka.json
index e0184221bd90bb8d068b739bfdb0f728cbdd0274..fdeca6b3125e7de2e5a68c95f140bdcaf28debed 100644
--- a/lang/ka.json
+++ b/lang/ka.json
@@ -158,7 +158,6 @@
         "SmtpUsername": "SMTP მომხმრებელი",
         "Table": "ცხრილი",
         "TagCloud": "ტეგების ერთობლიობა",
-        "TranslatorEmail": "kasia@pawel.com",
         "TranslatorName": "Kasia",
         "Unknown": "უცნობი",
         "Username": "მომხმარებლის სახელი",
diff --git a/lang/ko.json b/lang/ko.json
index e5851f4819ce2e30b15626b74d75ade9499c36e8..ebb2fb5d455bee8b423a794453aa272055cebea9 100644
--- a/lang/ko.json
+++ b/lang/ko.json
@@ -291,7 +291,6 @@
         "TotalRevenue": "총 수익",
         "TransitionsRowActionTooltip": "이 페이지를 조회하기 이전의 방문자 행동 추적",
         "TransitionsRowActionTooltipTitle": "트렌지션 열기",
-        "TranslatorEmail": "soulofpure@hotmail.com, to@firejune.com",
         "TranslatorName": "Jong-In Kim, <a href=\"http:\/\/firejune.com\">Joon Kyoung<\/a>",
         "UniquePurchases": "고유 주문",
         "Unknown": "알수없음",
diff --git a/lang/lt.json b/lang/lt.json
index 3a6b3225357460aa3b9b7dabfa41b1c2eeed2a44..e8baa336c2455ef717d0b5050091ff74ab6f2b7e 100644
--- a/lang/lt.json
+++ b/lang/lt.json
@@ -215,7 +215,6 @@
         "TimeAgo": "prieš %s",
         "Total": "IÅ¡ viso",
         "TotalRevenue": "Pajamų iš viso",
-        "TranslatorEmail": "info@teraxit.com",
         "TranslatorName": "Donatas Stonys (Blue Whale SEO)",
         "UniquePurchases": "Unikalūs pirkimai",
         "Unknown": "Nežinoma",
diff --git a/lang/lv.json b/lang/lv.json
index 46b48fd2ad7c09d60929c9b08813ac20b973fb95..fcb71f9ab5047681b10b278f58eb2fa01b0f94af 100644
--- a/lang/lv.json
+++ b/lang/lv.json
@@ -216,7 +216,6 @@
         "Tax": "Nodokļi",
         "Total": "Kopā",
         "TotalRevenue": "Kopējie ienākumi",
-        "TranslatorEmail": "piwik@apps.lv",
         "TranslatorName": "Ä’riks Remess",
         "UniquePurchases": "Unikāli pirkumi",
         "Unknown": "Nezināms",
diff --git a/lang/nb.json b/lang/nb.json
index a75e99823852f381b735266fbe5f41c281001887..a21184a4a375a5dc1612cff889e232624593ae96 100644
--- a/lang/nb.json
+++ b/lang/nb.json
@@ -331,7 +331,6 @@
         "Total": "Totalt",
         "TotalRatioTooltip": "Dette er %1$s av alle %2$s %3$s.",
         "TotalVisitsPageviewsActionsRevenue": "(Totalt: %s besøk, %s sidevisninger, %s handlinger, %s inntekter)",
-        "TranslatorEmail": "hans@nordhaug.priv.no",
         "TranslatorName": "Hans Fredrik Nordhaug",
         "UniquePurchases": "Unike kjøp",
         "Unknown": "Ukjent",
diff --git a/lang/nl.json b/lang/nl.json
index e93c7b5f7b5d0e0e86bc64d1984c4036990bff39..cfa83b3724427455c953857e26bfe20515b96fb9 100644
--- a/lang/nl.json
+++ b/lang/nl.json
@@ -353,9 +353,9 @@
         "Total": "Totaal",
         "TotalRatioTooltip": "Dit is %1$s van alle %2$s %3$s.",
         "TotalRevenue": "Totale Inkomsten",
+        "TotalVisitsPageviewsActionsRevenue": "(Totaal: %s bezoekers, %s paginaweergaves,%s acties, %s inkomsten)",
         "TransitionsRowActionTooltip": "Bekijk wat bezoekers voor en na het bekijken van deze pagina deden",
         "TransitionsRowActionTooltipTitle": "Open transities",
-        "TranslatorEmail": "martijn@mvanlaar.net, hannes@randomize.be, benkheil.abdelouali@gmail.com, info@depree.nl, richardmastop@gmail.com",
         "TranslatorName": "Martijn van Laar, Hannes Bossuyt, Sigge Stegeman, Taco Vader, Benkheil Abdelouali, Ko de Pree, Richard Mastop",
         "UniquePurchases": "Unieke Aankopen",
         "Unknown": "Onbekend",
@@ -388,6 +388,7 @@
         "WarningFileIntegrityNoManifestDeployingFromGit": "Als je Piwik vanuit Git deployed, dan is deze melding normaal.",
         "WarningFileIntegrityNoMd5file": "Bestand integriteit controle kon niet worden voltooid vanwege ontbrekende md5_file() functie.",
         "WarningPasswordStored": "%sWaarschuwing:%s Dit wachtwoord zal worden bewaard in het configuratie bestand, zichtbaar voor iedereen die toegang heeft.",
+        "WarningDebugOnDemandEnabled": "Tracker %s modus staat aan. Om beveilingsredenen zou dit maar voor een korte duur aan mogen staan. Om het uit te zetten, zet %s op %s in %s",
         "Website": "Website",
         "Weekly": "Wekelijks",
         "WeeklyReport": "wekelijks",
diff --git a/lang/nn.json b/lang/nn.json
index 59c149380f294a44a85eab8e8b7a6df783c6241e..401c5ec3ffce41ecf5ddf335f19dd31d53007519 100644
--- a/lang/nn.json
+++ b/lang/nn.json
@@ -240,7 +240,6 @@
         "Tax": "MVA",
         "Total": "Total",
         "TotalRevenue": "Totale inntekter",
-        "TranslatorEmail": "kristoffer.egil@bonarjee.in,simonboba@gmail.com",
         "TranslatorName": "Kristoffer Egil Bonarjee,Simon Hansen",
         "UniquePurchases": "Unike sal",
         "Unknown": "Ukjent",
diff --git a/lang/pl.json b/lang/pl.json
index 7d441833e89e0d1946d2e3ba8a6f07fcf8a22084..a79d4ae5e2c1f5397b016821455d64c23c22baa5 100644
--- a/lang/pl.json
+++ b/lang/pl.json
@@ -323,7 +323,6 @@
         "TotalRatioTooltip": "To jest %1$s wszystkich %2$s %3$s.",
         "TotalRevenue": "Przychody ogółem",
         "TransitionsRowActionTooltipTitle": "Otwarte przejścia",
-        "TranslatorEmail": "remigiusz.waszkiewicz@gmail.com, marcin@kowol.pl, maciej@brandnewmedia.pl, kontakt@awarchol.pl, onemac@onemac.pl, t.kornicki@lemonsky.pl",
         "TranslatorName": "<a href=\"http:\/\/eliteria.pl\">Remigiusz Waszkiewicz<\/a>, Marcin Kowol, Maciej Zawadziński, Artur Warchoł,AETERNUS, Tomasz Kornicki",
         "UniquePurchases": "Unikalnych zakupów",
         "Unknown": "Nieznany",
diff --git a/lang/pt-br.json b/lang/pt-br.json
index 98b699c72fd4588077954eca32ac285a8f922da1..3046cadd927430ae82fbcb443aafbd2c38a97edf 100644
--- a/lang/pt-br.json
+++ b/lang/pt-br.json
@@ -348,7 +348,6 @@
         "TotalRevenue": "Total de Revendas",
         "TransitionsRowActionTooltip": "Veja o que os visitantes fizeram antes e depois de ver este página",
         "TransitionsRowActionTooltipTitle": "Transições abertas",
-        "TranslatorEmail": "marcusbacus@gmail.com, mah_ferraro@yahoo.com.br, ramilani@gmail.com, rodrigues_fernando@hotmail.com",
         "TranslatorName": "Marcos Napier, Marcela Ferraro, Zob, Raphael Milani, Fernando Fraga Rodrigues",
         "UniquePurchases": "Pedidos únicos",
         "Unknown": "Desconhecido",
diff --git a/lang/pt.json b/lang/pt.json
index 28bc4c7e84da1e4adb41b7e644711961aa66bb53..156a8f63b1bb7b1a0a7b14ba91fdd497359528ee 100644
--- a/lang/pt.json
+++ b/lang/pt.json
@@ -235,7 +235,6 @@
         "Tax": "Imposto",
         "Total": "Total",
         "TotalRevenue": "Total de Receitas",
-        "TranslatorEmail": "epages@epages.com.br, supsuper@gmail.com",
         "TranslatorName": "Rodrigo \"Acid Rain\" Kroehn, Daniel \"SupSuper\" Albano, Zob, AlexVasques",
         "UniquePurchases": "Compras Únicas",
         "Unknown": "Desconhecido",
diff --git a/lang/ro.json b/lang/ro.json
index 56d7246f1e439e73255d0d37fb494c92d847fe35..9720e8d035ac2d913fcc01158abce8b403886817 100644
--- a/lang/ro.json
+++ b/lang/ro.json
@@ -332,7 +332,6 @@
         "TotalRevenue": "Venit total",
         "TransitionsRowActionTooltip": "Vezi ce au făcut vizitatorii până la şi după vizionarea acestei pagini",
         "TransitionsRowActionTooltipTitle": "Treceri Deschise",
-        "TranslatorEmail": "astonsoftware@gmail.com, flo[at]inboxtranslation[dot]com",
         "TranslatorName": "astonsoftware, <a href=\"http:\/\/inboxtranslations.com\">Inbox Translation<\/a>, <a href=\"http:\/\/marcelbejgu.ro\">Marcel Bejgu<\/a>",
         "UniquePurchases": "Cumparaturi unice",
         "Unknown": "Necunoscut",
diff --git a/lang/ru.json b/lang/ru.json
index c24204238597692b555d5e49ef032e629f1ed8e5..887effc9252e166a460e4371217b899296c5c45a 100644
--- a/lang/ru.json
+++ b/lang/ru.json
@@ -347,7 +347,6 @@
         "TotalRevenue": "Общая прибыль",
         "TransitionsRowActionTooltip": "Посмотрите, что посетители делали до и после просмотра этой страницы",
         "TransitionsRowActionTooltipTitle": "Открыть переходы",
-        "TranslatorEmail": "ademaro@ya.ru, i@codax.ru, heyheyftw@gmail.com, onix@onix.name, taktip@gmail.com, djsoldier@mail.ru",
         "TranslatorName": "Ademaro, <a href=\"http:\/\/jokerintertactive.ru\/\">Joker Interactive<\/a>, <a href=\"http:\/\/codax.ru\/\">Важенин Илья (компания Codax)<\/a>, Nelde Maxim, Andrey, Vadim Nekhai",
         "UniquePurchases": "Уникальные покупки",
         "Unknown": "Неизвестно",
diff --git a/lang/sk.json b/lang/sk.json
index d82d31c747b030ec95b01c4f3d4c82fc043c4226..7d8d2add1352f13555b223d7282c557cba0e3b02 100644
--- a/lang/sk.json
+++ b/lang/sk.json
@@ -352,8 +352,7 @@
         "TotalRevenue": "Celkový príjem",
         "TransitionsRowActionTooltip": "Pozrite si čo robili návštevníci pred a po prezretí si tejto stránky.",
         "TransitionsRowActionTooltipTitle": "Otvorené zmeny",
-        "TranslatorEmail": "miroslav.habara@gmail.com, zdenop@gmail.com, viktorin@automotopneu.sk",
-        "TranslatorName": "Miroslav Habara, Zdenko Podobný, Juraj \"Lup0\" Viktorín, <a href=\"http:\/\/www.coupofy.com \">Ivanka<\/a>",
+        "TranslatorName": "Miroslav Habara, Zdenko Podobný, Juraj \"Lup0\" Viktorín, Ivanka",
         "UniquePurchases": "Unikátne nákupy",
         "Unknown": "Neznáme",
         "Upload": "Nahrať",
diff --git a/lang/sl.json b/lang/sl.json
index a438a29d2eb1a853d7dc45b99893c028af4b2407..d2f08eb8b28e85c1966d6e602f751a2a392135cc 100644
--- a/lang/sl.json
+++ b/lang/sl.json
@@ -347,7 +347,6 @@
         "TotalRevenue": "Skupni prihodki",
         "TransitionsRowActionTooltip": "Poglejte kaj so obiskovalci počeli pred in potem, ko so obiskali to stran",
         "TransitionsRowActionTooltipTitle": "Odpri prehode",
-        "TranslatorEmail": "alazanski@tuts23.com, tom@hupso.com",
         "TranslatorName": "Aleksej Lazanski, <a href=\"http:\/\/www.hupso.com\">Tom Merc<\/a>",
         "UniquePurchases": "Edinstveni nakupi",
         "Unknown": "Neznano",
diff --git a/lang/sq.json b/lang/sq.json
index 310ee27f5838e32e27962085b63bf28987c5a75e..b1e3752f48ad56f2a4f1b2375a02170249a2c20f 100644
--- a/lang/sq.json
+++ b/lang/sq.json
@@ -346,7 +346,6 @@
         "TotalRevenue": "Të ardhura Gjithsej",
         "TransitionsRowActionTooltip": "See what visitors did before and after viewing this page",
         "TransitionsRowActionTooltipTitle": "Open Transitions",
-        "TranslatorEmail": "besnik@programeshqip.org",
         "TranslatorName": "Besnik Bleta",
         "UniquePurchases": "Blerje Unike",
         "Unknown": "I panjohur",
diff --git a/lang/sr.json b/lang/sr.json
index a13b2b0456d984e6725835acabecbbc74ef25954..302b1c169c3c2d0087e1c1768f61e87e00c16659 100644
--- a/lang/sr.json
+++ b/lang/sr.json
@@ -7,6 +7,7 @@
         "Add": "Dodaj",
         "AfterEntry": "nakon ulaska ovde",
         "All": "Sve",
+        "AllowPiwikArchivingToTriggerBrowser": "Arhiviraj izveštaje svaki put kada se prikažu u brauzeru",
         "AllWebsitesDashboard": "Svi sajtovi",
         "And": "i",
         "API": "API",
@@ -240,6 +241,7 @@
         "NotDefined": "%s nije definisano",
         "Note": "Beleška",
         "NotInstalled": "Nije instaliran",
+        "NotRecommended": "ne preporučuje se",
         "NotValid": "%s nije validno",
         "NumberOfVisits": "Broj poseta",
         "NUsers": "%s korisnici",
@@ -291,10 +293,13 @@
         "Price": "Cena",
         "ProductConversionRate": "Stopa konverzije proizvoda",
         "ProductRevenue": "Prihodi od proizvoda",
+        "Measurable": "Može da se meri",
+        "Measurables": "Mogu da se mere",
         "PurchasedProducts": "Naručeni proizvodi",
         "Quantity": "Količina",
         "RangeReports": "Korisnički definisani vremenski periodi",
         "ReadThisToLearnMore": "%1$sPročitajte kako biste više saznali.%2$s",
+        "Recommended": "Preporučeno",
         "RecordsToPlot": "Zapisi za prikaz",
         "Refresh": "Osveži prikaz",
         "RefreshPage": "Osvežite stranu",
@@ -305,6 +310,8 @@
         "ReportGeneratedFrom": "Izveštaj je generisan uz pomoć podataka iz %s.",
         "ReportRatioTooltip": "'%1$s' predstavlja %2$s od %3$s %4$s sa %5$s.",
         "Reports": "Izveštaji",
+        "ReportsContainingTodayWillBeProcessedAtMostEvery": "Arhiviraj izveštaje na svakih x sekundi",
+        "RearchiveTimeIntervalOnlyForTodayReports": "Ovo se odnosi samo na današnje izveštaje (ili izveštaje koji uključuju i današnji dan)",
         "ReportsWillBeProcessedAtMostEveryHour": "Izveštaji će u tom slučaju biti procesirani na svakih sat vremena",
         "RequestTimedOut": "Vreme za zahtev %s je isteklo. Molimo pokušajte ponovo",
         "Required": "%s potrebno",
@@ -346,9 +353,9 @@
         "Total": "Ukupno",
         "TotalRatioTooltip": "Ovo je %1$s od %2$s %3$s.",
         "TotalRevenue": "Ukupan prihod",
+        "TotalVisitsPageviewsActionsRevenue": "(Ukupno poseta %s, prikaza %s, akcija %s, zarada %s)",
         "TransitionsRowActionTooltip": "Pogledajte šta su posetioci radili pre i posle posete ovoj stranici",
         "TransitionsRowActionTooltipTitle": "Otvori tranzicije",
-        "TranslatorEmail": "petar@benke.co.uk, info@maksin.ms, nikola@codingcat.com",
         "TranslatorName": "Petar Benke, Branislav Maksin, Nikola Stojković",
         "UniquePurchases": "Jedinstvene porudžbine",
         "Unknown": "Nepoznato",
@@ -381,6 +388,7 @@
         "WarningFileIntegrityNoManifestDeployingFromGit": "Ukoliko podižete Piwik iz Git-a, ova poruka je sasvim prirodna.",
         "WarningFileIntegrityNoMd5file": "Proveru integriteta datoteka nije moguće okončati zato što nedostaje funkcija md5_file().",
         "WarningPasswordStored": "%sUpozorenje:%s Ova lozinka će biti upisana u datoteku sa podešavanjima i biće vidljiva svakome ko ima pristup.",
+        "WarningDebugOnDemandEnabled": "Uključen je %s mod za praćenje. Iz bezbednosnih razloga ovo bi trebalo da bude uključeno samo u kratkom vremenskom periodu. Ukoliko želite da ga isključite, postavite %s na %s u %s",
         "Website": "Sajt",
         "Weekly": "Nedeljno",
         "WeeklyReport": "nedeljno",
diff --git a/lang/sv.json b/lang/sv.json
index 6f6c6f0176f57a8fc2c01bb7420afd34106e4e0c..a212e0a9592d472b297544880f564e0018836ab4 100644
--- a/lang/sv.json
+++ b/lang/sv.json
@@ -355,7 +355,6 @@
         "TotalRevenue": "Totala intäkter",
         "TransitionsRowActionTooltip": "Se vad besökarna gjorde före och efter att ha tittat på den här sidan",
         "TransitionsRowActionTooltipTitle": "Öppna övergångar",
-        "TranslatorEmail": "fredrik@lagun.se, tony@d0h.us",
         "TranslatorName": "<a href=\"http:\/\/xn--skmotoroptimering-zzb.se\/\">Sökmotoroptimering.se<\/a>, <a href=\"http:\/\/www.kampanjjakt.se\/\">Kampanjjakt.se<\/a>, <a href=\"http:\/\/www.lagun.se\/\">Fredrik Astrom<\/a>, <a href=\"http:\/\/www.dumsnal.se\/\">Tony<\/a>",
         "UniquePurchases": "Unika beställningar",
         "Unknown": "Okänt",
diff --git a/lang/ta.json b/lang/ta.json
index 7a178d75da58caf7077d3a05f935dca3a22e9853..111838135b97c423355b11fb3740436a5eb1277e 100644
--- a/lang/ta.json
+++ b/lang/ta.json
@@ -178,7 +178,6 @@
         "Total": "மொத்தம்",
         "TotalRevenue": "மொத்த வருமானம்",
         "TransitionsRowActionTooltipTitle": "வெளிப்படையான மாற்றங்கள்",
-        "TranslatorEmail": "hello@piwik.org",
         "TranslatorName": "-",
         "UniquePurchases": "தனிப்பட்ட கொள்முதல்கள்",
         "Unknown": "தெரியாத",
diff --git a/lang/te.json b/lang/te.json
index b216306f4f3fe1988522379d79752fd830e9f970..a18c1d9a3ebdb25a5fcdfe5b5c1609bc26e82003 100644
--- a/lang/te.json
+++ b/lang/te.json
@@ -100,7 +100,6 @@
         "TagCloud": "ట్యాగు మేఘం",
         "Total": "మొత్తం",
         "TotalRevenue": "మొత్తం ఆదాయం",
-        "TranslatorEmail": "veeven@gmail.com",
         "TranslatorName": "వీవెన్ (Veeven)",
         "Upload": "ఎక్కించు",
         "Username": "వాడుకరి పేరు",
diff --git a/lang/th.json b/lang/th.json
index 6b9bf8e50e35c3cc6c02be92b8e68c554ce432df..4d7bd6f40200e02abccc047ed7f8669dbf068dcd 100644
--- a/lang/th.json
+++ b/lang/th.json
@@ -259,7 +259,6 @@
         "TimeOnPage": "เวลาในหน้า",
         "Total": "รวม",
         "TotalRevenue": "รายได้รวม",
-        "TranslatorEmail": "jaideejung007@gmail.com",
         "TranslatorName": "coyoty, jaideejung007, ariesanywhere",
         "UniquePurchases": "Unique Purchases",
         "Unknown": "ไม่รู้จัก",
diff --git a/lang/tl.json b/lang/tl.json
index 0d398bacf97d937dd775fb6e82f051ca2128c9bd..1ddd6e2e1cf5392c567abe20c7c04fe2b3dfb33e 100644
--- a/lang/tl.json
+++ b/lang/tl.json
@@ -300,7 +300,6 @@
         "Segment": "Bahagi",
         "SelectYesIfYouWantToSendEmailsViaServer": "Piliin ang \"Oo\" kung gusto mo o magpadala ng e-mail sa pamamagitan ng isang server sa halip na ang mga lokal na mail function.",
         "Table": "Talahanayan",
-        "TranslatorEmail": "hello@piwik.org",
         "TranslatorName": "<a href=\"http:\/\/intripid.com\/\">Intripid<\/a>",
         "View": "Tingnan",
         "Visitors": "Mga Bisita",
diff --git a/lang/tr.json b/lang/tr.json
index dd3661c316ff191c27a0baacfad1aec3b9776528..136c888bcb9e96d276165db7b6d7dddfe83722db 100644
--- a/lang/tr.json
+++ b/lang/tr.json
@@ -264,8 +264,7 @@
         "Total": "Toplam",
         "TotalRevenue": "Toplam Kazanç",
         "TransitionsRowActionTooltipTitle": "Açık Geçişler",
-        "TranslatorEmail": "halfdan@xnorfz.de, dev@yazici.info, hello@emresaracoglu.com",
-        "TranslatorName": "Fabian Becker, Emre Yazici, Emre Saraçoğlu, <a href=\"http:\/\/www.ugureskici.com\" target=\"_blank\">Uğur Eskici<\/a>",
+        "TranslatorName": "Fabian Becker, Emre Yazici, Emre Saraçoğlu, <a href=\"http:\/\/www.ugureskici.com\">Uğur Eskici<\/a>",
         "UniquePurchases": "Tekil Satın Alımlar",
         "Unknown": "Bilinmeyen",
         "Upload": "Yükle",
diff --git a/lang/uk.json b/lang/uk.json
index b90431003faf0920fe44babfe3b30a13885fafa4..e0c33ff1f3e340a3111f27d3153564389fd4b4e7 100644
--- a/lang/uk.json
+++ b/lang/uk.json
@@ -156,7 +156,6 @@
         "SmtpUsername": "SMTP логін",
         "Table": "Таблиця",
         "TagCloud": "Хмара тегів",
-        "TranslatorEmail": "joseph.chereshnovsky@gmail.com, x.meglio@gmail.com",
         "TranslatorName": "<a href=\"http:\/\/webdevbyjoss.blogspot.com\/\">Joseph Chereshnovsky<\/a>, Anton Andriyevskyy",
         "Unknown": "Невідомо",
         "Username": "Логін",
diff --git a/lang/vi.json b/lang/vi.json
index 533ce6955dd03cf26b05a0330592b61c44a0ea34..3eb3822f505430419f759f807a3fd8045ee0cd2e 100644
--- a/lang/vi.json
+++ b/lang/vi.json
@@ -321,7 +321,6 @@
         "TotalRevenue": "Tổng doanh thu",
         "TransitionsRowActionTooltip": "Xem những gì khách truy cập đã làm trước và sau khi xem trang này.",
         "TransitionsRowActionTooltipTitle": "mở quá trình chuyển đổi",
-        "TranslatorEmail": "canhrgv@gmail.com",
         "TranslatorName": "Do Cong Anh",
         "UniquePurchases": "Mua sắm duy nhất",
         "Unknown": "Chưa rõ",
diff --git a/lang/zh-cn.json b/lang/zh-cn.json
index 0c9cb40f5772ff68cc03a157090ad0a84eda6230..0e4f37d9aed71a1d97233802ecad233c02368432 100644
--- a/lang/zh-cn.json
+++ b/lang/zh-cn.json
@@ -7,6 +7,7 @@
         "Add": "增加",
         "AfterEntry": "进入这里之后",
         "All": "所有",
+        "AllowPiwikArchivingToTriggerBrowser": "归档在浏览器中查看时报告",
         "AllWebsitesDashboard": "所有网站报表",
         "And": "和",
         "API": "API",
@@ -323,7 +324,6 @@
         "TotalRevenue": "订单总额",
         "TransitionsRowActionTooltip": "查看访客浏览这个页面之前和之后的活动",
         "TransitionsRowActionTooltipTitle": "显示转换分析",
-        "TranslatorEmail": "admin@piwik.cn",
         "TranslatorName": "<a href=\"http:\/\/www.piwik.cn\/\">Jack Huang<\/a>, <a href=\"http:\/\/www.binaryoung.com\/\">Young<\/a>, Marine.Ming",
         "UniquePurchases": "唯一身份购买者",
         "Unknown": "未知",
diff --git a/lang/zh-tw.json b/lang/zh-tw.json
index fad2e58ece5ae7e908223e8a992f5dde6f2b5f29..5bf8aab1bc51a4c91eaec8f1f7c6e68fd6bc0c4b 100644
--- a/lang/zh-tw.json
+++ b/lang/zh-tw.json
@@ -178,7 +178,6 @@
         "SmtpUsername": "SMTP 使用者名稱",
         "Table": "表格",
         "TagCloud": "標籤雲",
-        "TranslatorEmail": "pserics@gmail.com, php.twn@gmail.com",
         "TranslatorName": "<a href=\"http:\/\/www.freegroup.org\/\">Pseric<\/a>, Eros",
         "Unknown": "未知",
         "Username": "使用者名稱",
diff --git a/misc/cron/archive.php b/misc/cron/archive.php
index bbfa1ae39db293a39536c4f04dbd2aeff1365a2a..f719a2d3d427df745f97c857841b8748226055ce 100644
--- a/misc/cron/archive.php
+++ b/misc/cron/archive.php
@@ -56,6 +56,7 @@ if (Piwik\Common::isPhpCliMode()) {
 
     $console->run();
 } else { // if running via web request, use CoreAdminHome.runCronArchiving method
+    Piwik\Common::sendHeader('Content-type: text/plain');
     $_GET['module'] = 'API';
     $_GET['method'] = 'CoreAdminHome.runCronArchiving';
     $_GET['format'] = 'console'; // will use Content-type text/plain
diff --git a/misc/log-analytics b/misc/log-analytics
index 1111f60437d1a7ed1051ec0415e878099f185fd2..6b191b07d01d2766106f9e04df3c3082e1c025de 160000
--- a/misc/log-analytics
+++ b/misc/log-analytics
@@ -1 +1 @@
-Subproject commit 1111f60437d1a7ed1051ec0415e878099f185fd2
+Subproject commit 6b191b07d01d2766106f9e04df3c3082e1c025de
diff --git a/piwik.js b/piwik.js
index a2eb25b12d171fba2c6f9a8632dd3345a3b28238..4ca037a947128b7d000135922e4f5db969d5fa13 100644
--- a/piwik.js
+++ b/piwik.js
@@ -48,8 +48,8 @@ case 2:return"middle";case 3:return"right"}}function cb(cq){return cq.target||cq
 if(cs==="visit"||cs===2){aa();ah[cr]=ct}else{if(cs==="page"||cs===3){bq[cr]=ct}else{if(cs==="event"){ac[cr]=ct}}}}},getCustomVariable:function(cr,cs){var cq;if(!x(cs)){cs="visit"}if(cs==="page"||cs===3){cq=bq[cr]}else{if(cs==="event"){cq=ac[cr]}else{if(cs==="visit"||cs===2){aa();cq=ah[cr]}}}if(!x(cq)||(cq&&cq[0]==="")){return false}return cq},deleteCustomVariable:function(cq,cr){if(this.getCustomVariable(cq,cr)){this.setCustomVariable(cq,"","",cr)}},storeCustomVariablesInCookie:function(){bc=true},setLinkTrackingTimer:function(cq){bz=cq},setDownloadExtensions:function(cq){if(o(cq)){cq=cq.split("|")}aZ=cq},addDownloadExtensions:function(cr){var cq;if(o(cr)){cr=cr.split("|")}for(cq=0;cq<cr.length;cq++){aZ.push(cr[cq])}},removeDownloadExtensions:function(cs){var cr,cq=[];if(o(cs)){cs=cs.split("|")}for(cr=0;cr<aZ.length;cr++){if(A(cs,aZ[cr])===-1){cq.push(aZ[cr])}}aZ=cq},setDomains:function(cq){bB=o(cq)?[cq]:cq;bB.push(bY)},setIgnoreClasses:function(cq){aj=o(cq)?[cq]:cq},setRequestMethod:function(cq){bE=cq||bC
 },setRequestContentType:function(cq){aP=cq||bj},setReferrerUrl:function(cq){bG=cq},setCustomUrl:function(cq){bd=bX(cj,cq)},setDocumentTitle:function(cq){aX=cq},setAPIUrl:function(cq){az=cq},setDownloadClasses:function(cq){bp=o(cq)?[cq]:cq},setLinkClasses:function(cq){aH=o(cq)?[cq]:cq},setCampaignNameKey:function(cq){a3=o(cq)?[cq]:cq},setCampaignKeywordKey:function(cq){aU=o(cq)?[cq]:cq},discardHashTag:function(cq){al=cq},setCookieNamePrefix:function(cq){ch=cq;ah=at()},setCookieDomain:function(cq){var cr=z(cq);if(bn(cr)){ar=cr;bv()}},setCookiePath:function(cq){ci=cq;bv()},setVisitorCookieTimeout:function(cq){ay=cq*1000},setSessionCookieTimeout:function(cq){aE=cq*1000},setReferralCookieTimeout:function(cq){bh=cq*1000},setConversionAttributionFirstReferrer:function(cq){ba=cq},disableCookies:function(){ap=true;b6.cookie="0";if(b5){X()}},deleteCookies:function(){X()},setDoNotTrack:function(cr){var cq=e.doNotTrack||e.msDoNotTrack;b9=cr&&(cq==="yes"||cq==="1");if(b9){this.disableCookies()}},addListener:function(cr,cq){bL(cr,cq)
 },enableLinkTracking:function(cq){b7=true;if(q){bk(cq)}else{F.push(function(){bk(cq)})}},enableJSErrorTracking:function(){if(cn){return}cn=true;var cq=H.onerror;H.onerror=function(cv,ct,cs,cu,cr){aR(function(){var cw="JavaScript Errors";var cx=ct+":"+cs;if(cu){cx+=":"+cu}am(cw,cx,cv)});if(cq){return cq(cv,ct,cs,cu,cr)}return false}},disablePerformanceTracking:function(){a6=false},setGenerationTimeMs:function(cq){aM=parseInt(cq,10)},enableHeartBeatTimer:function(cq){cq=Math.max(cq,1);b3=(cq||15)*1000;if(bo!==null){bF()}},killFrame:function(){if(H.location!==H.top.location){H.top.location=H.location}},redirectFile:function(cq){if(H.location.protocol==="file:"){H.location=cq}},setCountPreRendered:function(cq){a5=cq},trackGoal:function(cq,cs,cr){aR(function(){bx(cq,cs,cr)})},trackLink:function(cr,cq,ct,cs){aR(function(){b0(cr,cq,ct,cs)})},trackPageView:function(cq,cr){ai=[];if(B(b5)){aR(function(){N(ab,az,b5)})}else{aR(function(){bl(cq,cr)})}},trackAllContentImpressions:function(){if(B(b5)){return
-}aR(function(){aF(function(){var cq=n.findContentNodes();var cr=a1(cq);aq(cr,bz)})})},trackVisibleContentImpressions:function(cq,cr){if(B(b5)){return}if(!x(cq)){cq=true}if(!x(cr)){cr=750}bH(cq,cr,this);aR(function(){aV(function(){var cs=n.findContentNodes();var ct=bO(cs);aq(ct,bz)})})},trackContentImpression:function(cs,cq,cr){if(B(b5)){return}if(!cs){return}cq=cq||"Unknown";aR(function(){var ct=bZ(cs,cq,cr);a4(ct,bz)})},trackContentImpressionsWithinNode:function(cq){if(B(b5)||!cq){return}aR(function(){if(aB){aV(function(){var cr=n.findContentNodesWithinNode(cq);var cs=bO(cr);aq(cs,bz)})}else{aF(function(){var cr=n.findContentNodesWithinNode(cq);var cs=a1(cr);aq(cs,bz)})}})},trackContentInteraction:function(cs,ct,cq,cr){if(B(b5)){return}if(!cs||!ct){return}cq=cq||"Unknown";aR(function(){var cu=cl(cs,ct,cq,cr);a4(cu,bz)})},trackContentInteractionNode:function(cr,cq){if(B(b5)||!cr){return}aR(function(){var cs=a0(cr,cq);a4(cs,bz)})},trackEvent:function(cr,ct,cq,cs){aR(function(){am(cr,ct,cq,cs)
-})},trackSiteSearch:function(cq,cs,cr){aR(function(){aS(cq,cs,cr)})},setEcommerceView:function(ct,cq,cs,cr){if(!x(cs)||!cs.length){cs=""}else{if(cs instanceof Array){cs=JSON2.stringify(cs)}}bq[5]=["_pkc",cs];if(x(cr)&&String(cr).length){bq[2]=["_pkp",cr]}if((!x(ct)||!ct.length)&&(!x(cq)||!cq.length)){return}if(x(ct)&&ct.length){bq[3]=["_pks",ct]}if(!x(cq)||!cq.length){cq=""}bq[4]=["_pkn",cq]},addEcommerceItem:function(cu,cq,cs,cr,ct){if(cu.length){bR[cu]=[cu,cq,cs,cr,ct]}},trackEcommerceOrder:function(cq,cu,ct,cs,cr,cv){bV(cq,cu,ct,cs,cr,cv)},trackEcommerceCartUpdate:function(cq){cg(cq)}}}function w(){return{push:S}}function b(ac,ab){var ad={};var Z,aa;for(Z=0;Z<ab.length;Z++){var X=ab[Z];ad[X]=1;for(aa=0;aa<ac.length;aa++){if(ac[aa]&&ac[aa][0]){var Y=ac[aa][0];if(X===Y){S(ac[aa]);delete ac[aa];if(ad[Y]>1){if(console!==undefined&&console&&console.error){console.error("The method "+Y+' is registered more than once in "paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')
+}aR(function(){aF(function(){var cq=n.findContentNodes();var cr=a1(cq);aq(cr,bz)})})},trackVisibleContentImpressions:function(cq,cr){if(B(b5)){return}if(!x(cq)){cq=true}if(!x(cr)){cr=750}bH(cq,cr,this);aR(function(){aV(function(){var cs=n.findContentNodes();var ct=bO(cs);aq(ct,bz)})})},trackContentImpression:function(cs,cq,cr){if(B(b5)){return}if(!cs){return}cq=cq||"Unknown";aR(function(){var ct=bZ(cs,cq,cr);a4(ct,bz)})},trackContentImpressionsWithinNode:function(cq){if(B(b5)||!cq){return}aR(function(){if(aB){aV(function(){var cr=n.findContentNodesWithinNode(cq);var cs=bO(cr);aq(cs,bz)})}else{aF(function(){var cr=n.findContentNodesWithinNode(cq);var cs=a1(cr);aq(cs,bz)})}})},trackContentInteraction:function(cs,ct,cq,cr){if(B(b5)){return}if(!cs||!ct){return}cq=cq||"Unknown";aR(function(){var cu=cl(cs,ct,cq,cr);a4(cu,bz)})},trackContentInteractionNode:function(cr,cq){if(B(b5)||!cr){return}aR(function(){var cs=a0(cr,cq);a4(cs,bz)})},logAllContentBlocksOnPage:function(){var cr=n.findContentNodes();
+var cq=n.collectContent(cr);if(console!==undefined&&console&&console.log){console.log(cq)}},trackEvent:function(cr,ct,cq,cs){aR(function(){am(cr,ct,cq,cs)})},trackSiteSearch:function(cq,cs,cr){aR(function(){aS(cq,cs,cr)})},setEcommerceView:function(ct,cq,cs,cr){if(!x(cs)||!cs.length){cs=""}else{if(cs instanceof Array){cs=JSON2.stringify(cs)}}bq[5]=["_pkc",cs];if(x(cr)&&String(cr).length){bq[2]=["_pkp",cr]}if((!x(ct)||!ct.length)&&(!x(cq)||!cq.length)){return}if(x(ct)&&ct.length){bq[3]=["_pks",ct]}if(!x(cq)||!cq.length){cq=""}bq[4]=["_pkn",cq]},addEcommerceItem:function(cu,cq,cs,cr,ct){if(cu.length){bR[cu]=[cu,cq,cs,cr,ct]}},trackEcommerceOrder:function(cq,cu,ct,cs,cr,cv){bV(cq,cu,ct,cs,cr,cv)},trackEcommerceCartUpdate:function(cq){cg(cq)}}}function w(){return{push:S}}function b(ac,ab){var ad={};var Z,aa;for(Z=0;Z<ab.length;Z++){var X=ab[Z];ad[X]=1;for(aa=0;aa<ac.length;aa++){if(ac[aa]&&ac[aa][0]){var Y=ac[aa][0];if(X===Y){S(ac[aa]);delete ac[aa];if(ad[Y]>1){if(console!==undefined&&console&&console.error){console.error("The method "+Y+' is registered more than once in "paq" variable. Only the last call has an effect. Please have a look at the multiple Piwik trackers documentation: http://developer.piwik.org/guides/tracking-javascript-guide#multiple-piwik-trackers')
 }}ad[Y]++}}}}return ac}W(H,"beforeunload",T,false);p();Date.prototype.getTimeAlias=Date.prototype.getTime;M=new E();var s=["disableCookies","setTrackerUrl","setAPIUrl","setCookiePath","setCookieDomain","setUserId","setSiteId","enableLinkTracking"];_paq=b(_paq,s);for(u=0;u<_paq.length;u++){if(_paq[u]){S(_paq[u])}}_paq=new w();d={addPlugin:function(X,Y){a[X]=Y},getTracker:function(X,Y){if(!x(Y)){Y=this.getAsyncTracker().getSiteId()}if(!x(X)){X=this.getAsyncTracker().getTrackerUrl()}return new E(X,Y)},getAsyncTracker:function(){return M}};if(typeof define==="function"&&define.amd){define("piwik",[],function(){return d})}return d}())}if(window&&window.piwikAsyncInit){window.piwikAsyncInit()}(function(){var a=(typeof AnalyticsTracker);if(a==="undefined"){AnalyticsTracker=Piwik}}());if(typeof piwik_log!=="function"){piwik_log=function(b,f,d,g){function a(h){try{return eval("piwik_"+h)}catch(i){}return}var c,e=Piwik.getTracker(d,f);e.setDocumentTitle(b);e.setCustomData(g);c=a("tracker_pause");
 if(c){e.setLinkTrackingTimer(c)}c=a("download_extensions");if(c){e.setDownloadExtensions(c)}c=a("hosts_alias");if(c){e.setDomains(c)}c=a("ignore_classes");if(c){e.setIgnoreClasses(c)}e.trackPageView();if(a("install_tracker")){piwik_track=function(i,k,j,h){e.setSiteId(k);e.setTrackerUrl(j);e.trackLink(i,h)};e.enableLinkTracking()}};
 /*! @license-end */
diff --git a/plugins/API/API.php b/plugins/API/API.php
index 90c7b1f45c24136eb6cbdb17df7916348eef610b..7027756ccde431ba500e55bc0a0a850d77da68d8 100644
--- a/plugins/API/API.php
+++ b/plugins/API/API.php
@@ -120,10 +120,15 @@ class API extends \Piwik\Plugin\API
 
     public function getSegmentsMetadata($idSites = array(), $_hideImplementationData = true)
     {
-        $segments = array();
+        $isAuthenticatedWithViewAccess = Piwik::isUserHasViewAccess($idSites) && !Piwik::isUserIsAnonymous();
 
+        $segments = array();
         foreach (Dimension::getAllDimensions() as $dimension) {
             foreach ($dimension->getSegments() as $segment) {
+                if ($segment->isRequiresAtLeastViewAccess()) {
+                    $segment->setPermission($isAuthenticatedWithViewAccess);
+                }
+
                 $segments[] = $segment->toArray();
             }
         }
@@ -176,50 +181,6 @@ class API extends \Piwik\Plugin\API
          */
         Piwik::postEvent('API.getSegmentDimensionMetadata', array(&$segments, $idSites));
 
-        $isAuthenticatedWithViewAccess = Piwik::isUserHasViewAccess($idSites) && !Piwik::isUserIsAnonymous();
-
-        $segments[] = array(
-            'type'           => 'dimension',
-            'category'       => Piwik::translate('General_Visit'),
-            'name'           => 'General_UserId',
-            'segment'        => 'userId',
-            'acceptedValues' => 'any non empty unique string identifying the user (such as an email address or a username).',
-            'sqlSegment'     => 'log_visit.user_id',
-            'permission'     => $isAuthenticatedWithViewAccess,
-        );
-
-        $segments[] = array(
-            'type'           => 'dimension',
-            'category'       => Piwik::translate('General_Visit'),
-            'name'           => 'General_VisitorID',
-            'segment'        => 'visitorId',
-            'acceptedValues' => '34c31e04394bdc63 - any 16 Hexadecimal chars ID, which can be fetched using the Tracking API function getVisitorId()',
-            'sqlSegment'     => 'log_visit.idvisitor',
-            'sqlFilterValue' => array('Piwik\Common', 'convertVisitorIdToBin'),
-            'permission'     => $isAuthenticatedWithViewAccess,
-        );
-
-        $segments[] = array(
-            'type'           => 'dimension',
-            'category'       => Piwik::translate('General_Visit'),
-            'name'           => Piwik::translate('General_Visit') . " ID",
-            'segment'        => 'visitId',
-            'acceptedValues' => 'Any integer. ',
-            'sqlSegment'     => 'log_visit.idvisit',
-            'permission'     => $isAuthenticatedWithViewAccess,
-        );
-
-        $segments[] = array(
-            'type'           => 'metric',
-            'category'       => Piwik::translate('General_Visit'),
-            'name'           => 'General_VisitorIP',
-            'segment'        => 'visitIp',
-            'acceptedValues' => '13.54.122.1. </code>Select IP ranges with notation: <code>visitIp>13.54.122.0;visitIp<13.54.122.255',
-            'sqlSegment'     => 'log_visit.location_ip',
-            'sqlFilterValue' => array('Piwik\Network\IPUtils', 'stringToBinaryIP'),
-            'permission'     => $isAuthenticatedWithViewAccess,
-        );
-
         foreach ($segments as &$segment) {
             $segment['name'] = Piwik::translate($segment['name']);
             $segment['category'] = Piwik::translate($segment['category']);
@@ -628,9 +589,9 @@ class Plugin extends \Piwik\Plugin
     }
 
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getStylesheetFiles' => 'getStylesheetFiles'
diff --git a/plugins/Actions/Actions.php b/plugins/Actions/Actions.php
index 8cff52d8d72b488b223f53298476c17cd19e95a3..557e4c77b87cc519d1188799928ce8b7c0628d0b 100644
--- a/plugins/Actions/Actions.php
+++ b/plugins/Actions/Actions.php
@@ -26,9 +26,9 @@ class Actions extends \Piwik\Plugin
     const ACTIONS_REPORT_ROWS_DISPLAY = 100;
 
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'ViewDataTable.configure'         => 'configureViewDataTable',
diff --git a/plugins/Actions/lang/de.json b/plugins/Actions/lang/de.json
index f3434e4ce6c71cfc1fa0b4b02e837079c8f39fe5..f52aaabfbe39ae6a840e982c66268019abfe6543 100644
--- a/plugins/Actions/lang/de.json
+++ b/plugins/Actions/lang/de.json
@@ -29,13 +29,13 @@
         "EntryPagesReportDocumentation": "Dieser Bericht enthält Informationen über die Einstiegsseiten. Die Einstiegsseite ist die erste Seite, die während eines Besuches aufgerufen wird. %s Die URLs werden als Ordnerstruktur angezeigt.",
         "EntryPageTitles": "Titel der Einstiegsseite",
         "EntryPageTitlesReportDocumentation": "Dieser Bericht enthält Informationen über die Titel der Einstiegsseiten, die im angeforderten Zeitraum verwendet wurden.",
-        "ExitPagesReportDocumentation": "Dieser Bericht enthält Informationen über die Ausstiegsseiten. Die Ausstiegsseite ist die letzte Seite, die während eines Besuches aufgerufen wird. %s Die URLs werden als Ordnerstruktur angezeigt.",
+        "ExitPagesReportDocumentation": "Dieser Bericht enthält Informationen über die Ausstiegsseiten die im gewählten Zeitraum auftraten. Die Ausstiegsseite ist die letzte Seite, die während eines Besuches aufgerufen wird. %s Die URLs der Ausstiegsseiten werden als Ordnerstruktur angezeigt.",
         "ExitPageTitles": "Titel der Ausstiegsseite",
         "ExitPageTitlesReportDocumentation": "Dieser Bericht enthält Informationen über die Titel der Ausstiegsseiten, die angeforderten Zeitraum verwendet wurden.",
         "LearnMoreAboutSiteSearchLink": "Mehr Informationen über das Auswerten der internen Suche.",
         "OneSearch": "1 Suche",
         "OutlinkDocumentation": "Ein ausgehender Verweis ist ein Link der einen Besucher auf eine andere Website führt (auf eine andere Domain).",
-        "OutlinksReportDocumentation": "Dieser Bericht zeigt eine hierarchisch angeordnete Liste von ausgehenden Links, die von den Besuchern angeklickt wurden.",
+        "OutlinksReportDocumentation": "Dieser Bericht zeigt eine hierarchisch angeordnete Liste von ausgehenden Links, die von ihren Besuchern angeklickt wurden.",
         "PagesReportDocumentation": "Dieser Bericht enthält Informationen über die URLs der besuchten Seiten. %s Die Tabelle ist hierarchisch strukturiert, die URLs werden als Ordnerstruktur angezeigt.",
         "PageTitlesReportDocumentation": "Dieser Bericht enthält Informationen über die Seitentitel der besuchten Seiten. %s Der Seitentitel ist der HTML %s Tag, der von den meisten Browsern in ihrer Titelleiste angezeigt wird.",
         "PageUrls": "Seiten URL",
diff --git a/plugins/Actions/lang/zh-cn.json b/plugins/Actions/lang/zh-cn.json
index c3d9124725ce595ce3ce4a08ed83f21982df7ab9..45c925bd1eac00fe5dc2407c4d26eee33310b113 100644
--- a/plugins/Actions/lang/zh-cn.json
+++ b/plugins/Actions/lang/zh-cn.json
@@ -39,6 +39,7 @@
         "PagesReportDocumentation": "本报表显示被访问的网页地址。%s 表格分级归类,网址按照目录结构显示。",
         "PageTitlesReportDocumentation": "本报表显示被访问页面的标题。%s 网页标题为 HTML %s 标签,多数浏览器显示为窗口的标题。",
         "PageUrls": "页面地址",
+        "PluginDescription": "有关页面访问量和页面标题的报告。让你衡量你的内部网站的搜索引擎。自动跟踪外部链接和文件下载点击。",
         "SiteSearchCategories1": "本报表显示访客使用站内搜索时选择的分类。",
         "SiteSearchCategories2": "例如,购物网站通常有个\"分类\"选项,访客可以限制在某个分类中搜索产品。",
         "SiteSearchFollowingPagesDoc": "当访客在网站上搜索时,他们是在寻找特定的页面、内容、产品或者服务,本报表显示站内搜索后点击最多的页面。也就是说,显示了已有访客搜索最多的页面。",
diff --git a/plugins/Annotations/Annotations.php b/plugins/Annotations/Annotations.php
index c560f56b9feb7302f23eeddaf22cdd6f4bf8776b..84fe6134a8ac076296f10d0088739bd5e5b4d8ef 100755
--- a/plugins/Annotations/Annotations.php
+++ b/plugins/Annotations/Annotations.php
@@ -16,9 +16,9 @@ namespace Piwik\Plugins\Annotations;
 class Annotations extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
diff --git a/plugins/BulkTracking/BulkTracking.php b/plugins/BulkTracking/BulkTracking.php
index b55a681030f3dad3b05ca087c83f6c277143c020..c05f5dc5135aaa969fc2caafbb872219e263ae71 100644
--- a/plugins/BulkTracking/BulkTracking.php
+++ b/plugins/BulkTracking/BulkTracking.php
@@ -19,9 +19,9 @@ class BulkTracking extends \Piwik\Plugin
     private $requests;
 
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'Tracker.newHandler' => 'setHandlerIfBulkRequest',
diff --git a/plugins/BulkTracking/Tracker/Handler.php b/plugins/BulkTracking/Tracker/Handler.php
index db368a315e2503c060d0cbc55f5d9bb9e803c47c..0d97a6b5b332a2c3a09c0b5bef9b9dcb0d8ab1ad 100644
--- a/plugins/BulkTracking/Tracker/Handler.php
+++ b/plugins/BulkTracking/Tracker/Handler.php
@@ -9,7 +9,11 @@
 
 namespace Piwik\Plugins\BulkTracking\Tracker;
 
+use Piwik\Archiver\Request;
+use Piwik\AuthResult;
+use Piwik\Container\StaticContainer;
 use Piwik\Exception\UnexpectedWebsiteFoundException;
+use Piwik\Piwik;
 use Piwik\Tracker;
 use Piwik\Tracker\RequestSet;
 use Piwik\Tracker\TrackerConfig;
@@ -40,18 +44,22 @@ class Handler extends Tracker\Handler
 
     public function process(Tracker $tracker, RequestSet $requestSet)
     {
-        $invalidRequests = 0;
-        foreach ($requestSet->getRequests() as $request) {
+        $isAuthenticated = $this->isBulkTrackingRequestAuthenticated($requestSet);
+
+        /** @var Response $response */
+        $response = $this->getResponse();
+        $response->setIsAuthenticated($isAuthenticated);
+
+        $invalidRequests = array();
+        foreach ($requestSet->getRequests() as $index => $request) {
             try {
                 $tracker->trackRequest($request);
             } catch (UnexpectedWebsiteFoundException $ex) {
-                $invalidRequests += 1;
+                $invalidRequests[] = $index;
             }
         }
 
-        /** @var Response $response */
-        $response = $this->getResponse();
-        $response->setInvalidCount($invalidRequests);
+        $response->setInvalidRequests($invalidRequests);
     }
 
     public function onException(Tracker $tracker, RequestSet $requestSet, Exception $e)
@@ -96,4 +104,23 @@ class Handler extends Tracker\Handler
         return (bool) TrackerConfig::getConfigValue('bulk_requests_use_transaction');
     }
 
+    private function isBulkTrackingRequestAuthenticated(RequestSet $requestSet)
+    {
+        $tokenAuth = $requestSet->getTokenAuth();
+        if (empty($tokenAuth)) {
+            return false;
+        }
+
+        Piwik::postEvent('Request.initAuthenticationObject');
+
+        /** @var \Piwik\Auth $auth */
+        $auth = StaticContainer::get('Piwik\Auth');
+        $auth->setTokenAuth($tokenAuth);
+        $auth->setLogin(null);
+        $auth->setPassword(null);
+        $auth->setPasswordHash(null);
+        $access = $auth->authenticate();
+
+        return $access->getCode() == AuthResult::SUCCESS_SUPERUSER_AUTH_CODE;
+    }
 }
diff --git a/plugins/BulkTracking/Tracker/Response.php b/plugins/BulkTracking/Tracker/Response.php
index 816397cfd09bd76a64351d1e39d5fc3a03156e25..e8d3667eeca0c85fbec859f1bd27b9995b1b43b3 100644
--- a/plugins/BulkTracking/Tracker/Response.php
+++ b/plugins/BulkTracking/Tracker/Response.php
@@ -15,9 +15,14 @@ use Piwik\Tracker;
 class Response extends Tracker\Response
 {
     /**
-     * @var int
+     * @var int[]
      */
-    private $invalidRequests = 0;
+    private $invalidRequests = array();
+
+    /**
+     * @var bool
+     */
+    private $isAuthenticated = false;
 
     /**
      * Echos an error message & other information, then exits.
@@ -61,9 +66,11 @@ class Response extends Tracker\Response
         $result = array(
             'status'  => 'error',
             'tracked' => $tracker->getCountOfLoggedRequests(),
-            'invalid' => $this->invalidRequests,
+            'invalid' => count($this->invalidRequests),
         );
 
+        $this->addInvalidIndicesIfAuthenticated($result);
+
         // send error when in debug mode
         if ($tracker->isDebugModeEnabled()) {
             $result['message'] = $this->getMessageFromException($e);
@@ -74,15 +81,31 @@ class Response extends Tracker\Response
 
     private function formatResponse(Tracker $tracker)
     {
-        return array(
+        $result = array(
             'status' => 'success',
             'tracked' => $tracker->getCountOfLoggedRequests(),
-            'invalid' => $this->invalidRequests,
+            'invalid' => count($this->invalidRequests),
         );
+
+        $this->addInvalidIndicesIfAuthenticated($result);
+
+        return $result;
     }
 
-    public function setInvalidCount($invalidRequests)
+    public function setInvalidRequests($invalidRequests)
     {
         $this->invalidRequests = $invalidRequests;
     }
+
+    public function setIsAuthenticated($isAuthenticated)
+    {
+        $this->isAuthenticated = $isAuthenticated;
+    }
+
+    private function addInvalidIndicesIfAuthenticated(&$result)
+    {
+        if ($this->isAuthenticated) {
+            $result['invalid_indices'] = $this->invalidRequests;
+        }
+    }
 }
diff --git a/plugins/BulkTracking/tests/Framework/TestCase/BulkTrackingTestCase.php b/plugins/BulkTracking/tests/Framework/TestCase/BulkTrackingTestCase.php
index 23b96776ae747f274093f42f8fc7214c15090246..19788b64aba1d68ab851e5bed95404cadf5d924c 100644
--- a/plugins/BulkTracking/tests/Framework/TestCase/BulkTrackingTestCase.php
+++ b/plugins/BulkTracking/tests/Framework/TestCase/BulkTrackingTestCase.php
@@ -80,9 +80,9 @@ class BulkTrackingTestCase extends IntegrationTestCase
         return $requestSet;
     }
 
-    protected function getDummyRequest($token = null)
+    protected function getDummyRequest($token = null, $idSites = array(1, 2))
     {
-        $params = array(array('idsite' => '1', 'rec' => '1'), array('idsite' => '2', 'rec' => '1'));
+        $params = array(array('idsite' => $idSites[0], 'rec' => '1'), array('idsite' => $idSites[1], 'rec' => '1'));
         $params = array('requests' => $params);
 
         if (!is_null($token)) {
diff --git a/plugins/BulkTracking/tests/Integration/BulkTrackingTest.php b/plugins/BulkTracking/tests/Integration/BulkTrackingTest.php
index c495afcee1ebd0214f42ef47b2955ab54c750108..3c3366ea9dd3548944007c3a300b9b2bb867bb6c 100644
--- a/plugins/BulkTracking/tests/Integration/BulkTrackingTest.php
+++ b/plugins/BulkTracking/tests/Integration/BulkTrackingTest.php
@@ -118,7 +118,7 @@ class BulkTrackingTest extends BulkTrackingTestCase
         $this->assertNull($handler);
     }
 
-    public function test_getListHooksRegistered_shouldListenToNewTrackerEventAndCreateBulkHandler_IfBulkRequest()
+    public function test_registerEvents_shouldListenToNewTrackerEventAndCreateBulkHandler_IfBulkRequest()
     {
         $this->injectRawDataToBulk($this->getDummyRequest());
 
@@ -127,14 +127,14 @@ class BulkTrackingTest extends BulkTrackingTestCase
         $this->assertTrue($handler instanceof Handler);
     }
 
-    public function test_getListHooksRegistered_shouldListenToNewTrackerEventAndNotCreateBulkHandler_IfNotBulkRequest()
+    public function test_registerEvents_shouldListenToNewTrackerEventAndNotCreateBulkHandler_IfNotBulkRequest()
     {
         $handler = DefaultHandler\Factory::make();
 
         $this->assertTrue($handler instanceof DefaultHandler);
     }
 
-    public function test_getListHooksRegistered_shouldListenToInitRequestSetEventAndInit_IfBulkRequest()
+    public function test_registerEvents_shouldListenToInitRequestSetEventAndInit_IfBulkRequest()
     {
         $this->injectRawDataToBulk($this->getDummyRequest());
 
diff --git a/plugins/BulkTracking/tests/Integration/TrackerTest.php b/plugins/BulkTracking/tests/Integration/TrackerTest.php
index 32b26e4ec4c7ea2f5bf09cf84d693c4d2fb56ff3..a872b0524c1781ae9ad8e8b0986cb5b35aa88300 100644
--- a/plugins/BulkTracking/tests/Integration/TrackerTest.php
+++ b/plugins/BulkTracking/tests/Integration/TrackerTest.php
@@ -115,6 +115,30 @@ class TrackerTest extends BulkTrackingTestCase
         $this->assertEmpty($this->getIdVisit(3));
     }
 
+    public function test_main_shouldReportInvalidIndices_IfInvalidRequestsIncluded_AndRequestAuthenticated()
+    {
+        $this->injectRawDataToBulk($this->getDummyRequest($token = Fixture::getTokenAuth(), $idSite = array(1, -100)));
+
+        $handler = $this->getHandler();
+        $handler->setResponse(new Response());
+
+        $response = $this->tracker->main($handler, $this->getEmptyRequestSet());
+
+        $this->assertEquals('{"status":"success","tracked":1,"invalid":1,"invalid_indices":[1]}', $response);
+    }
+
+    public function test_main_shouldReportInvalidCount_IfInvalidRequestsIncluded_AndRequestNotAuthenticated()
+    {
+        $this->injectRawDataToBulk($this->getDummyRequest($token = null, $idSite = array(1, -100)));
+
+        $handler = $this->getHandler();
+        $handler->setResponse(new Response());
+
+        $response = $this->tracker->main($handler, $this->getEmptyRequestSet());
+
+        $this->assertEquals('{"status":"success","tracked":1,"invalid":1}', $response);
+    }
+
     private function getHandler()
     {
         return Tracker\Handler\Factory::make();
@@ -130,4 +154,10 @@ class TrackerTest extends BulkTrackingTestCase
         return Tracker::getDatabase()->fetchRow("SELECT * FROM " . Common::prefixTable('log_visit') . " WHERE idvisit = ?", array($idVisit));
     }
 
+    protected static function configureFixture($fixture)
+    {
+        parent::configureFixture($fixture);
+
+        $fixture->createSuperUser = true;
+    }
 }
\ No newline at end of file
diff --git a/plugins/BulkTracking/tests/Mock/TrackerResponse.php b/plugins/BulkTracking/tests/Mock/TrackerResponse.php
index 15eb209bc2a0d49511a2c5ca0c4b23afcd4c3a9b..9b6f9564d8f17d4b6c053058852294d353a29c98 100644
--- a/plugins/BulkTracking/tests/Mock/TrackerResponse.php
+++ b/plugins/BulkTracking/tests/Mock/TrackerResponse.php
@@ -12,10 +12,20 @@ use Piwik\Tests\Framework\Mock\Tracker\Response;
 
 class TrackerResponse extends Response
 {
-    private $invalidRequests = 0;
+    private $invalidRequests = array();
 
-    public function setInvalidCount($invalidRequests)
+    /**
+     * @var bool
+     */
+    private $isAuthenticated = false;
+
+    public function setInvalidRequests($invalidRequests)
     {
         $this->invalidRequests = $invalidRequests;
     }
+
+    public function setIsAuthenticated($isAuthenticated)
+    {
+        $this->isAuthenticated = $isAuthenticated;
+    }
 }
\ No newline at end of file
diff --git a/plugins/BulkTracking/tests/System/TrackerTest.php b/plugins/BulkTracking/tests/System/TrackerTest.php
index 188e87e1cac2aea94527f7ae3f6f95715aa7cf21..aabef2296fa7c562726914813e76dd98d4cbc3c0 100644
--- a/plugins/BulkTracking/tests/System/TrackerTest.php
+++ b/plugins/BulkTracking/tests/System/TrackerTest.php
@@ -50,8 +50,15 @@ class TrackerTest extends SystemTestCase
         $this->tracker->setIdSite(5);
         $this->tracker->doTrackPageView('Test');
 
+        $this->tracker->setIdSite(1);
+        $this->tracker->doTrackPageView('Test');
+
+        // another invalid one to further test the invalid request indices in the result
+        $this->tracker->setIdSite(7);
+        $this->tracker->doTrackPageView('Test');
+
         $response = $this->tracker->doBulkTrack();
 
-        $this->assertEquals('{"status":"success","tracked":2,"invalid":1}', $response);
+        $this->assertEquals('{"status":"success","tracked":3,"invalid":2,"invalid_indices":[2,4]}', $response);
     }
 }
\ No newline at end of file
diff --git a/plugins/BulkTracking/tests/Unit/ResponseTest.php b/plugins/BulkTracking/tests/Unit/ResponseTest.php
index 91b3df86da0c57a22340483964192bb94aaafff7..38c3c0cce17e25c7e442f5a75a575ef52b0bd077 100644
--- a/plugins/BulkTracking/tests/Unit/ResponseTest.php
+++ b/plugins/BulkTracking/tests/Unit/ResponseTest.php
@@ -83,17 +83,41 @@ class ResponseTest extends UnitTestCase
         $this->assertEquals('{"status":"error","tracked":5,"invalid":0}', $content);
     }
 
-    public function test_outputResponse_shouldOutputInvalidRequests_IfInvalidCountSet()
+    public function test_outputResponse_shouldIncludeInvalidIndices_IfExceptionSet_AndRequestAuthenticated()
     {
         $tracker = $this->getTrackerWithCountedRequests();
 
-        $this->response->setInvalidCount(3);
+        $this->response->setInvalidRequests(array(10, 20));
+        $this->response->setIsAuthenticated(true);
+        $this->response->outputException($tracker, new Exception('My Custom Message'), 400);
+        $content = $this->response->getOutput();
+
+        $this->assertEquals('{"status":"error","tracked":5,"invalid":2,"invalid_indices":[10,20]}', $content);
+    }
+
+    public function test_outputResponse_shouldOutputInvalidRequests_IfInvalidIndicesSet_AndRequestNotAuthenticated()
+    {
+        $tracker = $this->getTrackerWithCountedRequests();
+
+        $this->response->setInvalidRequests(array(5, 63, 72));
         $this->response->outputResponse($tracker);
         $content = $this->response->getOutput();
 
         $this->assertEquals('{"status":"success","tracked":5,"invalid":3}', $content);
     }
 
+    public function test_outputResponse_shouldOutputInvalidRequests_IfInvalidIndicesSet_AndRequestAuthenticated()
+    {
+        $tracker = $this->getTrackerWithCountedRequests();
+
+        $this->response->setInvalidRequests(array(5, 63, 72));
+        $this->response->setIsAuthenticated(true);
+        $this->response->outputResponse($tracker);
+        $content = $this->response->getOutput();
+
+        $this->assertEquals('{"status":"success","tracked":5,"invalid":3,"invalid_indices":[5,63,72]}', $content);
+    }
+
     private function getTrackerWithCountedRequests()
     {
         $tracker = new Tracker();
diff --git a/plugins/Contents/Contents.php b/plugins/Contents/Contents.php
index 21bebd9c0426e52334c0b74f88dd908a19725d26..10536930afcd781ef4397a0f8d5d78a2918424db 100644
--- a/plugins/Contents/Contents.php
+++ b/plugins/Contents/Contents.php
@@ -11,9 +11,9 @@ namespace Piwik\Plugins\Contents;
 class Contents extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'Metrics.getDefaultMetricTranslations' => 'addMetricTranslations',
diff --git a/plugins/Contents/lang/cs.json b/plugins/Contents/lang/cs.json
index 7b8e562cb9bbdf199e23eabbb48cbe9887a4d5c3..596ee07a0363c469d32f7e5340e215e44d767c4a 100644
--- a/plugins/Contents/lang/cs.json
+++ b/plugins/Contents/lang/cs.json
@@ -1,5 +1,6 @@
 {
     "Contents": {
+        "PluginDescription": "Sledování obsahu a bannerů vám umožňuje sledovat efektivitu (zobrazení, kliky...) libovolného obsahu (bannerová reklama, obrázek, vlastně cokoliv) na vašich stránkách.",
         "Impressions": "Dojmy",
         "Interactions": "Interakce",
         "Interaction": "Interakce",
diff --git a/plugins/Contents/lang/it.json b/plugins/Contents/lang/it.json
index 205bb057f161ceac541cdc50a8c8aba042cd25f0..7acc091c7c16559acb3b08a2b141c1c16abc41f7 100644
--- a/plugins/Contents/lang/it.json
+++ b/plugins/Contents/lang/it.json
@@ -4,7 +4,7 @@
         "Impressions": "Impressioni",
         "Interactions": "Interazioni",
         "Interaction": "Interazione",
-        "InteractionRate": "Rapporto di Interazione",
+        "InteractionRate": "Rapporto di Interazioni",
         "ContentName": "Nome Contenuto",
         "Contents": "Contenuti"
     }
diff --git a/plugins/Contents/lang/sr.json b/plugins/Contents/lang/sr.json
index cee8a9bc5f3b3e05dfe8eb471db4dae7a6bf3db0..14c1c78659bf57dd2d9cdc89a6c6ae4031cfa38a 100644
--- a/plugins/Contents/lang/sr.json
+++ b/plugins/Contents/lang/sr.json
@@ -1,5 +1,6 @@
 {
     "Contents": {
+        "PluginDescription": "Praćenje sadržaja i banera vam omogućuje merenje performansi (prikaza, klikova, CTR) bilo kog dela sadržaja vaših stranica (reklama, slika itd.).",
         "Impressions": "Prikazi",
         "Interactions": "Interakcije",
         "Interaction": "Interakcija",
diff --git a/plugins/CoreAdminHome/Commands/OptimizeArchiveTables.php b/plugins/CoreAdminHome/Commands/OptimizeArchiveTables.php
new file mode 100644
index 0000000000000000000000000000000000000000..9a09dd7350920908a3178adbe97874a135356972
--- /dev/null
+++ b/plugins/CoreAdminHome/Commands/OptimizeArchiveTables.php
@@ -0,0 +1,124 @@
+<?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\Plugins\CoreAdminHome\Commands;
+
+use Piwik\Common;
+use Piwik\DataAccess\ArchiveTableCreator;
+use Piwik\Date;
+use Piwik\Db;
+use Piwik\Plugin\ConsoleCommand;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+/**
+ * Administration command that optimizes archive tables (even if they use InnoDB).
+ */
+class OptimizeArchiveTables extends ConsoleCommand
+{
+    const ALL_TABLES_STRING = 'all';
+    const CURRENT_MONTH_STRING = 'now';
+
+    protected function configure()
+    {
+        $this->setName('database:optimize-archive-tables');
+        $this->setDescription("Runs an OPTIMIZE TABLE query on the specified archive tables.");
+        $this->addArgument("dates", InputArgument::IS_ARRAY | InputArgument::REQUIRED,
+            "The months of the archive tables to optimize. Use '" . self::ALL_TABLES_STRING. "' for all dates or '" .
+            self::CURRENT_MONTH_STRING . "' to optimize the current month only.");
+        $this->addOption('dry-run', null, InputOption::VALUE_NONE, 'For testing purposes.');
+        $this->setHelp("This command can be used to ease or automate maintenance. Instead of manually running "
+            . "OPTIMIZE TABLE queries, the command can be used.\n\nYou should run the command if you find your "
+            . "archive tables grow and do not shrink after purging. Optimizing them will reclaim some space.");
+    }
+
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $dryRun = $input->getOption('dry-run');
+
+        $tableMonths = $this->getTableMonthsToOptimize($input);
+
+        foreach ($tableMonths as $month) {
+            $this->optimizeTable($output, $dryRun, 'archive_numeric_' . $month);
+            $this->optimizeTable($output, $dryRun, 'archive_blob_' . $month);
+        }
+    }
+
+    private function optimizeTable(OutputInterface $output, $dryRun, $table)
+    {
+        $output->write("Optimizing table '$table'...");
+
+        if ($dryRun) {
+            $output->write("[dry-run, not optimising table]");
+        } else {
+            Db::optimizeTables(Common::prefixTable($table), $force = true);
+        }
+
+        $output->writeln("Done.");
+    }
+
+    private function getTableMonthsToOptimize(InputInterface $input)
+    {
+        $dateSpecifier = $input->getArgument('dates');
+        if (count($dateSpecifier) === 1) {
+            $dateSpecifier = reset($dateSpecifier);
+
+            if ($dateSpecifier == self::ALL_TABLES_STRING) {
+                return $this->getAllArchiveTableMonths();
+            } else if ($dateSpecifier == self::CURRENT_MONTH_STRING) {
+                $now = Date::factory('now');
+                return array(ArchiveTableCreator::getTableMonthFromDate($now));
+            } else if (strpos($dateSpecifier, 'last') === 0) {
+                $lastN = substr($dateSpecifier, 4);
+                if (!ctype_digit($lastN)) {
+                    throw new \Exception("Invalid lastN specifier '$lastN'. The end must be an integer, eg, last1 or last2.");
+                }
+
+                if ($lastN <= 0) {
+                    throw new \Exception("Invalid lastN value '$lastN'.");
+                }
+
+                return $this->getLastNTableMonths((int)$lastN);
+            }
+        }
+
+        $tableMonths = array();
+        foreach ($dateSpecifier as $date) {
+            $date = Date::factory($date);
+            $tableMonths[] = ArchiveTableCreator::getTableMonthFromDate($date);
+        }
+        return $tableMonths;
+    }
+
+    private function getAllArchiveTableMonths()
+    {
+        $tableMonths = array();
+        foreach (ArchiveTableCreator::getTablesArchivesInstalled() as $table) {
+            $tableMonths[] = ArchiveTableCreator::getDateFromTableName($table);
+        }
+        return $tableMonths;
+    }
+
+    /**
+     * @param int $lastN
+     * @return string[]
+     */
+    private function getLastNTableMonths($lastN)
+    {
+        $now = Date::factory('now');
+
+        $result = array();
+        for ($i = 0; $i < $lastN; ++$i) {
+            $date = $now->subMonth($i + 1);
+            $result[] = ArchiveTableCreator::getTableMonthFromDate($date);
+        }
+        return $result;
+    }
+}
diff --git a/plugins/CoreAdminHome/Controller.php b/plugins/CoreAdminHome/Controller.php
index cb8f862643777d5a620c33775eee66bdfd32938e..32aac9e5f5d21b7e670f36e4c62411a645698001 100644
--- a/plugins/CoreAdminHome/Controller.php
+++ b/plugins/CoreAdminHome/Controller.php
@@ -280,6 +280,8 @@ class Controller extends ControllerAdmin
      */
     public function trackingCodeGenerator()
     {
+        Piwik::checkUserHasSomeViewAccess();
+        
         $view = new View('@CoreAdminHome/trackingCodeGenerator');
         $this->setBasicVariablesView($view);
         $view->topMenu  = MenuTop::getInstance()->getMenu();
@@ -292,7 +294,7 @@ class Controller extends ControllerAdmin
 
         $view->defaultReportSiteName = Site::getNameFor($view->idSite);
         $view->defaultSiteRevenue = \Piwik\Metrics\Formatter::getCurrencySymbol($view->idSite);
-        $view->maxCustomVariables = CustomVariables::getMaxCustomVariables();
+        $view->maxCustomVariables = CustomVariables::getNumUsableCustomVariables();
 
         $allUrls = APISitesManager::getInstance()->getSiteUrlsFromId($view->idSite);
         if (isset($allUrls[1])) {
diff --git a/plugins/CoreAdminHome/CoreAdminHome.php b/plugins/CoreAdminHome/CoreAdminHome.php
index 4c0c1c3fc3cb8e8b648e1445dff0a9b6099d04df..75f1230cd68942a0e3635a2d758c77daa947b734 100644
--- a/plugins/CoreAdminHome/CoreAdminHome.php
+++ b/plugins/CoreAdminHome/CoreAdminHome.php
@@ -18,9 +18,9 @@ use Piwik\Settings\UserSetting;
 class CoreAdminHome extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
diff --git a/plugins/CoreAdminHome/OptOutManager.php b/plugins/CoreAdminHome/OptOutManager.php
index 321002f5e0fc4b01fa9187d98d505c4ca1511b81..78d142c14184c591ae890d05b2a3b63b6512fc4e 100644
--- a/plugins/CoreAdminHome/OptOutManager.php
+++ b/plugins/CoreAdminHome/OptOutManager.php
@@ -208,7 +208,6 @@ class OptOutManager
         $this->view->trackVisits = $trackVisits;
         $this->view->nonce = Nonce::getNonce('Piwik_OptOut', 3600);
         $this->view->language = $lang;
-        $this->view->isSafari = $this->isUserAgentSafari();
         $this->view->showConfirmOnly = Common::getRequestVar('showConfirmOnly', false, 'int');
         $this->view->reloadUrl = $reloadUrl;
         $this->view->javascripts = $this->getJavascripts();
@@ -226,13 +225,4 @@ class OptOutManager
     {
         return $this->doNotTrackHeaderChecker;
     }
-
-    /**
-     * @return bool
-     */
-    protected function isUserAgentSafari()
-    {
-        $userAgent = @$_SERVER['HTTP_USER_AGENT'] ?: '';
-        return strpos($userAgent, 'Safari') !== false && strpos($userAgent, 'Chrome') === false;
-    }
 }
diff --git a/plugins/CoreAdminHome/lang/cs.json b/plugins/CoreAdminHome/lang/cs.json
index 94d2a6573f4a2b237c80d10a6cac2d13ca176c2d..5a2d6ca5d84d26215a8256be74c66168a5bfd468 100644
--- a/plugins/CoreAdminHome/lang/cs.json
+++ b/plugins/CoreAdminHome/lang/cs.json
@@ -87,6 +87,7 @@
         "YouAreOptedIn": "Aktuálně nejste vyloučen.",
         "YouAreOptedOut": "Aktuálně jste vyloučen.",
         "YouMayOptOut": "Zde se můžete rozhodnout, zda se smí ve Vašem prohlížeči ukládat jedinečná analytická data “ Cookies” , a zda umožníte provozovateli webové stránky shromažďovat a analyzovat různé statistické údaje.",
-        "YouMayOptOutBis": "Pokud jste se rozhodli že ne, klikněte na přiložený odkaz pro uložení deaktivačního Cookie ve Vašem prohlížeči."
+        "YouMayOptOutBis": "Pokud jste se rozhodli že ne, klikněte na přiložený odkaz pro uložení deaktivačního Cookie ve Vašem prohlížeči.",
+        "OptingYouOut": "Vylučování, prosím čekejte..."
     }
 }
\ No newline at end of file
diff --git a/plugins/CoreAdminHome/lang/de.json b/plugins/CoreAdminHome/lang/de.json
index fbd725ca50d002d8df7c63468222aaf4fc821898..7073dda82ce0077571d54092ab73d2af2584d50b 100644
--- a/plugins/CoreAdminHome/lang/de.json
+++ b/plugins/CoreAdminHome/lang/de.json
@@ -77,7 +77,7 @@
         "StableReleases": "Sollte Piwik eine wichtige Komponente Ihres Unternehmens sein, empfehlen wir Ihnen den letzen stabilen Release zu verwenden. Sollten Sie die letze Beta Version verwenden und einen Fehler finden oder einen Vorschlag haben, %slesen Sie bitte hier%s.",
         "SystemPluginSettings": "Globale Plugin Einstellungen",
         "TrackAGoal": "Ein Ziel aufzeichnen",
-        "TrackingCode": "Tracking Code",
+        "TrackingCode": "Tracking-Code",
         "TrustedHostConfirm": "Wollen Sie wirklich den Vertrauten Piwik Hostnamen ändern?",
         "TrustedHostSettings": "Vertrauter Piwik Hostname",
         "UpdateSettings": "Aktualisierungseinstellungen",
diff --git a/plugins/CoreAdminHome/lang/nl.json b/plugins/CoreAdminHome/lang/nl.json
index 854a25c56ddb18b6ccc86c0c7cd665e563f16b74..d060e3b961dfc52210af9c9cf842c72c4733b387 100644
--- a/plugins/CoreAdminHome/lang/nl.json
+++ b/plugins/CoreAdminHome/lang/nl.json
@@ -1,5 +1,6 @@
 {
     "CoreAdminHome": {
+        "AddNewTrustedHost": "Voeg een nieuwe betrouwbare server toe",
         "Administration": "Administratie",
         "ArchivingSettings": "Archivering instellingen",
         "BrandingSettings": "Logo instellingen",
diff --git a/plugins/CoreAdminHome/lang/pt.json b/plugins/CoreAdminHome/lang/pt.json
index e05620a5e90857a3e71c52efcf215501d96132ea..dfa1bce60174d9929a6bca5ac1dc248c9d87985b 100644
--- a/plugins/CoreAdminHome/lang/pt.json
+++ b/plugins/CoreAdminHome/lang/pt.json
@@ -3,11 +3,14 @@
         "Administration": "Administração",
         "ArchivingSettings": "A arquivar definições",
         "BrandingSettings": "Definições de Marca",
+        "CheckReleaseGetVersion": "Utilize a versão beta mais recente",
         "ClickHereToOptIn": "Clique aqui para fazer opt-in.",
         "ClickHereToOptOut": "Clique aqui para fazer opt-out.",
         "CustomLogoHelpText": "Você pode personalizar o logotipo Piwik que será exibido na interface do utilizador e relatórios de e-mail.",
         "EmailServerSettings": "Definições do servidor de email",
         "ForBetaTestersOnly": "Para testadores de versões beta apenas",
+        "ImageTracking": "Monitorização por imagem",
+        "ImageTrackingLink": "Link de monitorização por imagem",
         "ImportingServerLogs": "A Importar Relatórios de Servidor",
         "InvalidPluginsWarning": "Os seguintes plugins não são compatíveis com %1$s e não puderam ser carregados: %2$s.",
         "JavaScriptTracking": "Monitorização por JavaScript",
@@ -20,8 +23,8 @@
         "JSTracking_PageCustomVarsDesc": "Por exemplo, com nome de variável \"Categoria\" e valor \"Documentos Brancos\".",
         "JSTracking_VisitorCustomVars": "Siga variáveis personalizadas para este visitante.",
         "JSTracking_VisitorCustomVarsDesc": "Por exemplo, com nome de variável \"Tipo\" e valor \"Cliente\".",
-        "LatestBetaRelease": "A mais recente publicação beta",
-        "LatestStableRelease": "A mais recente versão estável",
+        "LatestBetaRelease": "A publicação beta mais recente",
+        "LatestStableRelease": "A versão estável mais recente",
         "FileUploadDisabled": "Carregar ficheiros não se encontra ativo nas sua configuração PHP. Para carregar o seu logótipo personalizado por favor defina %s em php.ini e reinicie o seu servidor.",
         "LogoUpload": "Selecione um logo para fazer upload",
         "FaviconUpload": "Selecione um Favicon para carregar",
@@ -39,9 +42,12 @@
         "PluginSettingReadNotAllowed": "Não lhe é permitido ler o valor da definição \"%s\" no plugin \"%s\"",
         "PluginSettingsIntro": "Aqui pode alterar as definições dos seguintes plugins de terceiros:",
         "PluginSettingsValueNotAllowed": "O valor para o campo \"%s\" no plugin \"%s\" não é permitido",
-        "SendPluginUpdateCommunicationHelp": "Será enviado correio eletrónico para os Super Utilizadores quando existir uma nova versão disponível para um plugin.",
+        "SendPluginUpdateCommunication": "Enviar um email quando uma actualização ao plugin estiver disponível",
+        "SendPluginUpdateCommunicationHelp": "Será enviado um email para os Super Utilizadores quando existir uma nova versão disponível para um plugin.",
         "StableReleases": "Se o Piwik é uma parte crítica do seu negócio, recomendamos que utilize a versão estável mais recente. Se você usa a mais recente versão beta e julga que encontrou um erro ou possui uma sugestão, por favor %sveja aqui%s.",
+        "TrackAGoal": "Monitorize um objectivo",
         "TrackingCode": "Código de monitorização",
+        "UpdateSettings": "Actualizar definições",
         "UseCustomLogo": "Use um logo personalizado.",
         "YouAreOptedIn": "Actualmente está activa a opção opt-in",
         "YouAreOptedOut": "Actualmente está activa a opção opt-out",
diff --git a/plugins/CoreAdminHome/lang/sr.json b/plugins/CoreAdminHome/lang/sr.json
index 966c26cd7cac6ca951638e639c6733b5aa7b218b..ff67ef6990a3c19e8d63499fcbc947c1b10cdd26 100644
--- a/plugins/CoreAdminHome/lang/sr.json
+++ b/plugins/CoreAdminHome/lang/sr.json
@@ -1,8 +1,10 @@
 {
     "CoreAdminHome": {
+        "AddNewTrustedHost": "Dodavanje novog hosta od poverenja",
         "Administration": "Administracija",
         "ArchivingSettings": "Podešavanja arhiviranja",
         "BrandingSettings": "Podešavanje brendiranja",
+        "CheckReleaseGetVersion": "Koristi poslednju beta verziju",
         "ClickHereToOptIn": "Kliknite za uključenje.",
         "ClickHereToOptOut": "Kliknite za izuzeće.",
         "CustomLogoFeedbackInfo": "Ako podesite Piwik logo, možda biste bili zainteresovani da sakrijete %s link iz glavnog menija. Da to uradite, možete isključiti Feedback plugin iz %sOrganizuj Plugin-ove%s.",
@@ -70,6 +72,7 @@
         "PluginSettingsIntro": "Ovde možete promeniti podešavanja sledećih dodataka:",
         "PluginSettingsValueNotAllowed": "Vrednost za polje \"%s\" u dodatku \"%s\" nije dozvoljena",
         "PluginSettingsSaveFailed": "Greška prilikom snimanja podešavanja dodataka",
+        "SendPluginUpdateCommunication": "Pošalji mejl svaki put kada se pojavi nova verzija dodatka",
         "SendPluginUpdateCommunicationHelp": "Mejl će biti poslat superkorisnicima kad god se pojavi nova verzija ovog dodatka.",
         "StableReleases": "Ukoliko Piwik čini kritičan deo vašeg poslovanja, preporučujemo vam da koristite poslednju stabilnu verziju. Ukoliko koristite poslednju beta verziju i nađete bag ili imate predlog, molimo vas %spogledajte ovde%s.",
         "SystemPluginSettings": "Sistemska podešavanja dodataka",
diff --git a/plugins/CoreAdminHome/stylesheets/generalSettings.less b/plugins/CoreAdminHome/stylesheets/generalSettings.less
index d17480f5f1320529e727f19c00aea63afa9220d7..eac16b6c4c01bd7a1a8ddec95b4a7003167661e3 100644
--- a/plugins/CoreAdminHome/stylesheets/generalSettings.less
+++ b/plugins/CoreAdminHome/stylesheets/generalSettings.less
@@ -7,6 +7,11 @@
     margin-right: 0 !important;
 }
 
+// hide PHP is deprecated notification in UI test
+.uiTest [notification-id="PHP53VersionCheck"] {
+    display: none !important;
+}
+
 #content.admin {
     margin: 0 0 0 260px;
     padding: 0 0 40px;
diff --git a/plugins/CoreAdminHome/templates/optOut.twig b/plugins/CoreAdminHome/templates/optOut.twig
index 8caf45c668f059db5566cbdb506eb20135232b59..e0eef925719f8b7674d616a27a4db216726f6782 100644
--- a/plugins/CoreAdminHome/templates/optOut.twig
+++ b/plugins/CoreAdminHome/templates/optOut.twig
@@ -10,19 +10,21 @@
     {% endif %}
 
     <script>
-        function submitForm(event, form, loadInNewWindow) {
-            event.preventDefault();
+        function submitForm(e, form) {
+            if (e.preventDefault) { // IE8 and below do not support preventDefault
+                e.preventDefault();
+            }
 
-            if (loadInNewWindow) {
-                var newWindow = window.open(form.action + '&time=' + Date.now());
+            var now = Date.now ? Date.now() : (+(new Date())), // Date.now does not exist in < IE8
+                newWindow = window.open(form.action + '&time=' + now);
 
-                // when the new window loads, reload this page
-                newWindow.addEventListener('unload', function () {
+            setInterval(function () {
+                if (newWindow.closed) {
                     window.location.reload();
-                }, false);
-            } else {
-                form.submit();
-            }
+                }
+            }, 1000);
+
+            return false;
         }
     </script>
 
@@ -49,7 +51,8 @@
      # otherwise we try to close the window immediately.
      #}
     {% if showConfirmOnly %}
-    <p>{{ 'CoreAdminHome_OptingYouOut'|translate }}</p><script>window.close();</script>
+    <p>{{ 'CoreAdminHome_OptingYouOut'|translate }}</p>
+    <script>window.close();</script>
     <noscript>
     {% endif %}
 
@@ -68,11 +71,10 @@
     <br/><br/>
 
     {% if not showConfirmOnly %}
-    {% set loadInNewWindow = isSafari and trackVisits %}
-    <form method="post" action="?{{ queryParameters|url_encode|raw }}" {% if loadInNewWindow %}target="_blank"{% endif %}>
+    <form method="post" action="?module=CoreAdminHome&amp;action=optOut{% if language %}&amp;language={{ language }}{% endif %}&amp;setCookieInNewWindow=1" target="_blank">
         <input type="hidden" name="nonce" value="{{ nonce }}" />
         <input type="hidden" name="fuzz" value="{{ "now"|date }}" />
-        <input onclick="submitForm(event, this.form, {{ loadInNewWindow|default(0) }});" type="checkbox" id="trackVisits" name="trackVisits" {% if trackVisits %}checked="checked"{% endif %} />
+        <input onclick="submitForm(event, this.form);" type="checkbox" id="trackVisits" name="trackVisits" {% if trackVisits %}checked="checked"{% endif %} />
         <label for="trackVisits"><strong>
         {% if trackVisits %}
             {{ 'CoreAdminHome_YouAreOptedIn'|translate }} {{ 'CoreAdminHome_ClickHereToOptOut'|translate }}
diff --git a/plugins/CoreAdminHome/tests/Integration/Commands/OptimizeArchiveTablesTest.php b/plugins/CoreAdminHome/tests/Integration/Commands/OptimizeArchiveTablesTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2fe67b98f2d430d7894bde8cb1d20dbbb5ced189
--- /dev/null
+++ b/plugins/CoreAdminHome/tests/Integration/Commands/OptimizeArchiveTablesTest.php
@@ -0,0 +1,92 @@
+<?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\Plugins\CoreAdminHome\tests\Integration\Commands;
+
+use Piwik\DataAccess\ArchiveTableCreator;
+use Piwik\Date;
+use Piwik\Tests\Framework\TestCase\ConsoleCommandTestCase;
+
+
+/**
+ * @group Core
+ */
+class OptimizeArchiveTablesTest extends ConsoleCommandTestCase
+{
+    public static function setUpBeforeClass()
+    {
+        parent::setUpBeforeClass();
+
+        ArchiveTableCreator::getNumericTable(Date::factory('2015-01-01'));
+        ArchiveTableCreator::getNumericTable(Date::factory('2015-02-02'));
+        ArchiveTableCreator::getNumericTable(Date::factory('2015-03-03'));
+    }
+
+    /**
+     * @dataProvider getDatesToTest
+     */
+    public function test_Command_OptimizesCorrectTables($dates, $expectedOptimizedTableDates)
+    {
+        $code = $this->applicationTester->run(array(
+            'command' => 'database:optimize-archive-tables',
+            'dates' => $dates,
+            '--dry-run' => true,
+        ));
+
+        $this->assertEquals(0, $code, $this->getCommandDisplayOutputErrorMessage());
+
+        $output = $this->applicationTester->getDisplay();
+
+        preg_match_all('/Optimizing table \'([^\']+)\'/', $output, $matches);
+        $tablesOptimized = $matches[1];
+
+        $expectedOptimizedTables = array();
+        foreach ($expectedOptimizedTableDates as $date) {
+            $expectedOptimizedTables[] = 'archive_numeric_' . $date;
+            $expectedOptimizedTables[] = 'archive_blob_' . $date;
+        }
+
+        $this->assertEquals($expectedOptimizedTables, $tablesOptimized);
+    }
+
+    public function getDatesToTest()
+    {
+        return array(
+            array(
+                array('all'),
+                array('2015_01', '2015_02', '2015_03'),
+            ),
+
+            array(
+                array('now'),
+                array(date('Y_m')),
+            ),
+
+            array(
+                array('2015-01-01', '2015-02-03', '2014-01-01', '2013-05-12', '2015-05-05'),
+                array('2015_01', '2015_02', '2014_01', '2013_05', '2015_05'),
+            ),
+
+            array(
+                array('last1'),
+                array(Date::factory('now')->subMonth(1)->toString('Y_m')),
+            ),
+
+            array(
+                array('last5'),
+                array(
+                    Date::factory('now')->subMonth(1)->toString('Y_m'),
+                    Date::factory('now')->subMonth(2)->toString('Y_m'),
+                    Date::factory('now')->subMonth(3)->toString('Y_m'),
+                    Date::factory('now')->subMonth(4)->toString('Y_m'),
+                    Date::factory('now')->subMonth(5)->toString('Y_m'),
+                ),
+            ),
+        );
+    }
+}
\ No newline at end of file
diff --git a/plugins/CoreConsole/Commands/CoreArchiver.php b/plugins/CoreConsole/Commands/CoreArchiver.php
index 40fc7d4c71f2cd183d1e431b2213af7a545e8091..7f1eb6107d2f590124c3d3bf37f2eb818c84075a 100644
--- a/plugins/CoreConsole/Commands/CoreArchiver.php
+++ b/plugins/CoreConsole/Commands/CoreArchiver.php
@@ -100,7 +100,7 @@ class CoreArchiver extends ConsoleCommand
         $command->addOption('force-idsites', null, InputOption::VALUE_OPTIONAL,
             'If specified, archiving will be processed only for these Sites Ids (comma separated)');
         $command->addOption('force-periods', null, InputOption::VALUE_OPTIONAL,
-            "If specified, archiving will be processed only for these Periods (comma separated eg. day,week,month)");
+            "If specified, archiving will be processed only for these Periods (comma separated eg. day,week,month,year,range)");
         $command->addOption('force-date-last-n', null, InputOption::VALUE_REQUIRED,
             "This script calls the API with period=lastN. You can force the N in lastN by specifying this value.");
         $command->addOption('force-date-range', null, InputOption::VALUE_OPTIONAL,
diff --git a/plugins/CoreHome/Columns/UserId.php b/plugins/CoreHome/Columns/UserId.php
index d4c438c47a35ab0c0a4d39a0bf02307348362b21..bbe7e44c8ffa7aa0691f9fbcb32100d0683a8e83 100644
--- a/plugins/CoreHome/Columns/UserId.php
+++ b/plugins/CoreHome/Columns/UserId.php
@@ -12,7 +12,9 @@ use Piwik\Cache;
 use Piwik\DataTable;
 use Piwik\DataTable\Map;
 use Piwik\Period\Range;
+use Piwik\Piwik;
 use Piwik\Plugin\Dimension\VisitDimension;
+use Piwik\Plugin\Segment;
 use Piwik\Plugins\VisitsSummary\API as VisitsSummaryApi;
 use Piwik\Tracker\Request;
 use Piwik\Tracker\Visitor;
@@ -33,6 +35,19 @@ class UserId extends VisitDimension
      */
     protected $columnType = 'VARCHAR(200) NULL';
 
+    protected function configureSegments()
+    {
+        $segment = new Segment();
+        $segment->setType('dimension');
+        $segment->setSegment('userId');
+        $segment->setCategory(Piwik::translate('General_Visit'));
+        $segment->setName('General_UserId');
+        $segment->setAcceptedValues('any non empty unique string identifying the user (such as an email address or a username).');
+        $segment->setSqlSegment('log_visit.user_id');
+        $segment->setRequiresAtLeastViewAccess(true);
+        $this->addSegment($segment);
+    }
+
     /**
      * @param Request $request
      * @param Visitor $visitor
diff --git a/plugins/CoreHome/Columns/VisitId.php b/plugins/CoreHome/Columns/VisitId.php
new file mode 100644
index 0000000000000000000000000000000000000000..9add50888a0e7bab8763b87397cc8cb30e650974
--- /dev/null
+++ b/plugins/CoreHome/Columns/VisitId.php
@@ -0,0 +1,35 @@
+<?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\Plugins\CoreHome\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\Dimension\VisitDimension;
+use Piwik\Plugin\Segment;
+
+/**
+ * Dimension for the log_visit.idvisit column. This column is added in the CREATE TABLE
+ * statement, so this dimension exists only to configure a segment.
+ */
+class VisitId extends VisitDimension
+{
+    protected function configureSegments()
+    {
+        parent::configureSegments();
+
+        $segment = new Segment();
+        $segment->setType('dimension');
+        $segment->setCategory(Piwik::translate('General_Visit'));
+        $segment->setName(Piwik::translate('General_Visit') . " ID");
+        $segment->setSegment('visitId');
+        $segment->setAcceptedValues('Any integer.');
+        $segment->setSqlSegment('log_visit.idvisit');
+        $segment->setRequiresAtLeastViewAccess(true);
+        $this->addSegment($segment);
+    }
+}
\ No newline at end of file
diff --git a/plugins/CoreHome/Columns/VisitIp.php b/plugins/CoreHome/Columns/VisitIp.php
new file mode 100644
index 0000000000000000000000000000000000000000..6dd2e5d6b983f43aeb354950e189c3f2adea9afe
--- /dev/null
+++ b/plugins/CoreHome/Columns/VisitIp.php
@@ -0,0 +1,36 @@
+<?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\Plugins\CoreHome\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\Dimension\VisitDimension;
+use Piwik\Plugin\Segment;
+
+/**
+ * Dimension for the log_visit.location_ip column. This column is added in the CREATE TABLE
+ * statement, so this dimension exists only to configure a segment.
+ */
+class VisitIp extends VisitDimension
+{
+    protected function configureSegments()
+    {
+        parent::configureSegments();
+
+        $segment = new Segment();
+        $segment->setType('metric');
+        $segment->setCategory(Piwik::translate('General_Visit'));
+        $segment->setName('General_VisitorIP');
+        $segment->setSegment('visitIp');
+        $segment->setAcceptedValues('13.54.122.1. </code>Select IP ranges with notation: <code>visitIp>13.54.122.0;visitIp<13.54.122.255');
+        $segment->setSqlSegment('log_visit.location_ip');
+        $segment->setSqlFilterValue(array('Piwik\Network\IPUtils', 'stringToBinaryIP'));
+        $segment->setRequiresAtLeastViewAccess(true);
+        $this->addSegment($segment);
+    }
+}
diff --git a/plugins/CoreHome/Columns/VisitorId.php b/plugins/CoreHome/Columns/VisitorId.php
new file mode 100644
index 0000000000000000000000000000000000000000..ce797ae57a045a5d8b60d33a7bed20485367234c
--- /dev/null
+++ b/plugins/CoreHome/Columns/VisitorId.php
@@ -0,0 +1,36 @@
+<?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\Plugins\CoreHome\Columns;
+
+use Piwik\Piwik;
+use Piwik\Plugin\Dimension\VisitDimension;
+use Piwik\Plugin\Segment;
+
+/**
+ * Dimension for the log_visit.idvisitor column. This column is added in the CREATE TABLE
+ * statement, so this dimension exists only to configure a segment.
+ */
+class VisitorId extends VisitDimension
+{
+    protected function configureSegments()
+    {
+        parent::configureSegments();
+
+        $segment = new Segment();
+        $segment->setType('dimension');
+        $segment->setCategory(Piwik::translate('General_Visit'));
+        $segment->setName('General_VisitorID');
+        $segment->setSegment('visitorId');
+        $segment->setAcceptedValues('34c31e04394bdc63 - any 16 Hexadecimal chars ID, which can be fetched using the Tracking API function getVisitorId()');
+        $segment->setSqlSegment('log_visit.idvisitor');
+        $segment->setSqlFilterValue(array('Piwik\Common', 'convertVisitorIdToBin'));
+        $segment->setRequiresAtLeastViewAccess(true);
+        $this->addSegment($segment);
+    }
+}
diff --git a/plugins/CoreHome/CoreHome.php b/plugins/CoreHome/CoreHome.php
index f28a2c7f8e0a63ab26e55b8de97295650b132099..45a3dde104b5323ff886abc060b1c41b60be0451 100644
--- a/plugins/CoreHome/CoreHome.php
+++ b/plugins/CoreHome/CoreHome.php
@@ -14,9 +14,9 @@ namespace Piwik\Plugins\CoreHome;
 class CoreHome extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getStylesheetFiles'        => 'getStylesheetFiles',
diff --git a/plugins/CoreHome/angularjs/enrichedheadline/enrichedheadline.directive.html b/plugins/CoreHome/angularjs/enrichedheadline/enrichedheadline.directive.html
index 279972330c9ba00862d772383846a55eee23746c..9bbdc8f8f46fb881217bfe52a01faad74043bd3e 100644
--- a/plugins/CoreHome/angularjs/enrichedheadline/enrichedheadline.directive.html
+++ b/plugins/CoreHome/angularjs/enrichedheadline/enrichedheadline.directive.html
@@ -1,6 +1,6 @@
 <div class="enrichedHeadline"
     ng-mouseenter="view.showIcons=true" ng-mouseleave="view.showIcons=false">
-    <span ng-show="!editUrl" class="title" ng-transclude></span>
+    <div ng-show="!editUrl" class="title" ng-transclude></div>
     <a ng-show="editUrl" class="title" href="{{ editUrl }}"
        title="{{ 'CoreHome_ClickToEditX'|translate:featureName }}"
        ng-transclude></a>
diff --git a/plugins/CoreHome/angularjs/enrichedheadline/enrichedheadline.directive.less b/plugins/CoreHome/angularjs/enrichedheadline/enrichedheadline.directive.less
index d6a78db26f0af83476fd0a20ad2f4d980949379c..054c0bdba0024f8e90dd9888d8addbf886876639 100644
--- a/plugins/CoreHome/angularjs/enrichedheadline/enrichedheadline.directive.less
+++ b/plugins/CoreHome/angularjs/enrichedheadline/enrichedheadline.directive.less
@@ -11,6 +11,7 @@
 
     .title {
         color: @color-black-piwik;
+        display:inline-block;
     }
 
     .inlineHelp {
diff --git a/plugins/CoreHome/javascripts/broadcast.js b/plugins/CoreHome/javascripts/broadcast.js
index 51b2a8a64d7d7d6b3c789c7da9bb2d6e25568214..de34b45a900e48af902b277634b944ed5ae01832 100644
--- a/plugins/CoreHome/javascripts/broadcast.js
+++ b/plugins/CoreHome/javascripts/broadcast.js
@@ -409,11 +409,23 @@ var broadcast = {
      */
     loadAjaxContent: function (urlAjax) {
         if (typeof piwikMenu !== 'undefined') {
-            piwikMenu.activateMenu(
-                broadcast.getParamValue('module', urlAjax),
-                broadcast.getParamValue('action', urlAjax),
-                broadcast.getParamValue('idGoal', urlAjax) || broadcast.getParamValue('idDashboard', urlAjax)
-            );
+            // we have to use a $timeout since menu groups are displayed using an angular directive, and on initial
+            // page load, the dropdown will not be completely rendered at this point. using 2 $timeouts (to push
+            // the menu activation logic to the end of the event queue twice), seems to work.
+            angular.element(document).injector().invoke(function ($timeout) {
+                $timeout(function () {
+                    $timeout(function () {
+                        piwikMenu.activateMenu(
+                            broadcast.getParamValue('module', urlAjax),
+                            broadcast.getParamValue('action', urlAjax),
+                            {
+                                idGoal: broadcast.getParamValue('idGoal', urlAjax),
+                                idDashboard: broadcast.getParamValue('idDashboard', urlAjax)
+                            }
+                        );
+                    });
+                });
+            });
         }
 
         if(broadcast.getParamValue('module', urlAjax) == 'API') {
diff --git a/plugins/CoreHome/javascripts/menu.js b/plugins/CoreHome/javascripts/menu.js
index 85e25f2334b35d9cb2f5230db3fa2a7dc892c585..2f5e16c827fb57e147ee4e5915c80b0658a2b665 100644
--- a/plugins/CoreHome/javascripts/menu.js
+++ b/plugins/CoreHome/javascripts/menu.js
@@ -53,53 +53,41 @@ menu.prototype =
         this.menuNode.find("li:has(ul),li#Searchmenu").hover(this.overMainLI, this.outMainLI);
         this.menuNode.find("li:has(ul),li#Searchmenu").focusin(this.overMainLI);
 
-        // add id to all li menu to support menu identification.
-        // for all sub menu we want to have a unique id based on their module and action
-        // for main menu we want to add just the module as its id.
-        this.menuNode.find('li').each(function () {
-            var link = $(this).find('a');
-            if (!link) {
-                return;
-            }
-            var href = link.attr('href');
-            if (!href) {
-                return;
-            }
-            var url = href.substr(1);
-
-            var module = broadcast.getValueFromUrl('module', url);
-            var action = broadcast.getValueFromUrl('action', url);
-
-            var moduleId = broadcast.getValueFromUrl("idGoal", url) || broadcast.getValueFromUrl("idDashboard", url);
-            var main_menu = $(this).parent().hasClass('Menu-tabList') ? true : false;
-            if (main_menu) {
-                $(this).attr({id: module});
-            }
-            // if there's a idGoal or idDashboard, use this in the ID
-            else if (moduleId != '') {
-                $(this).attr({id: module + '_' + action + '_' + moduleId});
-            }
-            else {
-                $(this).attr({id: module + '_' + action});
-            }
-        });
-
         this.menuNode.find('a.menuItem').click(this.onItemClick);
 
         menu.prototype.adaptSubMenuHeight();
     },
 
-    activateMenu: function (module, action, id) {
+    activateMenu: function (module, action, params) {
+        params = params || {};
+        params.module = module;
+        params.action = action;
+
         this.menuNode.find('li').removeClass('sfHover').removeClass('sfActive');
-        var $li = this.getSubmenuID(module, id, action);
-        var mainLi = $("#" + module);
-        if (!mainLi.length) {
-            mainLi = $li.parents('li');
-        }
+        var $activeLink = this.menuNode.find('a').filter(function () {
+            var url = $(this).attr('href');
+            if (!url) {
+                return false;
+            }
 
-        mainLi.addClass('sfActive').addClass('sfHover');
+            for (var key in params) {
+                if (!params.hasOwnProperty(key)
+                    || !params[key]
+                ) {
+                    continue;
+                }
+
+                var actual = broadcast.getValueFromHash(key, url);
+                if (actual != params[key]) {
+                    return false;
+                }
+            }
+
+            return true;
+        });
 
-        $li.addClass('sfHover');
+        $activeLink.closest('li').addClass('sfHover');
+        $activeLink.closest('li.menuTab').addClass('sfActive').addClass('sfHover');
     },
 
     // getting the right li is a little tricky since goals uses idGoal, and overview is index.
diff --git a/plugins/CoreHome/lang/de.json b/plugins/CoreHome/lang/de.json
index 78c8cb02e3e0c5db7da69e005ef57ee7565ae3f5..242254d453dcb5a291f9f2fa34ad7e93c5ef1f85 100644
--- a/plugins/CoreHome/lang/de.json
+++ b/plugins/CoreHome/lang/de.json
@@ -22,7 +22,7 @@
         "InjectedHostEmailBody": "Hallo, ich habe gerade versucht Piwik aufzurufen und erhielt eine Warnung, dass der Hostname unbekannt ist.",
         "InjectedHostEmailSubject": "Piwik wurde mit einem unbekannten Hostnamen aufgerufen: %s",
         "InjectedHostNonSuperUserWarning": "%1$sHier klicken um Piwik sicher zu betreten%2$s und die Warnung zu entfernen. Zusätzlich können Sie den Piwik Administrator kontaktieren und ihn auf dieses Problem hinweisen (%3$sHier klicken um eine E-Mail zu senden%4$s).",
-        "InjectedHostSuperUserWarning": "Piwik könnte falsch konfiguriert sein (zum Beispiel wenn Piwik vor kurzem auf einen neuen Server oder eine neue URL umgezogen ist). Sie können entweder %1$shier klicken und %2$s als gültigen Hostnamen (wenn Sie ihm vertrauen) hinzufügen%3$s, oder %4$shier klicken um Piwik unter %5$s sicher zu betreten%6$s",
+        "InjectedHostSuperUserWarning": "Piwik könnte falsch konfiguriert sein (zum Beispiel wenn Piwik vor kurzem auf einen neuen Server oder eine neue URL umgezogen ist). Sie können entweder %1$shier klicken und %2$s als gültigen Hostnamen hinzufügen (wenn Sie ihm vertrauen)%3$s, oder %4$shier klicken um Piwik unter %5$s sicher zu betreten%6$s",
         "InjectedHostWarningIntro": "Sie betreten Piwik aktuell von %1$s, allerdings wurde Piwik so konfiguriert, dass es unter dieser Adresse läuft: %2$s.",
         "JavascriptDisabled": "JavaScript muss aktiviert sein, um die Standardansicht von Piwik zu benutzen.<br\/>Es scheint jedoch so, als wäre JavaScript bei Ihnen deaktiviert bzw. würde nicht von Ihrem Browser unterstützt.<br \/>Um die Standardansicht zu benutzen, aktivieren Sie JavaScript in Ihren Browseroptionen und %1$sversuchen Sie es erneut%2$s.<br \/>",
         "LongMonthFormat": "%longYear%, %longMonth%",
diff --git a/plugins/CoreHome/lang/gl.json b/plugins/CoreHome/lang/gl.json
index d3fc1e2057563e90377503cf5e8edee3ce006481..595d0684b569d565df996c81f5804c6ad0e07b9a 100644
--- a/plugins/CoreHome/lang/gl.json
+++ b/plugins/CoreHome/lang/gl.json
@@ -2,10 +2,6 @@
     "CoreHome": {
         "CategoryNoData": "Non hai datos nesta categoría. Intente \"Incluir todos os datos\".",
         "PageOf": "%1$s de %2$s",
-        "PeriodDay": "Día",
-        "PeriodMonth": "Mes",
-        "PeriodWeek": "Semana",
-        "PeriodYear": "Ano",
         "ShowJSCode": "Ver o código javascript para insertar"
     }
 }
\ No newline at end of file
diff --git a/plugins/CoreHome/lang/sk.json b/plugins/CoreHome/lang/sk.json
index 5ae8ec23c1a626dd92c2a73ba0f1a64d70ae76b7..8afc1bb7e4ca4eaf72082a597df8b2d8bfbe4e29 100644
--- a/plugins/CoreHome/lang/sk.json
+++ b/plugins/CoreHome/lang/sk.json
@@ -56,4 +56,4 @@
         "UndoPivotBySubtable": "Tento report bol pivotovaný %s Naspäť pivot",
         "PivotBySubtable": "Tento report nebol pivotovaný %s Pivotovať podľa %s"
     }
-}
+}
\ No newline at end of file
diff --git a/plugins/CoreHome/templates/_dataTableFooter.twig b/plugins/CoreHome/templates/_dataTableFooter.twig
index 39ad2b0da0559a6b7c99c7b5bc4d36b383aef50f..7401baee10ca70e590dc20bc735d4221c19e0fcd 100644
--- a/plugins/CoreHome/templates/_dataTableFooter.twig
+++ b/plugins/CoreHome/templates/_dataTableFooter.twig
@@ -31,7 +31,7 @@
                 {% for footerIconGroup in footerIcons %}
                     <div class="tableIconsGroup">
                     <span class="{{ footerIconGroup.class }}">
-                    {% for footerIcon in footerIconGroup.buttons %}
+                    {% for footerIcon in footerIconGroup.buttons if footerIcon.icon %}
                         {% set isActiveEcommerceView = clientSideParameters.abandonedCarts is defined and
                                 ((footerIcon.id == 'ecommerceOrder' and clientSideParameters.abandonedCarts == 0) or
                                  (footerIcon.id == 'ecommerceAbandonedCart' and clientSideParameters.abandonedCarts == 1)) %}
diff --git a/plugins/CoreHome/templates/_menu.twig b/plugins/CoreHome/templates/_menu.twig
index 6baf228bf2a9d21eb1d6f4c8215cd17571ead9f5..8ec928eb4e5e3ded18cb82af250efda71f8a6000 100644
--- a/plugins/CoreHome/templates/_menu.twig
+++ b/plugins/CoreHome/templates/_menu.twig
@@ -12,7 +12,7 @@
     <li>
         <div piwik-menudropdown show-search="true" menu-title="{{ name|translate|e('html_attr') }}">
             {% for item in group.getItems %}
-                <a class="item"
+                <a class="item menuItem"
                    href='#{{ item.url|urlRewriteWithParameters|slice(1) }}'
                    {% if item.tooltip %}title="{{ item.tooltip|e('html_attr') }}"{% endif %}>
                     {{ item.name|translate }}
@@ -38,7 +38,7 @@
 
     <ul class="Menu-tabList">
         {% for level1,level2 in menu %}
-            <li id="{% if level2._url is defined %}{{ _self.getId(level2._url) }}{% endif %}">
+            <li id="{% if level2._url is defined %}{{ _self.getId(level2._url) }}{% endif %}" class="menuTab">
                 <a class="menuItem" {% if level2._url is defined %}href="#{{ _self.getFirstUrl(level2._url) }}"{% endif %}>
                     {{ level1|translate }}
                    <span class="hidden">
diff --git a/plugins/CoreHome/templates/getMultiRowEvolutionPopover.twig b/plugins/CoreHome/templates/getMultiRowEvolutionPopover.twig
index 6159dad5bef23c088353f8ca53f0dc665168bcdc..ec6d8b82c560ddd5f17568a04f0d338e4407567e 100644
--- a/plugins/CoreHome/templates/getMultiRowEvolutionPopover.twig
+++ b/plugins/CoreHome/templates/getMultiRowEvolutionPopover.twig
@@ -23,7 +23,7 @@
                 </tr>
             {% endfor %}
         </table>
-        <a href="#" class="rowevolution-startmulti btn btn-flat">» {{ 'RowEvolution_PickAnotherRow'|translate }}</a>
+        <a href="#" class="rowevolution-startmulti">» {{ 'RowEvolution_PickAnotherRow'|translate }}</a>
     </div>
     {% if availableMetrics|length > 1 %}
         <div class="metric-selectbox">
diff --git a/plugins/CoreHome/templates/getRowEvolutionPopover.twig b/plugins/CoreHome/templates/getRowEvolutionPopover.twig
index 133c94e58b90cde096961520900c00e59cff72fa..8b95dd680f2fc813f1a823e9a6d54321c2ae8e36 100644
--- a/plugins/CoreHome/templates/getRowEvolutionPopover.twig
+++ b/plugins/CoreHome/templates/getRowEvolutionPopover.twig
@@ -34,6 +34,6 @@
         <div class="alert alert-info">
             {{ 'RowEvolution_CompareDocumentation'|translate|raw }}
         </div>
-        <a href="#" class="rowevolution-startmulti btn btn-flat">» {{ 'RowEvolution_PickARow'|translate }}</a>
+        <a href="#" class="rowevolution-startmulti">» {{ 'RowEvolution_PickARow'|translate }}</a>
     </div>
 </div>
diff --git a/plugins/CorePluginsAdmin/CorePluginsAdmin.php b/plugins/CorePluginsAdmin/CorePluginsAdmin.php
index f51e2147859ba1bce6694c6f69fa0a29d600328e..6e03b3b46aa8a6f610762e310467af854325ff24 100644
--- a/plugins/CorePluginsAdmin/CorePluginsAdmin.php
+++ b/plugins/CorePluginsAdmin/CorePluginsAdmin.php
@@ -14,9 +14,9 @@ use Piwik\Plugin;
 class CorePluginsAdmin extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getJavaScriptFiles'        => 'getJsFiles',
diff --git a/plugins/CorePluginsAdmin/lang/cs.json b/plugins/CorePluginsAdmin/lang/cs.json
index 723d752bf543ab758c48538764b9996f3c4f3fbc..fa4527c3532d9429248a2e294e2a00578825c7ad 100644
--- a/plugins/CorePluginsAdmin/lang/cs.json
+++ b/plugins/CorePluginsAdmin/lang/cs.json
@@ -38,6 +38,10 @@
         "LastCommitTime": "(Poslední změna %s)",
         "LastUpdated": "Naposledy aktualizován",
         "LicenseHomepage": "Licencovat domovskou stránku",
+        "LikeThisPlugin": "Líbí se vám tento zásuvný modul?",
+        "ConsiderDonating": "Zvažte dar",
+        "CommunityContributedPlugin": "Toto je zásuvný modul poskytnutý komunitou, který je zadarmo.",
+        "ConsiderDonatingCreatorOf": "Zvažte dar pro tvůrce %s",
         "PluginsExtendPiwik": "Zásuvné moduly rozšiřují funkce Piwiku.",
         "OncePluginIsInstalledYouMayActivateHere": "Po instalaci zásuvného modulu jej můžete povolit nebo zakázat zde.",
         "Marketplace": "Obchod",
diff --git a/plugins/CorePluginsAdmin/lang/de.json b/plugins/CorePluginsAdmin/lang/de.json
index 0bd5c45146e74e271fb673e3dee8f6567636884a..d8b68512b5cd7346bcd8a2d7ab07957a2e3e7717 100644
--- a/plugins/CorePluginsAdmin/lang/de.json
+++ b/plugins/CorePluginsAdmin/lang/de.json
@@ -38,6 +38,10 @@
         "LastCommitTime": "(letzter Commit %s)",
         "LastUpdated": "Letzte Aktualisierung",
         "LicenseHomepage": "Lizenz-Website",
+        "LikeThisPlugin": "Finden Sie dieses Plugin nützlich?",
+        "ConsiderDonating": "Spenden Sie",
+        "CommunityContributedPlugin": "Dies ist ein Plugin dass aus der Community kostenlos zur Verfügung gestellt wird.",
+        "ConsiderDonatingCreatorOf": "Bitte ziehen Sie es in Erwägung dem Ersteller von %s etwas zu spenden.",
         "PluginsExtendPiwik": "Plugins erweitern die Funktionalität von Piwik.",
         "OncePluginIsInstalledYouMayActivateHere": "Sobald ein Plugin installiert wurde, können Sie es hier aktivieren bzw. deaktivieren.",
         "Marketplace": "Marketplace",
diff --git a/plugins/CorePluginsAdmin/lang/el.json b/plugins/CorePluginsAdmin/lang/el.json
index 558391dc4e76dafe4f1b218555002969772dd0be..6de0af46c95742c8a7aa28a9c4766c51f3957fc1 100644
--- a/plugins/CorePluginsAdmin/lang/el.json
+++ b/plugins/CorePluginsAdmin/lang/el.json
@@ -38,6 +38,10 @@
         "LastCommitTime": "(τελευταία οριστικοποίηση %s)",
         "LastUpdated": "Τελευταία Ενημέρωση",
         "LicenseHomepage": "Ιστοσελίδα Άδειας",
+        "LikeThisPlugin": "Σας αρέσει το πρόσθετο αυτό;",
+        "ConsiderDonating": "Σκεφτείτε να δωρήσετε",
+        "CommunityContributedPlugin": "Αυτό είναι ένα πρόσθετο για το οποίο συνεισφέρει η κοινότητα και το λαμβάνετε δωρεάν.",
+        "ConsiderDonatingCreatorOf": "Παρακαλούμε σκεφτείτε να δωρήσετε στον δημιουργό του %s",
         "PluginsExtendPiwik": "Τα πρόσθετα (Plugins) επεκτείνουν και διευρύνουν την λειτουργικότητα του Piwik.",
         "OncePluginIsInstalledYouMayActivateHere": "Αφού εγκατασταθεί ένα πρόσθετο, μπορείτε να το ενεργοποιήσετε ή να το απενεργοποιήσετε εδώ.",
         "Marketplace": "Αγορά",
diff --git a/plugins/CorePluginsAdmin/lang/fr.json b/plugins/CorePluginsAdmin/lang/fr.json
index 40ee460f11524b893661a47f41246cc1c91a6b2b..b77d4977193eef4ff355c0c97d5f1cf205019181 100644
--- a/plugins/CorePluginsAdmin/lang/fr.json
+++ b/plugins/CorePluginsAdmin/lang/fr.json
@@ -38,6 +38,10 @@
         "LastCommitTime": "(dernier archivage %s)",
         "LastUpdated": "A jour",
         "LicenseHomepage": "Page de la licence",
+        "LikeThisPlugin": "Vous aimez ce composant?",
+        "ConsiderDonating": "Pensez à effectuer une donation.",
+        "CommunityContributedPlugin": "Ceci est un composant de la communauté, mis à votre disposition gratuitement.",
+        "ConsiderDonatingCreatorOf": "Pensez à effectuer une donation au créateur de %s",
         "PluginsExtendPiwik": "Les plugins étendent et ajoutent des fonctionnalités à Piwik.",
         "OncePluginIsInstalledYouMayActivateHere": "Une fois un plugin installé, vous pouvez l'activer ou le désactiver ici.",
         "Marketplace": "Marché",
diff --git a/plugins/CorePluginsAdmin/lang/hi.json b/plugins/CorePluginsAdmin/lang/hi.json
index 25a07433389a049d6a2258c6a90ebd15a28b3205..48e1d13d8eb0de057523d801fb761f9381e4f1c9 100644
--- a/plugins/CorePluginsAdmin/lang/hi.json
+++ b/plugins/CorePluginsAdmin/lang/hi.json
@@ -26,6 +26,7 @@
         "PluginsManagement": "प्लगइन्स प्रबंधन",
         "PluginVersionInfo": "%1$s से %2$s",
         "Status": "स्थिति",
+        "Support": "सहयोग",
         "Theme": "विषय",
         "Themes": "विषय",
         "ThemesDescription": "थीम्स, Piwik यूजर इंटरफेस के स्वरूप को बदल सकते हैं और अपने विश्लेषण रिपोर्टों के आनंद के लिए एक पूरी तरह से नए दृश्य का अनुभव प्रदान करते हैं.",
diff --git a/plugins/CorePluginsAdmin/lang/it.json b/plugins/CorePluginsAdmin/lang/it.json
index efa1a9cf5a51b6c87293c447f743468ab0035169..940cab2c178cc61f6edf5e916437789367869ba9 100644
--- a/plugins/CorePluginsAdmin/lang/it.json
+++ b/plugins/CorePluginsAdmin/lang/it.json
@@ -38,6 +38,10 @@
         "LastCommitTime": "ultima consegna %s",
         "LastUpdated": "Ultimo aggiornamento",
         "LicenseHomepage": "Homepage della Licenza",
+        "LikeThisPlugin": "Ti piace questo plugin?",
+        "ConsiderDonating": "Considera una donazione",
+        "CommunityContributedPlugin": "Questo è un plugin finanziato dalla comunità che ti viene fornito gratis",
+        "ConsiderDonatingCreatorOf": "Considera di fare una donazione al creatore di %s",
         "PluginsExtendPiwik": "I plugins estendono e ampliano la funzionalità di Piwik.",
         "OncePluginIsInstalledYouMayActivateHere": "Una volta installato un plugin, qui puoi attivarlo o disattivarlo.",
         "Marketplace": "Marketplace",
diff --git a/plugins/CorePluginsAdmin/lang/sr.json b/plugins/CorePluginsAdmin/lang/sr.json
index d667d2d788d77b9068cfd646f774647a8fe6f566..472bc60e1ffae66dd6f3b2f7a4ba541f9e82dfa9 100644
--- a/plugins/CorePluginsAdmin/lang/sr.json
+++ b/plugins/CorePluginsAdmin/lang/sr.json
@@ -38,6 +38,10 @@
         "LastCommitTime": "(poslednja promena %s)",
         "LastUpdated": "Poslednje ažuriranje",
         "LicenseHomepage": "Podaci o licenci",
+        "LikeThisPlugin": "Sviđa vam se ovaj dodatak?",
+        "ConsiderDonating": "Razmislite o donaciji",
+        "CommunityContributedPlugin": "Ovaj dodatak je stvorila zajednica i podarila vam ga besplatno.",
+        "ConsiderDonatingCreatorOf": "Molimo vas da razmislite o donaciji za %s",
         "PluginsExtendPiwik": "Dodaci proširuju funkcionalnost Piwik-a.",
         "OncePluginIsInstalledYouMayActivateHere": "Jednom instaliran dodatak se ovde može aktivirati ili deaktivirati.",
         "Marketplace": "Market",
diff --git a/plugins/CoreUpdater/Commands/Update.php b/plugins/CoreUpdater/Commands/Update.php
index 0f5566e3946a944026dd0e931585a5bbb70a914c..4b4d79e2879718258224c22381223231ff1a779b 100644
--- a/plugins/CoreUpdater/Commands/Update.php
+++ b/plugins/CoreUpdater/Commands/Update.php
@@ -312,6 +312,8 @@ class Update extends ConsoleCommand
                 $dimensions[] = $componentName;
             }
         }
+
+        sort($dimensions);
         return $dimensions;
     }
 
diff --git a/plugins/CoreUpdater/Controller.php b/plugins/CoreUpdater/Controller.php
index 47a06f226d77cd9cd032d194f88c9d0521808e4f..df52b296aaa46e00c9c2068c31a42846287dcd48 100644
--- a/plugins/CoreUpdater/Controller.php
+++ b/plugins/CoreUpdater/Controller.php
@@ -246,6 +246,8 @@ class Controller extends \Piwik\Plugin\Controller
         }
         Filesystem::deleteAllCacheOnUpdate();
 
+        sort($dimensionsToUpdate);
+
         $view->coreError = $this->coreError;
         $view->warningMessages = $this->warningMessages;
         $view->errorMessages = $this->errorMessages;
diff --git a/plugins/CoreUpdater/CoreUpdater.php b/plugins/CoreUpdater/CoreUpdater.php
index 8fc3f0d92f38f59769bb8f10e1a0f5f9c4d3e557..737017d0484f3bcb1ff33bd45f2abc63f1e95be3 100644
--- a/plugins/CoreUpdater/CoreUpdater.php
+++ b/plugins/CoreUpdater/CoreUpdater.php
@@ -26,9 +26,9 @@ use Piwik\Version;
 class CoreUpdater extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'Request.dispatchCoreAndPluginUpdatesScreen' => 'dispatch',
diff --git a/plugins/CoreUpdater/lang/cs.json b/plugins/CoreUpdater/lang/cs.json
index 3ae62a436efb78e065980c2e8c110580fb252bd5..056866b09b5f7df2eda7211407b953ed42647570 100644
--- a/plugins/CoreUpdater/lang/cs.json
+++ b/plugins/CoreUpdater/lang/cs.json
@@ -56,6 +56,8 @@
         "CloudHosting": "Hostování v Cloudu",
         "Updating": "Aktualizuji",
         "UpdateUsingHttpsFailed": "Stažení nejnovější verze Piwik pomocí zabezpečeného HTTPS připojení se nezdařilo kvůli následující chybě:",
+        "UpdateUsingHttpsFailedHelp": "Proč to selhalo? Stažení poslední verze Piwiku přes bezpečné HTTPS spojení mohlo selhat z mnoha důvodů, například kvůli chybě sítě, pomalému připojení, nebo špatné systémové konfiguraci. Mějte na vědomí, že to může rovněž znamenat, že váš server je cílem MITM útoku a někdo se pokouší podvrhnout aktualizaci škodlivou verzí Piwiku.",
+        "UpdateUsingHttpsFailedHelpWhatToDo": "Doporučuje se zkusit stažení pomocí zabezpečeného HTTPS spojení, protože brání MITM útokům.",
         "UsingHttps": "za použití zabezpečeného HTTPS připojení (doporučeno)",
         "UsingHttp": "za použití nezabezpečeného HTTP připojení",
         "UpgradeComplete": "Aktualizace je kompletní!",
diff --git a/plugins/CoreUpdater/lang/de.json b/plugins/CoreUpdater/lang/de.json
index 8932809f8c57ad53f6348125c34c2b54f8cc7ce1..cac12eb08d590ca5fef67af3114efa773716d2d7 100644
--- a/plugins/CoreUpdater/lang/de.json
+++ b/plugins/CoreUpdater/lang/de.json
@@ -59,7 +59,7 @@
         "UpdateUsingHttpsFailedHelp": "Warum hat das nicht funktioniert? Der Download der aktuellen Piwik Version (über eine sichere HTTPS Verbindung) kann aus verschiedenen Gründen misslingen, zum Beispiel wegen einem Netzwerkfehler, langsamer Internetverbindung oder falscher Systemkonfiguration. Beachten Sie, dass Ihr Server auch Ziel einer Man-in-the-Middle Attacke sein könnte und jemand versucht, das Update mit einer schadhaften Version von Piwik zu ersetzen.",
         "UpdateUsingHttpsFailedHelpWhatToDo": "Es ist empfohlen den Download erneut mit einer sicheren HTTPS-Verbindung zu versuchen, da dies MITM-Attacken verhindert.",
         "UsingHttps": "die sichere HTTPS Verbindung nützen (empfohlen)",
-        "UsingHttp": "die nicht sichere HTTP Verbindung nützen",
+        "UsingHttp": "die nicht sichere HTTP-Verbindung verwenden",
         "UpgradeComplete": "Aktualisierung abgeschlossen!",
         "UpgradePiwik": "Piwik aktualisieren",
         "VerifyingUnpackedFiles": "Die entpackten Dateien werden überprüft",
diff --git a/plugins/CoreVisualizations/CoreVisualizations.php b/plugins/CoreVisualizations/CoreVisualizations.php
index da8fbe9f9418aa36a34f7006348a5b03b3ff149b..9a5f88e7eccd718eb2919d96e51e73e6dd422e39 100644
--- a/plugins/CoreVisualizations/CoreVisualizations.php
+++ b/plugins/CoreVisualizations/CoreVisualizations.php
@@ -21,9 +21,9 @@ require_once PIWIK_INCLUDE_PATH . '/plugins/CoreVisualizations/JqplotDataGenerat
 class CoreVisualizations extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getStylesheetFiles'        => 'getStylesheetFiles',
diff --git a/plugins/CoreVisualizations/stylesheets/jqplot.css b/plugins/CoreVisualizations/stylesheets/jqplot.css
index 6ef4a5ce820abb27178548c969fabb0fb5044083..f074320c438b606e690175adc2af66c02f23a30b 100644
--- a/plugins/CoreVisualizations/stylesheets/jqplot.css
+++ b/plugins/CoreVisualizations/stylesheets/jqplot.css
@@ -80,6 +80,17 @@
     text-align: left;
 }
 
+#Piwik_Popover .rowevolution .alert-info {
+    margin-left: 0px;
+}
+
+a.rowevolution-startmulti {
+    color: #4183C4 !important;
+    font-size: 12px;
+    font-weight: bold;
+    text-decoration: none;
+}
+
 .rowevolution h2 {
     font-size: 16px;
     margin: 0;
diff --git a/plugins/CustomAlerts b/plugins/CustomAlerts
index 3ec4fe5b6e894096d6215734dd5e2cb750f364ce..3aa24d4543573fabeb4c34cfaff4c1c590af9b7b 160000
--- a/plugins/CustomAlerts
+++ b/plugins/CustomAlerts
@@ -1 +1 @@
-Subproject commit 3ec4fe5b6e894096d6215734dd5e2cb750f364ce
+Subproject commit 3aa24d4543573fabeb4c34cfaff4c1c590af9b7b
diff --git a/plugins/CustomVariables/Archiver.php b/plugins/CustomVariables/Archiver.php
index b613f65d02de89488e1c78e8864a1ea0cbc961b7..bc43cbc8ddfdf245ccc588d8f291cd0a9bb38474 100644
--- a/plugins/CustomVariables/Archiver.php
+++ b/plugins/CustomVariables/Archiver.php
@@ -66,7 +66,7 @@ class Archiver extends \Piwik\Plugin\Archiver
     {
         $this->dataArray = new DataArray();
 
-        $maxCustomVariables = CustomVariables::getMaxCustomVariables();
+        $maxCustomVariables = CustomVariables::getNumUsableCustomVariables();
         for ($i = 1; $i <= $maxCustomVariables; $i++) {
             $this->aggregateCustomVariable($i);
         }
diff --git a/plugins/CustomVariables/Commands/Info.php b/plugins/CustomVariables/Commands/Info.php
index bf300e357a25c19e87ad24b4cfcc70707555a297..e5dfce5d5b7360ad9fe60df41654c67faaa566f8 100644
--- a/plugins/CustomVariables/Commands/Info.php
+++ b/plugins/CustomVariables/Commands/Info.php
@@ -28,7 +28,7 @@ class Info extends ConsoleCommand
 
     protected function execute(InputInterface $input, OutputInterface $output)
     {
-        $maxVars = CustomVariables::getMaxCustomVariables();
+        $maxVars = CustomVariables::getNumUsableCustomVariables();
 
         if ($this->hasEverywhereSameAmountOfVariables()) {
             $this->writeSuccessMessage($output, array(
diff --git a/plugins/CustomVariables/CustomVariables.php b/plugins/CustomVariables/CustomVariables.php
index 64a7c9ea05a0dbb0a0210d76f76bf1ed8344bc50..b8a57ad6a65fd3152d2ab9d76b8295f6fbad8e57 100644
--- a/plugins/CustomVariables/CustomVariables.php
+++ b/plugins/CustomVariables/CustomVariables.php
@@ -16,9 +16,9 @@ use Piwik\Tracker;
 class CustomVariables extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'API.getSegmentDimensionMetadata' => 'getSegmentsMetadata',
@@ -40,7 +40,7 @@ class CustomVariables extends \Piwik\Plugin
     {
         $customVariables = array();
 
-        $maxCustomVariables = self::getMaxCustomVariables();
+        $maxCustomVariables = self::getNumUsableCustomVariables();
 
         for ($i = 1; $i <= $maxCustomVariables; $i++) {
             if (!empty($details['custom_var_k' . $i])) {
@@ -63,25 +63,41 @@ class CustomVariables extends \Piwik\Plugin
         return 200;
     }
 
-    public static function getMaxCustomVariables()
+    /**
+     * Returns the number of available custom variables that can be used.
+     *
+     * "Can be used" is identifed by the minimum number of available custom variables across all relevant tables. Eg
+     * if there are 6 custom variables installed in log_visit but only 5 in log_conversion, we consider only 5 custom
+     * variables as usable.
+     * @return int
+     */
+    public static function getNumUsableCustomVariables()
     {
         $cache    = Cache::getCacheGeneral();
-        $cacheKey = 'CustomVariables.MaxNumCustomVariables';
+        $cacheKey = 'CustomVariables.NumUsableCustomVariables';
 
         if (!array_key_exists($cacheKey, $cache)) {
 
-            $maxCustomVar = 0;
+            $minCustomVar = null;
 
             foreach (Model::getScopes() as $scope) {
                 $model = new Model($scope);
                 $highestIndex = $model->getHighestCustomVarIndex();
 
-                if ($highestIndex > $maxCustomVar) {
-                    $maxCustomVar = $highestIndex;
+                if (!isset($minCustomVar)) {
+                    $minCustomVar = $highestIndex;
                 }
+
+                if ($highestIndex < $minCustomVar) {
+                    $minCustomVar = $highestIndex;
+                }
+            }
+
+            if (!isset($minCustomVar)) {
+                $minCustomVar = 0;
             }
 
-            $cache[$cacheKey] = $maxCustomVar;
+            $cache[$cacheKey] = $minCustomVar;
             Cache::setCacheGeneral($cache);
         }
 
@@ -90,7 +106,7 @@ class CustomVariables extends \Piwik\Plugin
 
     public function getSegmentsMetadata(&$segments)
     {
-        $maxCustomVariables = self::getMaxCustomVariables();
+        $maxCustomVariables = self::getNumUsableCustomVariables();
 
         for ($i = 1; $i <= $maxCustomVariables; $i++) {
             $segments[] = array(
diff --git a/plugins/CustomVariables/Model.php b/plugins/CustomVariables/Model.php
index d9a0623b4083e0c9082d6e5538131dcc0d3d6985..9d98a352fa2683069bcf49378aecc56769d986db 100644
--- a/plugins/CustomVariables/Model.php
+++ b/plugins/CustomVariables/Model.php
@@ -18,6 +18,7 @@ class Model
     const SCOPE_PAGE = 'log_link_visit_action';
     const SCOPE_VISIT = 'log_visit';
     const SCOPE_CONVERSION = 'log_conversion';
+    const DEFAULT_CUSTOM_VAR_COUNT = 5;
 
     private $scope = null;
 
@@ -159,7 +160,7 @@ class Model
             $model = new Model($scope);
 
             try {
-                $maxCustomVars   = 5;
+                $maxCustomVars   = self::DEFAULT_CUSTOM_VAR_COUNT;
                 $customVarsToAdd = $maxCustomVars - $model->getCurrentNumCustomVars();
 
                 for ($index = 0; $index < $customVarsToAdd; $index++) {
diff --git a/plugins/CustomVariables/lang/cs.json b/plugins/CustomVariables/lang/cs.json
index 700f79e652fc9281be0541c577818e1ac148e92a..5a75dd2cd15d7f26ef22220bb436de8ff6a4b433 100644
--- a/plugins/CustomVariables/lang/cs.json
+++ b/plugins/CustomVariables/lang/cs.json
@@ -4,6 +4,7 @@
         "ColumnCustomVariableValue": "Hodnota vlastní proměnné",
         "CustomVariables": "Vlastní proměnné",
         "CustomVariablesReportDocumentation": "Toto hlášení obsahuje informace o vašich vlastních proměnných. Klikněte na proměnnou pro zobrazení distribuce hodnot. %s Pro více informací si přečtěte %sdokumentaci o vlastních proměnných na piwik.org%s",
+        "PluginDescription": "Vlastní proměnné jsou páry (jméno, hodnota), které můžete nastavit návštěvníkovi, nebo libovolné akci, pomocí javascriptového API. Piwik potom ohlásí, kolik návštěv, stránek, konverzí bylo pro každé z těchto jmen a hodnot. Prohlédněte si detailně tyto proměnné pro každého uživatele a akci v záznamu návštěvníků.<br \/>Vyžadováno, pokud chcete použít <a href=\"http:\/\/piwik.org\/docs\/ecommerce-analytics\/\">analýzu E-obchodu<\/a>!",
         "ScopePage": "rozsah stránky",
         "ScopeVisit": "rozsah návštěvy"
     }
diff --git a/plugins/CustomVariables/lang/it.json b/plugins/CustomVariables/lang/it.json
index 4db368f02999baba4e89b44ea947cea0f6b42e69..3162fc90272245d940a963aeec1ae77b4b13b3cf 100644
--- a/plugins/CustomVariables/lang/it.json
+++ b/plugins/CustomVariables/lang/it.json
@@ -1,11 +1,11 @@
 {
     "CustomVariables": {
-        "ColumnCustomVariableName": "Nomi Variabili Personalizzate",
-        "ColumnCustomVariableValue": "Valori Variabili Personalizzate",
-        "CustomVariables": "Variabili Personalizzate",
-        "CustomVariablesReportDocumentation": "Questo report contiene le informazioni sulle variabili personalizzate. Clicca su un nome di variabile per visualizzare la distribuzione dei valori. %s Per ulteriori informazioni sulle variabili personalizzate in generale, leggere il %sCustom Variabili documentazione su piwik.org %s",
+        "ColumnCustomVariableName": "Nome Variabile Personalizzata",
+        "ColumnCustomVariableValue": "Valore Variabile Personalizzata",
+        "CustomVariables": "Variabile Personalizzata",
+        "CustomVariablesReportDocumentation": "Questo report contiene le informazioni sulle variabili personalizzate. Clicca su un nome di variabile per visualizzarne la distribuzione dei valori. %s Per ulteriori informazioni sulle variabili personalizzate in generale, leggere la %sDocumentazione Variabili Personalizzatesu piwik.org %s",
         "PluginDescription": "Le variabili personalizzate sono coppie (nome, valore) che puoi assegnare ai visitatori o a una qualunque loro azione tramite API Javascript. Poi Piwik riporterà le visite, le pagine e le conversioni per questi nomi e valori. Guarda nel dettaglio le Variabili Personalizzate per ciascun utente nel Log Visitatori.<br>Necessario per utilizzare la funzione <a href=\"http:\/\/piwik.org\/docs\/ecommerce-analytics\/\">Statistiche Ecommerce<\/a>",
-        "ScopePage": "campo di applicazione pagina",
+        "ScopePage": "ambito pagina",
         "ScopeVisit": "ambito visita"
     }
 }
\ No newline at end of file
diff --git a/plugins/CustomVariables/lang/sr.json b/plugins/CustomVariables/lang/sr.json
index e7855e77aa63864acfec6a0c0f6c854925ad17b9..b740d6b41cc3f827b3d56de9fad8f77afbf855e2 100644
--- a/plugins/CustomVariables/lang/sr.json
+++ b/plugins/CustomVariables/lang/sr.json
@@ -4,6 +4,7 @@
         "ColumnCustomVariableValue": "Vrednost dodatnog parametra",
         "CustomVariables": "Dodatni parametri",
         "CustomVariablesReportDocumentation": "Ovaj izveštaj sadrži informacije o dodatnim parametrima. Kliknite na ime parametra kako biste videli distribuciju vrednosti. %s Za više informacija o dodatnim parametrima pogledajte %sCustom Variables na piwik.org%s",
+        "PluginDescription": "Dodatni parametri su uređeni parovi (naziv, vrednost) koje možete pomoću JavaScript API-ja da dodelite posetiocima ili bilo kojoj njihovoj akciji. Piwik će onda beležiti koliko ima poseta, stranica i konverzija za svaki od tih parova. Detalje možete videti u logu posetilaca. <br \/>Neophodno za <a href=\"http:\/\/piwik.org\/docs\/ecommerce-analytics\/\">E-commerce analitike<\/a>!",
         "ScopePage": "oblast strana",
         "ScopeVisit": "oblast poseta"
     }
diff --git a/plugins/CustomVariables/tests/Commands/SetNumberOfCustomVariablesTest.php b/plugins/CustomVariables/tests/Commands/SetNumberOfCustomVariablesTest.php
index e70c3515bbca1d6121e2ec3090d9e54fe20e3373..a17a0683a53e8891b23e06494c9942bdac49c2e1 100644
--- a/plugins/CustomVariables/tests/Commands/SetNumberOfCustomVariablesTest.php
+++ b/plugins/CustomVariables/tests/Commands/SetNumberOfCustomVariablesTest.php
@@ -65,7 +65,7 @@ class SetNumberOfCustomVariablesTest extends IntegrationTestCase
 
     public function testExecute_ShouldAddMaxCustomVars_IfNumberIsHigherThanActual()
     {
-        $this->assertEquals(5, CustomVariables::getMaxCustomVariables());
+        $this->assertEquals(5, CustomVariables::getNumUsableCustomVariables());
 
         $result = $this->executeCommand(6);
 
@@ -77,13 +77,13 @@ class SetNumberOfCustomVariablesTest extends IntegrationTestCase
         $this->assertContains('Added a variable in scope "Conversion" having the index 6', $result);
         $this->assertContains('Your Piwik is now configured for 6 custom variables.', $result);
 
-        $this->assertEquals(6, CustomVariables::getMaxCustomVariables());
+        $this->assertEquals(6, CustomVariables::getNumUsableCustomVariables());
     }
 
     public function testExecute_ShouldRemoveMaxCustomVars_IfNumberIsLessThanActual()
     {
         $this->executeCommand(6, true);
-        $this->assertEquals(6, CustomVariables::getMaxCustomVariables());
+        $this->assertEquals(6, CustomVariables::getNumUsableCustomVariables());
 
         $result = $this->executeCommand(5);
 
@@ -95,18 +95,18 @@ class SetNumberOfCustomVariablesTest extends IntegrationTestCase
         $this->assertContains('Removed a variable in scope "Conversion" having the index 6', $result);
         $this->assertContains('Your Piwik is now configured for 5 custom variables.', $result);
 
-        $this->assertEquals(5, CustomVariables::getMaxCustomVariables());
+        $this->assertEquals(5, CustomVariables::getNumUsableCustomVariables());
     }
 
     public function testExecute_AddMultiple_RemoveMultiple()
     {
-        $this->assertEquals(5, CustomVariables::getMaxCustomVariables());
+        $this->assertEquals(5, CustomVariables::getNumUsableCustomVariables());
 
         $this->executeCommand(9);
-        $this->assertEquals(9, CustomVariables::getMaxCustomVariables());
+        $this->assertEquals(9, CustomVariables::getNumUsableCustomVariables());
 
         $this->executeCommand(6);
-        $this->assertEquals(6, CustomVariables::getMaxCustomVariables());
+        $this->assertEquals(6, CustomVariables::getNumUsableCustomVariables());
     }
 
     /**
diff --git a/plugins/CustomVariables/tests/Integration/CustomVariablesTest.php b/plugins/CustomVariables/tests/Integration/CustomVariablesTest.php
index 75832efe3704ae43e9fe23342bfd89920bbc4a76..e24bbf009046996f97881a245225a93ecdb6289b 100644
--- a/plugins/CustomVariables/tests/Integration/CustomVariablesTest.php
+++ b/plugins/CustomVariables/tests/Integration/CustomVariablesTest.php
@@ -8,6 +8,7 @@
 
 namespace Piwik\Plugins\CustomVariables\tests;
 use Piwik\Plugins\CustomVariables\CustomVariables;
+use Piwik\Plugins\CustomVariables\Model;
 use Piwik\Tracker\Cache;
 use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
 
@@ -18,27 +19,85 @@ use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
  */
 class CustomVariablesTest extends IntegrationTestCase
 {
-    public function testGetMaxCustomVariables_ShouldDetectCorrectNumberOfVariables()
+    public function test_getNumUsableCustomVariables_ShouldDetectCorrectNumberOfVariables()
     {
         Cache::clearCacheGeneral();
-        $this->assertSame(5, CustomVariables::getMaxCustomVariables());
+        $this->assertSame(5, CustomVariables::getNumUsableCustomVariables());
     }
 
-    public function testGetMaxCustomVariables_ShouldCacheTheResult()
+    public function test_getNumUsableCustomVariables_ShouldCacheTheResult()
     {
-        CustomVariables::getMaxCustomVariables();
+        CustomVariables::getNumUsableCustomVariables();
         $cache = Cache::getCacheGeneral();
 
-        $this->assertSame(5, $cache['CustomVariables.MaxNumCustomVariables']);
+        $this->assertSame(5, $cache['CustomVariables.NumUsableCustomVariables']);
     }
 
-    public function testGetMaxCustomVariables_ShouldReadFromCacheIfPossible()
+    public function test_getNumUsableCustomVariables_ShouldReadFromCacheIfPossible()
     {
         $cache = Cache::getCacheGeneral();
-        $cache['CustomVariables.MaxNumCustomVariables'] = 10;
+        $cache['CustomVariables.NumUsableCustomVariables'] = 10;
         Cache::setCacheGeneral($cache);
 
-        $this->assertSame(10, CustomVariables::getMaxCustomVariables());
+        $this->assertSame(10, CustomVariables::getNumUsableCustomVariables());
     }
 
+    public function test_getNumUsableCustomVariables_ShouldReturnMinVariables_IfOneTableHasLessEntriesThanOthers()
+    {
+        $this->assertEquals(5, CustomVariables::getNumUsableCustomVariables());
+
+        $scopes = Model::getScopes();
+
+        // removing custom vars step by step... as soon as one custom var is removed,
+        // it should return the min count of available variables
+        for ($i = 4; $i != -1; $i--) {
+            foreach ($scopes as $scope) {
+                $this->dropCustomVar($scope);
+                $this->assertSame($i, CustomVariables::getNumUsableCustomVariables());
+            }
+        }
+
+        $this->assertEquals(0, CustomVariables::getNumUsableCustomVariables());
+
+        // add custom var, only once all custom vars are written it should write return a higher custom var number
+        for ($i = 1; $i != 7; $i++) {
+            foreach ($scopes as $index => $scope) {
+                $isLastIndex = $index === (count($scopes) - 1);
+
+                $this->addCustomVar($scope);
+
+                if ($isLastIndex) {
+                    $this->assertSame($i, CustomVariables::getNumUsableCustomVariables());
+                    // all scopes have been added, it should consider all custom var counts
+                } else {
+                    $this->assertSame($i - 1, CustomVariables::getNumUsableCustomVariables());
+                    // at least one scope is not added and should therefore return the old custom var count until all
+                    // tables have been updated
+                }
+            }
+        }
+
+        $this->assertEquals(6, CustomVariables::getNumUsableCustomVariables());
+    }
+
+    private function dropCustomVar($scope)
+    {
+        $this->clearCache();
+        $model = new Model($scope);
+        $model->removeCustomVariable();
+    }
+
+    private function addCustomVar($scope)
+    {
+        $this->clearCache();
+        $model = new Model($scope);
+        $model->addCustomVariable();
+    }
+
+    private function clearCache()
+    {
+        Cache::clearCacheGeneral();
+    }
+
+
 }
diff --git a/plugins/DBStats/DBStats.php b/plugins/DBStats/DBStats.php
index 5f16ed8451dbc02c5a56f1a62badf12704893697..e5d6f85647ec0108e8b0e2144097cc863808b912 100644
--- a/plugins/DBStats/DBStats.php
+++ b/plugins/DBStats/DBStats.php
@@ -18,9 +18,9 @@ class DBStats extends \Piwik\Plugin
     const TIME_OF_LAST_TASK_RUN_OPTION = 'dbstats_time_of_last_cache_task_run';
 
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
diff --git a/plugins/DBStats/lang/it.json b/plugins/DBStats/lang/it.json
index 059cac77430208b2e2856baa18445e3f6cab8f61..36569bb4fffbb631b351893b21d2c225a2487ae6 100644
--- a/plugins/DBStats/lang/it.json
+++ b/plugins/DBStats/lang/it.json
@@ -2,20 +2,20 @@
     "DBStats": {
         "DatabaseUsage": "Uso del Database",
         "DataSize": "Dimensione dei dati",
-        "DBSize": "Grandezza database",
-        "EstimatedSize": "Grandezza stimata",
+        "DBSize": "Dimensione del database",
+        "EstimatedSize": "Dimensione stimata",
         "IndexSize": "Dimensione degli indici",
-        "LearnMore": "Per apprendere i dettagli su come Piwik elabora i dati, e su come far funzionare bene Piwik per siti a medio e alto traffico, dai un'occhiata alla documentazione %s.",
+        "LearnMore": "Per apprendere i dettagli su come Piwik elabora i dati e su come far funzionare bene Piwik per siti a medio e alto traffico, dai un'occhiata alla documentazione %s.",
         "MainDescription": "Piwik sta salvando tutti i dati statistici nel Database MySQL. Attualmente, le tabelle di Piwik stanno usando %s.",
         "MetricDataByYear": "Tabelle metriche per anno",
         "MetricTables": "Tabelle metriche",
-        "OtherTables": "Altre tabelle",
+        "OtherTables": "Altre Tabelle",
         "PluginDescription": "Restituisce dei report dettagliati sull'uso del database MySQL. Disponibile in Diagnostica per i Super Users.",
-        "ReportDataByYear": "Report tabelle per anno",
-        "ReportTables": "Report tabelle",
+        "ReportDataByYear": "Report Tabelle per Anno",
+        "ReportTables": "Report Tabelle",
         "RowCount": "Conteggio delle righe",
         "Table": "Tabella",
         "TotalSize": "Dimensione totale",
-        "TrackerTables": "Tracker tabelle"
+        "TrackerTables": "Tracker Tabelle"
     }
 }
\ No newline at end of file
diff --git a/plugins/DBStats/lang/zh-cn.json b/plugins/DBStats/lang/zh-cn.json
index a8e391cc1c09a6596ae2a02614263ee5d10d73ad..bcd6101af305ccf81d54d1c2d25c537595eb3cee 100644
--- a/plugins/DBStats/lang/zh-cn.json
+++ b/plugins/DBStats/lang/zh-cn.json
@@ -10,6 +10,7 @@
         "MetricDataByYear": "按年的指标表",
         "MetricTables": "指标表",
         "OtherTables": "其它表",
+        "PluginDescription": "提供了详细的MySQL数据库使用情况报告。可用于超级用户下诊断。",
         "ReportDataByYear": "年度报表",
         "ReportTables": "报表",
         "RowCount": "行计算",
diff --git a/plugins/Dashboard/Controller.php b/plugins/Dashboard/Controller.php
index afd5e4236e4fe149f9c73f7c25157a6a4c68a71f..d77c283273f31ffbbf5387fb67276948d1ea13f0 100644
--- a/plugins/Dashboard/Controller.php
+++ b/plugins/Dashboard/Controller.php
@@ -212,6 +212,7 @@ class Controller extends \Piwik\Plugin\Controller
         $this->checkTokenInUrl();
 
         $layout      = Common::unsanitizeInputValue(Common::getRequestVar('layout'));
+        $layout      = strip_tags($layout);
         $idDashboard = Common::getRequestVar('idDashboard', 1, 'int');
         $name        = Common::getRequestVar('name', '', 'string');
 
@@ -236,6 +237,7 @@ class Controller extends \Piwik\Plugin\Controller
 
         if (Piwik::hasUserSuperUserAccess()) {
             $layout = Common::unsanitizeInputValue(Common::getRequestVar('layout'));
+            $layout = strip_tags($layout);
             $this->getModel()->createOrUpdateDashboard('', '1', $layout);
         }
     }
diff --git a/plugins/Dashboard/Dashboard.php b/plugins/Dashboard/Dashboard.php
index 6febc9b8dd83525cb59cc4460fa067fa633aacb9..9ccbb822e4196fb8446c0e22917204c0b721d4d9 100644
--- a/plugins/Dashboard/Dashboard.php
+++ b/plugins/Dashboard/Dashboard.php
@@ -18,9 +18,9 @@ use Piwik\WidgetsList;
 class Dashboard extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getJavaScriptFiles'        => 'getJsFiles',
diff --git a/plugins/Dashboard/lang/it.json b/plugins/Dashboard/lang/it.json
index 05ada26ef6d9b8c6e1947d582a7636e5e7a0e9cc..b97e35430d5ef0e485aa5bbabdf2212c70597dcb 100644
--- a/plugins/Dashboard/lang/it.json
+++ b/plugins/Dashboard/lang/it.json
@@ -28,7 +28,7 @@
         "SelectWidget": "Seleziona il widget da aggiungere nella dashboard",
         "SetAsDefaultWidgets": "Imposta come selezione predefinita di widget",
         "SetAsDefaultWidgetsConfirm": "Sei sicuro di voler impostare la selezione corrente di widget e il layout del pannello come modello predefinito?",
-        "SetAsDefaultWidgetsConfirmHelp": "Questa selezione widget e il layout colonne saranno utilizzate quando un utente creerà un nuovo pannello, o quando \"%s\" funzione viene utilizzata.",
+        "SetAsDefaultWidgetsConfirmHelp": "Questa selezione di widget e il layout colonne saranno utilizzate quando un utente creerà una nuova dashboard o quando verrà utilizzata la funzione \"%s\".",
         "TopLinkTooltip": "Visualizza report Web Analytics per %s.",
         "WidgetNotFound": "Widget non trovato",
         "WidgetPreview": "Anteprima del widget"
diff --git a/plugins/DevicePlugins/DevicePlugins.php b/plugins/DevicePlugins/DevicePlugins.php
index afe8abf950d5dc653993662aad7c78d8e694f77d..3ac882e8ceec9bb53bf389520d437c3d0da39860 100644
--- a/plugins/DevicePlugins/DevicePlugins.php
+++ b/plugins/DevicePlugins/DevicePlugins.php
@@ -18,9 +18,9 @@ use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
 class DevicePlugins extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'Metrics.getDefaultMetricTranslations' => 'addMetricTranslations',
diff --git a/plugins/DevicePlugins/lang/it.json b/plugins/DevicePlugins/lang/it.json
index f30e30d19e987d9fb51ba74766f4f323c3b52fa5..6cc5b75c2717dcb955f72e64700d3d5047ba871e 100644
--- a/plugins/DevicePlugins/lang/it.json
+++ b/plugins/DevicePlugins/lang/it.json
@@ -4,7 +4,7 @@
         "BrowserWithPluginsEnabled": "%1$s con plugin %2$s abilitati",
         "PluginDescription": "Restituisce l'elenco dei plugin supportati dal browser dei visitatori.",
         "PluginDetectionDoesNotWorkInIE": "N.B.: Questo plugin non funziona su Internet Explorer. Questo report è basato solamente sugli utenti di altri browser.",
-        "WidgetPlugins": "Lista dei Plugin",
+        "WidgetPlugins": "Plugin Browser",
         "WidgetPluginsDocumentation": "Questo report mostra quali plugin del browser i visitatori avevano abilitato. Questa informazione potrebbe essere importante per la scelta del giusto modo di inviare i tuoi contenuti."
     }
 }
\ No newline at end of file
diff --git a/plugins/DevicePlugins/lang/lt.json b/plugins/DevicePlugins/lang/lt.json
index 12fc5b4d8bdd229ccb85bb6eb1a437c597fd09d5..3a239c80ac078ac03103bf04b7c7b5efd3cb98bd 100644
--- a/plugins/DevicePlugins/lang/lt.json
+++ b/plugins/DevicePlugins/lang/lt.json
@@ -1,6 +1,8 @@
 {
     "DevicePlugins": {
+        "PluginDescription": "Praneša lankytojų naršyklėse palaikomų papildinių sąrašą.",
         "PluginDetectionDoesNotWorkInIE": "Pastaba: papildinio aptikimas neveikia Internet Explorer naršyklėje. Ši ataskaita bus sugeneruota tik kitose naršyklėse.",
-        "WidgetPlugins": "Papildinių sąrašas"
+        "WidgetPlugins": "Papildinių sąrašas",
+        "WidgetPluginsDocumentation": "Ši ataskaita parodo kuriuos naršyklės papildinius jūsų lankytojai buvo įjungę. Ši informacija gali būti svarbi, pasirenkant teisingą savo turinio pristatymo būdą."
     }
 }
\ No newline at end of file
diff --git a/plugins/DevicesDetection/DevicesDetection.php b/plugins/DevicesDetection/DevicesDetection.php
index 88478e6ff6ef83ae1c44d71d3fd84ac50c43da4b..5385b29354ca899085a56ef900ae5487959d2cbc 100644
--- a/plugins/DevicesDetection/DevicesDetection.php
+++ b/plugins/DevicesDetection/DevicesDetection.php
@@ -18,9 +18,9 @@ require_once PIWIK_INCLUDE_PATH . '/plugins/DevicesDetection/functions.php';
 class DevicesDetection extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'Live.getAllVisitorDetails' => 'extendVisitorDetails'
diff --git a/plugins/DevicesDetection/lang/it.json b/plugins/DevicesDetection/lang/it.json
index d6abec55f00142225b1bde5f2f9f31e1d6f0da5c..c34d904d0c2e776716166c69152e25032ecb6241 100644
--- a/plugins/DevicesDetection/lang/it.json
+++ b/plugins/DevicesDetection/lang/it.json
@@ -1,7 +1,7 @@
 {
     "DevicesDetection": {
         "BrowserEngine": "Motore browser",
-        "BrowserEngineDocumentation": "Questo grafico mostra i browser dei vostri visitatori suddivisi in famiglie di browser. %s Le informazioni più importanti per gli sviluppatori web sono che tipo di motore di rendering i loro visitatori stanno usando. Le etichette contengono i nomi dei motori seguiti dal browser più comune che utilizza quel motore tra parentesi.",
+        "BrowserEngineDocumentation": "Questo report mostra i browser dei vostri visitatori suddivisi in famiglie di browser. %s Le informazioni più importanti per gli sviluppatori web sono che tipo di motore di rendering i loro visitatori stanno usando. Le etichette contengono i nomi dei motori seguiti dal browser più comune che utilizza quel motore, messo tra parentesi.",
         "BrowserEngines": "Motori browser",
         "BrowserFamily": "Famiglia del Browser",
         "Browsers": "Browser",
@@ -32,7 +32,7 @@
         "PluginDescription": "Fornisce informazioni dettagliate sui dispositivi degli utenti, come marca, modello, tipo di dispositivo (tv, console, smartphone, desktop, ecc.) e altro ancora.",
         "SmartDisplay": "Smart display",
         "Smartphone": "Smartphone",
-        "PortableMediaPlayer": "Media player portabile",
+        "PortableMediaPlayer": "Media player portatile",
         "Devices": "Dispositivi",
         "Tablet": "Tablet",
         "Phablet": "Phablet",
diff --git a/plugins/DevicesDetection/lang/lt.json b/plugins/DevicesDetection/lang/lt.json
index a02856fac960c280be94236c705a6fda1dc37fa5..26e803b3cd2eb1d6645473cb7aa28c1ae518b43b 100644
--- a/plugins/DevicesDetection/lang/lt.json
+++ b/plugins/DevicesDetection/lang/lt.json
@@ -4,13 +4,27 @@
         "BrowserFamily": "Naršyklių šeimos",
         "Browsers": "Naršyklės",
         "BrowserVersion": "Naršyklės versija",
+        "CarBrowser": "Automobilio naršyklė",
         "Software": "Programinė įranga",
         "ColumnBrowser": "Naršyklė",
         "ColumnOperatingSystem": "OperacinÄ— sistema",
         "ColumnOperatingSystemVersion": "OperacinÄ—s sistemos versija",
+        "dataTableLabelBrands": "Prekės ženklas",
+        "dataTableLabelModels": "Modelis",
         "dataTableLabelSystemVersion": "OperacinÄ—s sistemos versija",
         "dataTableLabelTypes": "Tipas",
+        "Device": "Įrenginys",
+        "DeviceBrand": "Įrenginio prekės ženklas",
+        "DeviceModel": "Įrenginio modelis",
+        "DeviceType": "Įrenginio tipas",
         "OperatingSystems": "OperacinÄ—s sistemos",
+        "SmartDisplay": "Belaidis monitorius",
+        "Smartphone": "Išmanusis telefonas",
+        "PortableMediaPlayer": "Nešiojamoji medijos leistuvė",
+        "Devices": "Įrenginiai",
+        "Tablet": "Planšetinis kompiuteris",
+        "Phablet": "Planšetofonas",
+        "TV": "Televizorius",
         "WidgetBrowsers": "Lankytojų naršyklės"
     }
 }
\ No newline at end of file
diff --git a/plugins/Ecommerce/lang/cs.json b/plugins/Ecommerce/lang/cs.json
index 0fe34b8bcb4d450cb2066bb563de06dd1097f35b..8455e374e36579d2b9d999b2156d0bab82a77e4c 100644
--- a/plugins/Ecommerce/lang/cs.json
+++ b/plugins/Ecommerce/lang/cs.json
@@ -1,5 +1,8 @@
 {
     "Ecommerce": {
-        "Sales": "Tržby"
+        "PluginDescription": "Ecommerce vám umožňuje sledovat, kdy uživatelé přidají produkt do košíku a kdy dojde ke konverzi na objednávku. Také umožňuje sledovat zobrazení stránek produktů, kategorií a opuštěné košíky.",
+        "Sales": "Tržby",
+        "SalesBy": "Tržby podle %s",
+        "SalesAdjective": "Tržby %s"
     }
 }
\ No newline at end of file
diff --git a/plugins/Ecommerce/lang/sr.json b/plugins/Ecommerce/lang/sr.json
index 78c9d5b529e620c356daa85a3fd160b503585b49..2902edcaa3f0cb210dc88310fba63fa50d797096 100644
--- a/plugins/Ecommerce/lang/sr.json
+++ b/plugins/Ecommerce/lang/sr.json
@@ -1,5 +1,8 @@
 {
     "Ecommerce": {
-        "Sales": "Prodaja"
+        "PluginDescription": "Pomoću E-commerce možete da pratite kada posetilac dodaje proizvode u korpu i kada se obavi kupovina. Proizvode i kategorije proizvoda možete da pratite i u napuštenim korpama.",
+        "Sales": "Prodaja",
+        "SalesBy": "Prodaja po %s",
+        "SalesAdjective": "Prodaja %s"
     }
 }
\ No newline at end of file
diff --git a/plugins/Events/Events.php b/plugins/Events/Events.php
index bb784865f2d5b3bf1c9474760237ad664598d175..ba3e96465dacb0e1da1b2c8755f72a53ef5d1df5 100644
--- a/plugins/Events/Events.php
+++ b/plugins/Events/Events.php
@@ -16,9 +16,9 @@ use Piwik\Plugin\ViewDataTable;
 class Events extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'Metrics.getDefaultMetricDocumentationTranslations' => 'addMetricDocumentationTranslations',
diff --git a/plugins/Events/lang/cs.json b/plugins/Events/lang/cs.json
index 1632851039b277857c51b123371be051b5e1787c..d919e1c04c0abeeb048444fa63ff49163cc5786b 100644
--- a/plugins/Events/lang/cs.json
+++ b/plugins/Events/lang/cs.json
@@ -1,5 +1,6 @@
 {
     "Events": {
+        "PluginDescription": "Sledujte události a získejte hlášení o aktivitě vašich návštěvníků",
         "AvgEventValue": "Průměrná hodnota události je %s",
         "AvgValue": "Průměrná hodnota",
         "AvgValueDocumentation": "Průměr všech hodnot pro tuto událost",
diff --git a/plugins/Events/lang/it.json b/plugins/Events/lang/it.json
index d4a3ea8903c7699e832136dcbafcf3ba65d0e30a..465cebb176cf751c791d605799df93351843bb46 100644
--- a/plugins/Events/lang/it.json
+++ b/plugins/Events/lang/it.json
@@ -15,7 +15,7 @@
         "EventsWithValue": "Eventi con un valore",
         "EventsWithValueDocumentation": "Numero di eventi dove è stato impostato un valore Evento",
         "EventValue": "Valore Evento",
-        "EventValueTooltip": "Il valore totale Evento è la somma dei %s valori eventi %s tra il inimo di %s e il massimo di %s.",
+        "EventValueTooltip": "Il valore totale Evento è la somma dei %s valori eventi %s tra un minimo di %s e un massimo di %s.",
         "MaxValue": "Valore massimo",
         "MaxValueDocumentation": "Valore massimo per questo evento",
         "MinValue": "Valore minimo",
@@ -26,7 +26,7 @@
         "TotalEvents": "Totale eventi",
         "TotalEventsDocumentation": "Numero totale degli eventi",
         "TotalValue": "Valore totale",
-        "TotalValueDocumentation": "somma dei valori degli eventi",
+        "TotalValueDocumentation": "Somma dei valori degli eventi",
         "ViewEvents": "Vedi Eventi"
     }
 }
\ No newline at end of file
diff --git a/plugins/Events/lang/lt.json b/plugins/Events/lang/lt.json
new file mode 100644
index 0000000000000000000000000000000000000000..e0fd6c49a8d7a7d5b3f7bc9555d171b5c1353a2d
--- /dev/null
+++ b/plugins/Events/lang/lt.json
@@ -0,0 +1,9 @@
+{
+    "Events": {
+        "PluginDescription": "Sekite įvykius ir gaukite savo lankytojų veiklos ataskaitas.",
+        "EventActions": "Įvykių veiksmai",
+        "EventCategories": "Įvykių kategorijos",
+        "EventNames": "Įvykių pavadinimai",
+        "Events": "Įvykiai"
+    }
+}
\ No newline at end of file
diff --git a/plugins/Events/lang/sr.json b/plugins/Events/lang/sr.json
index 0018451d954b29951d96f830dae0e838541abb12..bbf1a1477922ff08f96a8e6a1dd281677c4c52a2 100644
--- a/plugins/Events/lang/sr.json
+++ b/plugins/Events/lang/sr.json
@@ -1,5 +1,6 @@
 {
     "Events": {
+        "PluginDescription": "Pratite događaje i dobijajte izveštaje o aktivnostima vaših posetilaca.",
         "AvgEventValue": "Prosečna vrednost događaja je: %s",
         "AvgValue": "Prosečna vrednost",
         "AvgValueDocumentation": "Prosek svih vrednosti ovog događaja",
diff --git a/plugins/ExampleRssWidget/ExampleRssWidget.php b/plugins/ExampleRssWidget/ExampleRssWidget.php
index ec035f36d1dbcd51e02ab525710e085554ab1532..3fd348f80dee89420ef27945036454d778d43143 100644
--- a/plugins/ExampleRssWidget/ExampleRssWidget.php
+++ b/plugins/ExampleRssWidget/ExampleRssWidget.php
@@ -14,9 +14,9 @@ namespace Piwik\Plugins\ExampleRssWidget;
 class ExampleRssWidget extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getStylesheetFiles' => 'getStylesheetFiles'
diff --git a/plugins/Feedback/Feedback.php b/plugins/Feedback/Feedback.php
index 0bf58287a89de19a2a1aea73e01c833b22e68120..99849ff277232b870c6abe0cc2e4abae304607c6 100644
--- a/plugins/Feedback/Feedback.php
+++ b/plugins/Feedback/Feedback.php
@@ -15,9 +15,9 @@ class Feedback extends \Piwik\Plugin
 {
 
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getStylesheetFiles'        => 'getStylesheetFiles',
diff --git a/plugins/Feedback/lang/it.json b/plugins/Feedback/lang/it.json
index d069a7b1d2c141840dbd13408320b90c150ff8d2..1e3934e03f621cbe5d5fae4bd4cb3611b768289a 100644
--- a/plugins/Feedback/lang/it.json
+++ b/plugins/Feedback/lang/it.json
@@ -1,9 +1,9 @@
 {
     "Feedback": {
         "DoYouHaveBugReportOrFeatureRequest": "Hai un bug da segnalare o una richiesta di funzionalità?",
-        "HowToCreateTicket": "Si prega di leggere le raccomandazioni per scrivere un buon %1$srapporto bug%2$s o una %3$srichiesta di funzionalità%4$s. Poi registrati o accedi al nostro %5$stracker dei problemi%6$s e crea un %7$snuovo problema%8$s.",
+        "HowToCreateTicket": "Si prega di leggere le raccomandazioni per scrivere un buon %1$srapporto bug%2$s o una %3$srichiesta di funzionalità%4$s. Poi registrati o accedi al nostro %5$stracker dei problemi%6$s e segnala un %7$snuovo problema%8$s.",
         "IWantTo": "Vorrei:",
-        "LearnWaysToParticipate": "Impara tutti i modi attraverso i quali puoi %s partecipare %s",
+        "LearnWaysToParticipate": "Impara tutti i modi attraverso i quali puoi %s partecipare%s",
         "ManuallySendEmailTo": "Perfavore invia manualmente il messaggio a",
         "PluginDescription": "Invia un Feedback al Team di Piwik. Condividi idee e suggerimenti per rendere Piwik la migliore piattaforma al mondo di statistiche web!",
         "PrivacyClaim": "Piwik rispetta la tua %1$sprivacy%2$s e ti dà il pieno controllo sui tuoi dati.",
@@ -29,6 +29,6 @@
         "PiwikProCustomDevelopment": "Sviluppo personalizzato su commissione",
         "PiwikProAnalystConsulting": "Consulenza di analisti",
         "ContactUs": "Contattaci",
-        "VisitTheForums": "Visita il %s Forum %s"
+        "VisitTheForums": "Visita i %s Forum%s e ottieni aiuto dalla comunità degli utenti Piwik"
     }
 }
\ No newline at end of file
diff --git a/plugins/Feedback/lang/lt.json b/plugins/Feedback/lang/lt.json
index b9904de71b428642df3d0a39a1474c01707781f0..2c7efb7f41441b68150ade26147b3dde91704b05 100644
--- a/plugins/Feedback/lang/lt.json
+++ b/plugins/Feedback/lang/lt.json
@@ -4,8 +4,15 @@
         "IWantTo": "AÅ¡ noriu:",
         "LearnWaysToParticipate": "Sužinokite kaip galite %s prisijungti%s",
         "ManuallySendEmailTo": "Prašome išsiųsti rankiniu būdu",
+        "PluginDescription": "Siųskite savo atsiliepimus Piwik komandai. Dalinkitės savo idėjomis ir pasiūlymais, kad padarytumėte Piwik geriausia analitikos platforma pasaulyje!",
+        "RateFeatureLeaveMessageDislike": "Mes apgailestaujame išgirsti, kad jums ji nepatinka! Prašome parašyti, kaip mes galėtume ją patobulinti.",
+        "RateFeatureLeaveMessageLike": "Mums malonu išgirsti, kad jums ji patinka! Prašome parašyti kas jums labiausiai patinka arba, jeigu turite, ypatybės prašymą.",
+        "RateFeatureThankYouTitle": "Dėkojame, kad įvertinate ypatybę \"%s\"!",
+        "RateFeatureTitle": "Ar jums patinka ypatybė \"%s\"? Prašome įvertinti ir parašyti komentarą",
         "SendFeedback": "Siųsti atsiliepimą",
         "ThankYou": "Dėkojame už pagalbą kuriant tobulesnį Piwik!",
+        "CommunityHelp": "BendruomenÄ—s pagalba",
+        "ProfessionalHelp": "Profesionali pagalba",
         "VisitTheForums": "Apsilankykite %s forumuose%s"
     }
 }
\ No newline at end of file
diff --git a/plugins/Goals/Goals.php b/plugins/Goals/Goals.php
index 6a2a41566b1f33896116029c3b36b3bff8421b48..d26e2cf77e5e4a01451607f7218396d9a7cefe07 100644
--- a/plugins/Goals/Goals.php
+++ b/plugins/Goals/Goals.php
@@ -86,9 +86,9 @@ class Goals extends \Piwik\Plugin
     }
 
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         $hooks = array(
             'AssetManager.getJavaScriptFiles'        => 'getJsFiles',
diff --git a/plugins/Goals/lang/cs.json b/plugins/Goals/lang/cs.json
index a0052d9bc68ef7c542e7667a05564c4949a3ef76..7bc7cbc8bbb8d5bd5c6747de37fd7b28b1eacc81 100644
--- a/plugins/Goals/lang/cs.json
+++ b/plugins/Goals/lang/cs.json
@@ -11,6 +11,10 @@
         "BestReferrers": "Odkazující stránky s nejvyšším počtem konverzí jsou:",
         "CaseSensitive": "shoda s velikostí písmen",
         "CancelAndReturnToGoals": "Zrušit a %svrátit se na seznam cílů%s",
+        "CategoryTextGeneral_Visitors": "Umístění uživatele",
+        "CategoryTextReferrers_Referrers": "Referrery",
+        "CategoryTextVisitsSummary_VisitsSummary": "Uživatelský atribut",
+        "CategoryTextGeneral_Visit": "Zapojení",
         "ChooseGoal": "Vyberte cíl",
         "ClickOutlink": "Kliknout na odkaz na externí web",
         "SendEvent": "Poslat událost",
@@ -72,7 +76,8 @@
         "MatchesExpression": "odpovídá %s",
         "NewGoalIntro": "Sledování konverzního poměru cílů je jeden z nejefektivnějších způsobů měření a zlepšování podnikatelských zájmů.",
         "NewVisitorsConversionRateIs": "Poměr konverze nové příchozích uživatelů je %s",
-        "NoGoalsNeedAccess": "Pouze administrátor nebo uživatel s právy super uživatele může přidat cíle pro danou webovou stránku. Požádejte svého administrátora, aby cíl pro vaše webové stránky přidal. <br>Sledování cílů pomáhá porozumět a maximalizovat výkon vašich stránek.",
+        "NoGoalsNeedAccess": "Pouze administrátor nebo uživatel s právy super uživatele může spravovat cíle pro dané webové stránky. Požádejte vašeho Piwik administrátora, aby vám cíl vytvořil.<br>Sledování cílů je skvělý způsob, jak sledovat a maximalizovat výkonnost vašich webových stránek.",
+        "NeedAccess": "Pouze administrátor nebo uživatel s právy super uživatele může spravovat cíle pro danou webovou stránku.",
         "Optional": "(volitelné)",
         "OverallConversionRate": "%s celková frekvence konverzí (návštěv se splněným cílem)",
         "OverallRevenue": "%s celkový příjem",
@@ -89,6 +94,8 @@
         "UpdateGoal": "Aktualizovat cíl",
         "URL": "URL",
         "ViewAndEditGoals": "Zobrazit a editovat cíle",
+        "GoalsBy": "Cíle podle %s",
+        "GoalsAdjective": "Cíle %s",
         "VisitPageTitle": "Navštívit stránku s daným titulkem",
         "VisitsUntilConv": "Návštěv ke konverzi",
         "VisitUrl": "Navštívít zadanou URL (stránku, nebo skupiny stránek)",
diff --git a/plugins/Goals/lang/da.json b/plugins/Goals/lang/da.json
index 2e8bf0d9ac2f534d1837d73e3f68f7aa6570aee9..a6224eee5795a8bb2f4394b7c80325016f9d9a73 100644
--- a/plugins/Goals/lang/da.json
+++ b/plugins/Goals/lang/da.json
@@ -72,7 +72,6 @@
         "MatchesExpression": "matcher udtrykket %s",
         "NewGoalIntro": "Sporing af målkonvertering er et af de mest effektive måder at måle og forbedre dine forretningsmæssige målsætninger.",
         "NewVisitorsConversionRateIs": "Nye besøgendes konverteringsrate er %s",
-        "NoGoalsNeedAccess": "Kun en administrator eller en bruger med superbruger adgang kan tilføje mål for et bestemt websted. Spørg din Piwik administratore om at opstille et mål for dit websted. <br>Sporing mål er en fantastisk måde til at forstå og maksimere dit websteds effektivitet!",
         "Optional": "(valgfri)",
         "OverallConversionRate": "%s samlet konverteringsrate (besøg med et færdigt mål)",
         "OverallRevenue": "%s samlede indtægter",
diff --git a/plugins/Goals/lang/de.json b/plugins/Goals/lang/de.json
index 73985b10565257b235d74e4bd277a5e6ff902e8c..73e5f8fca694a93d2178148e6e38b1c2a5b7ecc1 100644
--- a/plugins/Goals/lang/de.json
+++ b/plugins/Goals/lang/de.json
@@ -76,7 +76,8 @@
         "MatchesExpression": "entspricht dem Ausdruck %s",
         "NewGoalIntro": "Tracken von Konversions-Zielen ist eine der effizientesten Möglichkeiten zur Messung und Verbesserung Ihrer geschäftlichen Ziele.",
         "NewVisitorsConversionRateIs": "Umsätze pro neuem Besucher: %s",
-        "NoGoalsNeedAccess": "Nur ein (Haupt-)Administrator kann Ziele für eine gegebene Website hinzufügen. Bitte fragen Sie ihren Piwik Administrator, um Ziele für ihre Website aufzustellen. <br> Das Aufzeichnen von Zielen ist ein großartiger Weg, ihre Website-Performance zu verstehen und zu maximieren!",
+        "NoGoalsNeedAccess": "Nur ein (Haupt-)Administrator kann Ziele für eine gegebene Website verwalten. Bitte fragen Sie ihren Piwik Administrator, um Ziele für ihre Webseite aufzustellen. <br> Tracking Ziele sind ein großartiger Weg, ihre Webseite-Performance zu verstehen und zu maximieren!",
+        "NeedAccess": "Nur ein (Haupt-)Administrator kann Ziele für eine gegebene Website verwalten.",
         "Optional": "(optional)",
         "OverallConversionRate": "%s Gesamtkonversionsrate (Besuche mit einem erreichten Ziel)",
         "OverallRevenue": "%s Gesamtumsatz",
diff --git a/plugins/Goals/lang/el.json b/plugins/Goals/lang/el.json
index 2a8f2cfcfa22f2c819628391ab7257ac4fe811be..f1cc2fca4a560437a35bbdd6559ddd37189ffd10 100644
--- a/plugins/Goals/lang/el.json
+++ b/plugins/Goals/lang/el.json
@@ -76,7 +76,8 @@
         "MatchesExpression": "ταιριάζει στην έκφραση %s",
         "NewGoalIntro": "Η παρακολούθηση για τη Μετατροπή Στόχων είναι ένας από τους αποτελεσματικότερους τρόπους για να μετρήσετε και να βελτιώσετε τους στόχους της επιχείρησής σας.",
         "NewVisitorsConversionRateIs": "Ο βαθμός μετατροπής νέων επισκεπτών είναι %s",
-        "NoGoalsNeedAccess": "Μόνο ο Διαχειριστής ή ένας χρήστης με δικαίωμα Υπερ-Χρήστη μπορεί να προσθέσει Στόχους για ένα συγκεκριμένο ιστοτόπο. Παρακαλούμε ζητήστε από τον διαχειριστή του Piwik να προσθέσει ένα Στόχο για τον ιστοτόπο σας.<br \/>Η Παρακολούθηση Στόχων είναι ένας εξαιρετικός τρόπος για να κατανοήσετε και να μεγιστοποιήσετε την απόδοση του ιστοτόπου σας!",
+        "NoGoalsNeedAccess": "Μόνος ένας διαχειριστής ή χρήστης με δικαίωμα Υπερ Χρήστη μπορεί να διαχειριστεί τους Στόχους για ένα συγκεκριμένο ιστοτόπο. Παρακαλούμε ζητήστε από τον διαχειριστή του Piwik σας να ορίσει ένα Στόχο για τον ιστοτόπο σας.<br>Η Παρακολούθηση Στόχων είναι ένας πολύ καλός τρόπος για να σας βοηθήσει να κατανοήσετε και να μεγιστοποιήσετε την απόδοση του ιστοτόπου σας!",
+        "NeedAccess": "Μόνος ένας διαχειριστής ή χρήστης με δικαίωμα Υπερ Χρήστη μπορεί να διαχειριστεί τους Στόχους για ένα συγκεκριμένο ιστοτόπο.",
         "Optional": "(προαιρετικό)",
         "OverallConversionRate": "%s καθολικός βαθμός προσόδου (επισκέψεις με έναν πλήρη στόχο)",
         "OverallRevenue": "%s καθολική πρόσοδος",
diff --git a/plugins/Goals/lang/es.json b/plugins/Goals/lang/es.json
index 5ccb89f6bd360e645df79c28ddb49849cd41c708..4d5a1edc99e07a82d2b378fb00e7c77d549226fd 100644
--- a/plugins/Goals/lang/es.json
+++ b/plugins/Goals/lang/es.json
@@ -76,7 +76,6 @@
         "MatchesExpression": "coincide con la expresión %s",
         "NewGoalIntro": "El seguimiento de las conversiones del objetivo es una de las maneras más eficaces para medir y mejorar las metas de negocio.",
         "NewVisitorsConversionRateIs": "La tasa de visitantes nuevos es %s",
-        "NoGoalsNeedAccess": "Sólo un Administrador o un usuario con acceso Super User puede añadir objetivos para un determinado sitio de internet. Pide a su administrador de Piwik que configure un objetivo para su sitio de internet.<br>El seguimiento de los objetivos es una buena manera para ayudar a entender y maximizar el rendimiento de su sitio de internet!",
         "Optional": "(opcional)",
         "OverallConversionRate": "%s tasa global de la conversión (visitas con un objetivo completado)",
         "OverallRevenue": "%s ingresos totales",
diff --git a/plugins/Goals/lang/fi.json b/plugins/Goals/lang/fi.json
index 1c5593a88968e28e4ab26d122b8561409764b2a9..22c000b676074957f3c19be05cb3465f562e13d1 100644
--- a/plugins/Goals/lang/fi.json
+++ b/plugins/Goals/lang/fi.json
@@ -67,7 +67,6 @@
         "MatchesExpression": "täsmää lausekkeseen %s",
         "NewGoalIntro": "Konversion seuranta on yksi tehokkaimmista tavoista mitata ja kehittää yrityksesi päämääriä.",
         "NewVisitorsConversionRateIs": "Uusien kävijöiden siirtymäaste on %s",
-        "NoGoalsNeedAccess": "Vain Ylläpitäjä tai Superkäyttäjä voi lisätä Tavoitteita tietylle verkkosivulle. Pyydä Ylläpitäjää asettamaan Tavoite verkkosivullesi. <br>Tavoitteiden seuranta on loistava tapa ymmärtää sekä maksimoida verkkosivusi suoritus!",
         "Optional": "(vapaavalintainen)",
         "OverallConversionRate": "%s yleinen siirtymisaste (käynti jossa täytetään tavoite)",
         "OverallRevenue": "%s yleistuotto",
diff --git a/plugins/Goals/lang/fr.json b/plugins/Goals/lang/fr.json
index 9a1acaf935252fb485319c2e9ed566c8a15c85d9..c8945cf794723522e1504c5dad06b5028d1d0475 100644
--- a/plugins/Goals/lang/fr.json
+++ b/plugins/Goals/lang/fr.json
@@ -76,7 +76,8 @@
         "MatchesExpression": "correspond à l'expression %s",
         "NewGoalIntro": "Le suivi de la conversion des objectifs et une des manières les plus efficaces de mesurer et améliorer vos objectifs d'affaires.",
         "NewVisitorsConversionRateIs": "Le taux de conversion des nouveaux visiteurs est %s",
-        "NoGoalsNeedAccess": "Uniquement un Administrateur ou un utilisateur avec un accès Super Utilisateur peut ajouter des Objectifs à un site donné. Veuillez demander à votre administrateur Piwik de mettre en place un Objectif pour votre site web. <br \/>Le suivit d'Objectifs est une bonne manière de mieux comprendre et de maximiser les performances de votre site web!",
+        "NoGoalsNeedAccess": "Uniquement un Administrateur ou un utilisateur avec un accès Super Utilisateur peut gérer les Objectifs d'un site web donné. Veuillez demander à votre administrateur Piwik de mettre en place un Objectif pour votre site web. <br \/>Le suivit d'Objectifs est une bonne manière de mieux comprendre et de maximiser les performances de votre site web!",
+        "NeedAccess": "Uniquement un administrateur ou un utilisateur avec le rôle super utilisateur peut gérer les objectifs pour un site web.",
         "Optional": "(optionnel)",
         "OverallConversionRate": "%s taux de conversion global (visites avec un objectif rempli)",
         "OverallRevenue": "%s revenu global",
diff --git a/plugins/Goals/lang/it.json b/plugins/Goals/lang/it.json
index 8cbc9fd02b3f06c602997a28ded405900b3c6fdc..b66b19884d111157e27bafc2b971f067964c9810 100644
--- a/plugins/Goals/lang/it.json
+++ b/plugins/Goals/lang/it.json
@@ -76,7 +76,6 @@
         "MatchesExpression": "soddisfa l'espressione %s",
         "NewGoalIntro": "Il tracciamento delle Conversioni Goal è uno dei modi più efficaci per misurare e migliorare i vostri obiettivi di business.",
         "NewVisitorsConversionRateIs": "Il report di conversione dei nuovi visitatori è %s",
-        "NoGoalsNeedAccess": "Solo un Amministratore o un utente con accesso da Super User può aggiungere dei Goal per un determinato sito. Chiedi altuo amministratore di Piwik di impostare un Goal per il tuo sito. <br>Tracciare dei Goal è un buon modo per aiutare a capire e massimizzare le prestazioni del tuo sito web.",
         "Optional": "(opzionale)",
         "OverallConversionRate": "%s report di conversione complessivo (visite con un obiettivo completato)",
         "OverallRevenue": "%s ricavo complessivo",
diff --git a/plugins/Goals/lang/ja.json b/plugins/Goals/lang/ja.json
index 3d0f57bb44dac297f1edd5735c4e22e081d52d22..9699895d820120dd81e9d1734dd6647842b175f4 100644
--- a/plugins/Goals/lang/ja.json
+++ b/plugins/Goals/lang/ja.json
@@ -71,7 +71,6 @@
         "MatchesExpression": "正規表現 %s に一致する",
         "NewGoalIntro": "目標コンバージョントラッキングは、あなたのビジネス目標の測定や改善のために、最も効率的な方法の一つです。",
         "NewVisitorsConversionRateIs": "新規ビジターのコンバージョン率は %s です",
-        "NoGoalsNeedAccess": "管理者またはスーパーユーザーアクセス権限を持つユーザーのみが、指定のウェブサイトに目標を追加できます。ウェブサイトに目標を設定するには、Piwik 管理者にお問い合わせください。<br> 目標の追跡は、あなたのウェブサイトへの理解を深め、パフォーマンスを最大化させるために、非常に良い方法です。",
         "Optional": "(オプション)",
         "OverallConversionRate": "%s 総コンバージョン率(目標達成ビジット)",
         "OverallRevenue": "%s 総収益",
diff --git a/plugins/Goals/lang/nl.json b/plugins/Goals/lang/nl.json
index a0fd1311509512de969c4a28b59256e5c474a572..710f410e2e8419319098502152ecdfe71d038931 100644
--- a/plugins/Goals/lang/nl.json
+++ b/plugins/Goals/lang/nl.json
@@ -76,7 +76,6 @@
         "MatchesExpression": "Voldoet aan de expressie %s",
         "NewGoalIntro": "Doel Conversie tracking is één van de meest efficiënte manieren om je zaken doelen te meten en te verbeteren.",
         "NewVisitorsConversionRateIs": "Conversiepercentage nieuwe bezoekers is %s",
-        "NoGoalsNeedAccess": "Enkel een administrator of een gebruiker met Super User toegang kan Doelen instellen voor een opgegeven website. Gelieve je Piwik administrator te contacteren om doelen op te zetten voor je website. <br>Doelen Opvolgen is een goede manier om je website performantie te begrijpen en maximaliseren!",
         "Optional": "(optioneel)",
         "OverallConversionRate": "%s Het algehele conversiepercentageDe algehele totaal inkomsten rate (bezoeken met een voltooide doelstelling)",
         "OverallRevenue": "%s totale inkomsten",
diff --git a/plugins/Goals/lang/ro.json b/plugins/Goals/lang/ro.json
index 2259ebe9847df4152a99e4012384cfd99d0158dd..7bec7dd7c29fe18327fbdc7c83aba6c59a8ac637 100644
--- a/plugins/Goals/lang/ro.json
+++ b/plugins/Goals/lang/ro.json
@@ -65,7 +65,6 @@
         "MatchesExpression": "se portiveÅŸte cu expresia %s",
         "NewGoalIntro": "Urmărirebiectiv conversie este una dintre cele mai eficiente modalități de a măsura și îmbunătăți obiectivele de afaceri.",
         "NewVisitorsConversionRateIs": "Rata de conversie pentru vizitatorii noi este %s",
-        "NoGoalsNeedAccess": "Numai un administrator sau un utilizator cu acces de Super utilizator poate adăuga Obiective pentru un anumit site web. Vă rugăm să întrebați administratorul Piwik pentru a configura un obiectiv pentru site-ul dumneavoastră. cui Urmărire Obiective este o modalitate foarte bună de a ajuta să înțeleagă și să maximizeze performanța site-ul dvs.!",
         "Optional": "(opţional)",
         "OverallConversionRate": "%s Rata de conversie globală (vizite cu un gol)",
         "OverallRevenue": "%s venit global",
diff --git a/plugins/Goals/lang/ru.json b/plugins/Goals/lang/ru.json
index 8c9333989efcb1f36e429a81127375b0023b3140..7869ed28fa93760d1b29627fb56caf3de6e56512 100644
--- a/plugins/Goals/lang/ru.json
+++ b/plugins/Goals/lang/ru.json
@@ -72,7 +72,6 @@
         "MatchesExpression": "совпадает с выражением %s",
         "NewGoalIntro": "Отслеживание достигнутых переходов является одним из наиболее эффективных способов измерить и улучшить свои бизнес-задачи.",
         "NewVisitorsConversionRateIs": "Коэффициент новых посетителей %s",
-        "NoGoalsNeedAccess": "Только Администратор или пользователь с доступом Супер Пользователя может добавлять Цели для данного сайта. Пожалуйста, обратитесь к администратору Piwik, чтобы создать Цели для вашего сайта.<br>Отслеживание Целей отличный способ, чтобы помочь понять и максимизировать эффективность веб-сайта!",
         "Optional": "(необязательно)",
         "OverallConversionRate": "%s общий коэффициент конверсий (переходы с выполненной целью)",
         "OverallRevenue": "%s общая прибыль",
diff --git a/plugins/Goals/lang/sr.json b/plugins/Goals/lang/sr.json
index d595bda425a4332bf4f88c24536c0d19666ebf6d..6d99bbad146d15ed053ab61121d50ec7e8332ad2 100644
--- a/plugins/Goals/lang/sr.json
+++ b/plugins/Goals/lang/sr.json
@@ -11,6 +11,10 @@
         "BestReferrers": "Reference koje imaju najbolje ispunjenje:",
         "CaseSensitive": "Obrati pažnju na velika i mala slova",
         "CancelAndReturnToGoals": "Odustani i %svrati se na listu ciljeva%s",
+        "CategoryTextGeneral_Visitors": "Lokacije posetilaca",
+        "CategoryTextReferrers_Referrers": "Reference",
+        "CategoryTextVisitsSummary_VisitsSummary": "Atributi korisnika",
+        "CategoryTextGeneral_Visit": "zainteresovanost",
         "ChooseGoal": "Izaberi cilj",
         "ClickOutlink": "Klik na link ka eksternom sajtu",
         "SendEvent": "Pošalji događaj",
@@ -73,6 +77,7 @@
         "NewGoalIntro": "Praćenje ispunjenja ciljeva je jedan od najefikasnijih načina za merenje i unapređenje vaših poslovnih ciljeva.",
         "NewVisitorsConversionRateIs": "Stepen ispunjenja od strane novih posetilaca je %s",
         "NoGoalsNeedAccess": "Samo administrator ili superkorisnik može definisati ciljeve za dati sajt. Molimo vas da zatražite od vašeg Piwik administratora da postavi ciljeve za vaš sajt.<br>Praćenje ciljeva je odličan način za razumevanje i maksimiziranje rada vašeg sajta!",
+        "NeedAccess": "Samo administrator ili superkorisnik može da upravlja ciljevima za dati sajt.",
         "Optional": "(opciono)",
         "OverallConversionRate": "%s ukupan stepen ispunjenja (posete sa ispunjenim ciljem)",
         "OverallRevenue": "%s ukupna zarada",
@@ -89,6 +94,8 @@
         "UpdateGoal": "Ažuriraj cilj",
         "URL": "URL",
         "ViewAndEditGoals": "Prikaz i izmena ciljeva",
+        "GoalsBy": "Ciljevi za %s",
+        "GoalsAdjective": "Ciljevi %s",
         "VisitPageTitle": "Prikaži stranicu",
         "VisitsUntilConv": "Poseta do ispunjenja",
         "VisitUrl": "Poseti datu adresu (stranicu ili grupu stranica)",
diff --git a/plugins/Goals/lang/sv.json b/plugins/Goals/lang/sv.json
index 72140e33f72d1ba6e74eeedbd36aad8b4335fa0a..400e8221f7d6ff9486240930207eaea4337219c5 100644
--- a/plugins/Goals/lang/sv.json
+++ b/plugins/Goals/lang/sv.json
@@ -76,7 +76,6 @@
         "MatchesExpression": "matchar uttrycket %s",
         "NewGoalIntro": "Att använda mål för konvertering är ett av de mest effektiva sätten att mäta och förbättra din affärsverksamhet.",
         "NewVisitorsConversionRateIs": "Nya besökares omvandlingsgrad är %s",
-        "NoGoalsNeedAccess": "Bara den som är Administratör eller har ett Superaccess konto kan lägga till mål för webbsidan. Fråga din Administratör om han eller hon kan sätta upp mål för din sida. Att ha mål är ett utmärkt sätt att få hjälp att förstå hur du maximerar din webbsidas resultat!",
         "Optional": "(frivilligt)",
         "OverallConversionRate": "%s total omvandlingsgrad (besök med ett uppnått mål)",
         "OverallRevenue": "%s totala intäkter",
diff --git a/plugins/Goals/lang/ta.json b/plugins/Goals/lang/ta.json
index a240dfa1fefe064a5f9cfea03b1df2c662e03110..d839b81d38dc072f7813f33aa9db8ab986d14974 100644
--- a/plugins/Goals/lang/ta.json
+++ b/plugins/Goals/lang/ta.json
@@ -1,6 +1,20 @@
 {
     "Goals": {
+        "AddGoal": "இலக்கை இணைக்க",
+        "AddNewGoal": "புதிய இலக்கை இணைத்திடுங்கள்",
+        "CategoryTextGeneral_Visitors": "பயனர் இடம்",
+        "ChooseGoal": "இலக்கைத் தேர்ந்தெடுங்கள்",
+        "Details": "இலக்கு விவரங்கள்",
+        "DeleteGoalConfirm": "%s இலக்கை நீக்குவதில் நீங்கள் உறுதியாக இருக்கிறீர்களா?",
         "Download": "ஒரு கோப்பை தரவிறக்கம் செய்",
+        "Ecommerce": "மின்வணிகம்",
+        "EcommerceAndGoalsMenu": "மின்வணிகமும் இலக்கும்",
+        "EcommerceOverview": "மின்வணிகம் - மேற்பார்வை",
+        "EcommerceReports": "மின்வணிக அறிக்கை",
+        "Filename": "கோப்பின் பெயர்",
+        "GoalName": "இலக்குப் பெயர்",
+        "Goals": "இலக்குகள்",
+        "GoalsOverview": "இலக்கு மேற்பார்வை",
         "ProductCategory": "பொருளின் வகை",
         "ProductName": "பொருளின் பெயர்",
         "Products": "பொருட்கள்",
diff --git a/plugins/ImageGraph/ImageGraph.php b/plugins/ImageGraph/ImageGraph.php
index 66c18b347760a717007d2d37720cd84af8b3de1a..5cb1be2e618dc043a7e2ddd759b9f9c4610baa0e 100644
--- a/plugins/ImageGraph/ImageGraph.php
+++ b/plugins/ImageGraph/ImageGraph.php
@@ -31,9 +31,9 @@ class ImageGraph extends \Piwik\Plugin
     );
 
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         $hooks = array(
             'API.getReportMetadata.end' => array('function' => 'getReportMetadata',
diff --git a/plugins/ImageGraph/lang/it.json b/plugins/ImageGraph/lang/it.json
index 35f181ef9ce246b4f78272f1b4122fe291feeef8..b86e0b0dd0145e8301afbe822eb86e971aeebaff 100644
--- a/plugins/ImageGraph/lang/it.json
+++ b/plugins/ImageGraph/lang/it.json
@@ -1,6 +1,6 @@
 {
     "ImageGraph": {
-        "ColumnOrdinateMissing": "La colonna '%s' non è stato trovata in questo rapporto. Prova una di queste %s",
+        "ColumnOrdinateMissing": "La colonna '%s' non è stato trovata in questo report. Prova una di queste %s",
         "PluginDescription": "Genera delle belle immagini statiche PNG di grafici per ognuno dei tuoi report dati."
     }
 }
\ No newline at end of file
diff --git a/plugins/Insights/Insights.php b/plugins/Insights/Insights.php
index 82b515d2aa7ba1bb5ca067411af18ad95733a8f4..9f02d7f17af312c1c1c95caa1270612a54a6dd34 100644
--- a/plugins/Insights/Insights.php
+++ b/plugins/Insights/Insights.php
@@ -13,9 +13,9 @@ namespace Piwik\Plugins\Insights;
 class Insights extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getJavaScriptFiles' => 'getJsFiles',
diff --git a/plugins/Insights/lang/cs.json b/plugins/Insights/lang/cs.json
index 1589d24ed2c2c802957659724aae8fbdd9e786ab..f3897366924a0b312785479ffbf472f586466661 100644
--- a/plugins/Insights/lang/cs.json
+++ b/plugins/Insights/lang/cs.json
@@ -1,5 +1,6 @@
 {
     "Insights": {
+        "PluginDescription": "Poskytuje vhledy o vašem provozu. Vhledy jsou dostupné buď jako widgety na nástěnce, nebo jako nová ikona v hlášeních, která zobrazuje nejdůležitější trendy v datech.",
         "ControlComparedToDescription": "Růst ve srovnání s",
         "ControlFilterByDescription": "Zobrazit všechny, pouze hybatele, pouze nové nebo ztracené",
         "DatePeriodCombinationNotSupported": "Pro tuto kombinaci období a data není možné vytvořit vhledy.",
diff --git a/plugins/Insights/lang/de.json b/plugins/Insights/lang/de.json
index 250e225adb199e4e69f483a60d8a64dda427c1e9..07b2e9a8c49aea60d46460b6f48ac1eea7aab801 100644
--- a/plugins/Insights/lang/de.json
+++ b/plugins/Insights/lang/de.json
@@ -3,7 +3,7 @@
         "PluginDescription": "Stellt Einblicke in ihren Traffic zur Verfügung. Diese \"Einblicke\" sind verfügbar als Dashboard Widgets sowie über ein neues Icon in den Berichten, dass Ihnen die Möglichkeit gibt die wichtigsten Trends ihrer Daten zu sehen.",
         "ControlComparedToDescription": "Wachstum verglichen mit",
         "ControlFilterByDescription": "Zeige alle, nur Verschiebungen, nur neue oder nur Ausstiege",
-        "DatePeriodCombinationNotSupported": "Es ist nicht möglich, Ansichten für dieses Datums- und Zeitbereichskombination zu generieren.",
+        "DatePeriodCombinationNotSupported": "Es ist nicht möglich, Ansichten für diese Datums- und Zeitraumskombination zu generieren.",
         "DayComparedToPreviousDay": "vorheriger Tag",
         "DayComparedToPreviousWeek": "gleicher Tag in vorheriger Woche",
         "DayComparedToPreviousYear": "gleicher Tag im vorherigen Jahr",
diff --git a/plugins/Insights/lang/it.json b/plugins/Insights/lang/it.json
index 750eebbc346719e29e272b1f44b2cb51959f7fbf..91296833d96624f59b927764fcd917c1c9bd9ede 100644
--- a/plugins/Insights/lang/it.json
+++ b/plugins/Insights/lang/it.json
@@ -9,22 +9,22 @@
         "DayComparedToPreviousYear": "lo stesso giorno dell'anno precedente",
         "Filter": "Filtro",
         "FilterIncreaserAndDecreaser": "Crescono & Diminuiscono",
-        "FilterOnlyDecreaser": "Diminuiscono solamente",
-        "FilterOnlyDisappeared": "Scomparse solamente",
-        "FilterOnlyIncreaser": "Crescono solamente",
-        "FilterOnlyMovers": "Solo protagonisti",
-        "FilterOnlyNew": "Solo nuovo",
+        "FilterOnlyDecreaser": "Solo diminuite",
+        "FilterOnlyDisappeared": "Solo scomparse",
+        "FilterOnlyIncreaser": "Solo aumentate",
+        "FilterOnlyMovers": "Solo protagoniste",
+        "FilterOnlyNew": "Solo nuove",
         "IgnoredChanges": "Le variazioni che interessano meno di %s visite sono state ignorate.",
         "MonthComparedToPreviousMonth": "mese precedente",
         "MonthComparedToPreviousYear": "stesso mese dell'anno precedente",
-        "MoversAndShakersWidgetTitle": "Protagonisti",
+        "MoversAndShakersWidgetTitle": "Protagoniste di tendenza",
         "NoResultMatchesCriteria": "Nessuna riga corrisponde ai criteri",
         "OverviewWidgetTitle": "Panoramica Approfondimenti",
-        "TitleConsideredInsightsChanges": "Righe aumentate o diminuite di almeno %1$s visite (%2$s%% di %3$s%% visite).",
+        "TitleConsideredInsightsChanges": "Righe aumentate o diminuite di almeno %1$s visite (%2$s%% di %3$s visite totali).",
         "TitleConsideredInsightsGrowth": "Le righe seguenti hanno una crescita di almeno %1$s%% comparata a %2$s.",
-        "TitleConsideredMoversAndShakersChanges": "Sono considerate protagoniste se sono cresciute di più di %1$s%% visite o si sono contratte di meno di %2$s%% visite, nuove entrate se sono aumentate di più di %3$s%% visite (%4$s), e righe scomparse se si sono contratte di meno di %5$s%% visite (%6$s).",
+        "TitleConsideredMoversAndShakersChanges": "Sono considerate protagoniste solo se sono cresciute di più di %1$s%% visite o si sono contratte di meno di %2$s%% visite, nuove entrate solo se sono aumentate di più di %3$s%% visite (%4$s), e righe scomparse se si sono contratte di meno di %5$s%% visite (%6$s).",
         "TitleConsideredMoversAndShakersGrowth": "%1$s cambiate da %2$s a %3$s comparate a %4$s. Basandoci su ciò ci si aspetta un'evoluzione per ciascuna riga di %5$s%%.",
-        "TitleRowChangeDetails": "'%1$s' è cambiato da %2$s (%3$s) a %4$s (%5$s) %6$s",
+        "TitleRowChangeDetails": "'%1$s' è cambiato da %2$s (%3$s) a %4$s (%5$s) %6$s.",
         "TitleRowDisappearedDetails": "'%1$s' è diminuita di %2$s e scomparsa in %3$s comparata a %4$s.",
         "TitleRowMoverAndShaker": "Questa riga ha avuto un impatto più alto della media.",
         "TitleRowNewDetails": "'%1$s' è aumentata di %2$s ed è nuova comparata a %3$s.",
diff --git a/plugins/Insights/lang/sr.json b/plugins/Insights/lang/sr.json
index 91e4542cef79e456c020bc603dea913e4ddc1ead..0e5a3c93e3c53d3c53f193df642b63d460ac275f 100644
--- a/plugins/Insights/lang/sr.json
+++ b/plugins/Insights/lang/sr.json
@@ -1,5 +1,6 @@
 {
     "Insights": {
+        "PluginDescription": "Omogućuje tzv. uvide u vaš saobraćaj. Uvidi su na raspolaganju u vidu vidžeta za konzolu i kao sličice u izveštajima i preko njih možete videti najbitnije trendove vaših podataka.",
         "ControlComparedToDescription": "Rast u poređenju sa",
         "ControlFilterByDescription": "Prikaži sve, samo movers, samo nove ili samo one koji su nestali",
         "DatePeriodCombinationNotSupported": "Nije moguće generisati uvid za datu kombinaciju datuma i perioda.",
diff --git a/plugins/Installation/.gitignore b/plugins/Installation/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..79a7fe6d2885c2b98b68ec229d32eba31033a06e
--- /dev/null
+++ b/plugins/Installation/.gitignore
@@ -0,0 +1 @@
+tests/System/processed/*xml
diff --git a/plugins/Installation/Controller.php b/plugins/Installation/Controller.php
index 7352a0df6e0f3b8da7c7f7187f9e1530f1f4be75..b73f35751fc7392ed6801ac36ee86c8584d3ff6a 100644
--- a/plugins/Installation/Controller.php
+++ b/plugins/Installation/Controller.php
@@ -471,6 +471,9 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
      */
     public function saveLanguage()
     {
+        if (DbHelper::isInstalled()) {
+            $this->checkTokenInUrl();
+        }
         $language = $this->getParam('language');
         LanguagesManager::setLanguageForSession($language);
         Url::redirectToReferrer();
diff --git a/plugins/Installation/Installation.php b/plugins/Installation/Installation.php
index 6a53bec2775cdb90a4031b14f8903bfefd5be2c3..47602c8543228892aee6f37870de4949e9023bb5 100644
--- a/plugins/Installation/Installation.php
+++ b/plugins/Installation/Installation.php
@@ -26,9 +26,9 @@ class Installation extends \Piwik\Plugin
     protected $installationControllerName = '\\Piwik\\Plugins\\Installation\\Controller';
 
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         $hooks = array(
             'Config.NoConfigurationFile'      => 'dispatch',
diff --git a/plugins/Installation/ServerFilesGenerator.php b/plugins/Installation/ServerFilesGenerator.php
index 64ad8e83d87a8c0d1c1d02adddcd0cd3ee06192f..fcd780523d96bd2cc6bd1b6042632f2c36da8663 100644
--- a/plugins/Installation/ServerFilesGenerator.php
+++ b/plugins/Installation/ServerFilesGenerator.php
@@ -39,7 +39,7 @@ class ServerFilesGenerator
             "</IfModule>\n\n" .
 
             "# Allow to serve static files which are safe\n" .
-            "<Files ~ \"\\.(gif|ico|jpg|png|svg|js|css|htm|html|swf|mp3|mp4|wav|ogg|avi)$\">\n" .
+            "<Files ~ \"\\.(gif|ico|jpg|png|svg|js|css|htm|html|swf|mp3|mp4|wav|ogg|avi|ttf)$\">\n" .
                  $allow . "\n" .
             "</Files>\n";
 
diff --git a/plugins/Installation/lang/cs.json b/plugins/Installation/lang/cs.json
index 12abcb41eafcb8ca4188a6395c1ace87918f10e6..b6ffa6dba8357e71ce2a6ca1eeb45bdcdc106354 100644
--- a/plugins/Installation/lang/cs.json
+++ b/plugins/Installation/lang/cs.json
@@ -15,6 +15,7 @@
         "DatabaseSetupLogin": "uživatelské jméno",
         "DatabaseSetupServer": "server s databází",
         "DatabaseSetupTablePrefix": "prefix tabulek",
+        "Email": "E-mail",
         "Extension": "přípona",
         "Filesystem": "Souborový systém",
         "GetInvolved": "Pokud se vám líbí, co vidíte, %1$szapojte se%2$s.",
@@ -37,7 +38,9 @@
         "NfsFilesystemWarningSuffixInstall": "Sessions založené na souborech jsou na NFS velmi pomalé. Proto Piwik použije databázové sessions. Pokud bude k nástěnkám přistupovat současně hodně uživatelů, možná budete muset zvýšit maximální počet klientských databázových spojení v konfiguraci databázového serveru.",
         "NoConfigFound": "Konfigurační soubor Piwiku nebyl nalezen a snažíte se vstoupit na stránku Piwiku.<br \/><b> » Můžete <a href='index.php'>teď nainstalovat<\/a><\/b><br \/><small>Pokud jste Piwik již instalovali a máte v DB nějaké tabulky, nemějte obavy. Můžete je použít a zachovat jejich data.!<\/small>",
         "Optional": "Volitelné",
+        "Password": "Heslo",
         "PasswordDoNotMatch": "hesla si neodpovídají",
+        "PasswordRepeat": "Heslo (zopakujte)",
         "PercentDone": "%s %% hotovo",
         "PleaseFixTheFollowingErrors": "Prosím opravte následující chyby",
         "DefaultSettings": "Výchozí nastavení Piwiku",
@@ -50,10 +53,13 @@
         "SeeBelowForMoreInfo": "Pro více informací se podívejte níže.",
         "SetupWebsite": "Nastavit Web",
         "SetupWebsiteError": "Při přidávání Webu se vyskytla chyba",
+        "SetupWebSiteName": "Jméno webových stránek",
         "SetupWebsiteSetupSuccess": "Web %s byl úspěšně vytvořen",
+        "SetupWebSiteURL": "URL webových stránek",
         "SiteSetup": "Prosím vytvořte první stránky, které budou sledovány a analyzovány Piwikem:",
         "SiteSetupFootnote": "Poznámka: Jakmile bude instalace Piwiku dokončena, budete moct přidat další stránky ke sledování.",
         "SuperUser": "Super uživatel",
+        "SuperUserLogin": "Přihlašovací jméno super uživatele",
         "SuperUserSetupError": "Při přidávání super uživatele došlo k chybě",
         "SuperUserSetupSuccess": "Super uživatel úspěšně vytvořen",
         "SystemCheck": "Kontrola systému",
@@ -67,6 +73,7 @@
         "SystemCheckExtensions": "Další požadovaná rozšíření",
         "SystemCheckFileIntegrity": "Integrita souborů",
         "SystemCheckFunctions": "Vyžadované funkce",
+        "SystemCheckFunctionHelp": "Tuto vestavěnou funkci musíte povolit.",
         "SystemCheckGDFreeType": "GT > 2.x + Freetype (grafika)",
         "SystemCheckGDHelp": "Sparkliny (malé grafy) nebudou fungovat.",
         "SystemCheckGlobHelp": "Tato vestavěná funkce byla na vašem hostiteli zakázaná. Piwik se pokusí tuto funkci emulovat, ale můžete zaznamenat další bezpečnostní omezení. Toto bude mít vliv na funčnost",
@@ -97,6 +104,7 @@
         "SystemCheckSummaryThereWereWarnings": "JVyskytly se problémy s vaším systémem. Piwik poběží, ale možná se nevyhnete menším problémům.",
         "SystemCheckTimeLimitHelp": "na webech s vysokým přenosem, může archivace vyžadovat více času, než je nyní povoleno.<br \/>Pokud je potřeba podívejte se na direktivu max_execution_time ve vašem souboru php.ini",
         "SystemCheckTracker": "Stav sledování",
+        "SystemCheckTrackerHelp": "Get požadavek na piwik.php selhal. Zkuste vyloučit tuto URL z HTTP autentizace a zakažte mod_security (možná budete muset požádat vašeho poskytovatele hostingu). Více informací naleznete v záznamu chyb web serveru.",
         "SystemCheckWarnDomHelp": "Měli byste povolit \"dom\" rozšíření t. j. nainstalovat balíček \"php-dom\" nebo \"php-xml\".",
         "SystemCheckWarning": "Piwik bude pracovat normálně, ale některé funkce budou chybět",
         "SystemCheckWarnJsonHelp": "Pro lepší výkon byste měli povolit rozšíření \"json\" t. j. nainstalovat balíček \"php-json\".",
@@ -121,6 +129,7 @@
         "TablesUpdatedSuccess": "Databáze byla úspěšně aktualizována z %1$s na %2$s!",
         "TablesWarningHelp": "Vyberte buď použití existujicích tabulek, nebo čistou instalaci, která v databázi smaže existující data.",
         "TablesWithSameNamesFound": "Některé %1$s tabulky ve vaší databázi %2$s mají stejná jména jako tabulky, které se snaží vytvořit Piwik",
+        "Timezone": "Časové pásmo webových stránek",
         "WeHopeYouWillEnjoyPiwik": "Doufáme, že si užijete používání Piwiku tak, jako si my užíváme jeho vývoj.",
         "Welcome": "Vítejte!",
         "WelcomeHelp": "<p>Piwik je open source program pro analýzu webu, pomocí kterého můžete jednoduše získat informace, které chcete od vaších návštěvníků.<\/p><p>Tento proces je rozdělen to %s jednoduchých kroků a zabere přibližne 5 minut.<\/p>",
diff --git a/plugins/Installation/lang/de.json b/plugins/Installation/lang/de.json
index 554cc875e1f98dc16aa158626762c497740977cd..440e1af1f7158c24867ffd3d9e408a0710335d34 100644
--- a/plugins/Installation/lang/de.json
+++ b/plugins/Installation/lang/de.json
@@ -86,7 +86,7 @@
         "SystemCheckMbstringHelp": "Die mbstring-Erweiterung wird benötigt, um multibyte-Zeichen in der Benutzeroberfläche und in den API-Antworten zu verarbeiten. Bitte überprüfen Sie ebenfalls, ob mbstring.func_overload in der php.ini auf \"0\" gesetzt ist.",
         "SystemCheckMemoryLimit": "Speicherlimit",
         "SystemCheckMemoryLimitHelp": "Auf einer stark frequentierten Website könnte es passieren, dass die Archivierung mehr Speicher erfordert als erlaubt. Falls erforderlich, ändern Sie den memory_limit Wert in ihrer php.ini Datei.",
-        "SystemCheckOpenURL": "URL",
+        "SystemCheckOpenURL": "Öffnen einer URL",
         "SystemCheckOpenURLHelp": "Eintragen in den Newsletter, Aktualisierungshinweise und Ein-Klick-Aktualisierungen erfordern die \"curl\" Erweiterung, allow_url_fopen=On und fsockopen() aktiviert.",
         "SystemCheckOtherExtensions": "Andere Erweiterungen",
         "SystemCheckOtherFunctions": "Andere Funktionen",
diff --git a/plugins/Installation/lang/sr.json b/plugins/Installation/lang/sr.json
index c8896c5f97df963cce6473109378827035049a41..45dd3d36b1dcc2c4c6f400522df822e17a6fd649 100644
--- a/plugins/Installation/lang/sr.json
+++ b/plugins/Installation/lang/sr.json
@@ -15,6 +15,7 @@
         "DatabaseSetupLogin": "korisničko ime",
         "DatabaseSetupServer": "server",
         "DatabaseSetupTablePrefix": "prefiks tabela",
+        "Email": "Mejl",
         "Extension": "proširenje",
         "Filesystem": "Sistem datoteka",
         "GetInvolved": "Ukoliko vam se sviđa ono što vidite, možete %1$suzeti učešće%2$s.",
@@ -37,7 +38,9 @@
         "NfsFilesystemWarningSuffixInstall": "Korišćene sesija na bazi datoteka na NFS sistemu je jako sporo tako da će piwik koristiti sesije u bazi podataka. Ako imate puno istovremenih korisnika Konzole, možda ćete morati da povećate maksimalan broj klijentskih konekcija ka serveru sa bazom.",
         "NoConfigFound": "Piwik datoteka sa podešavanjima nije nađena u momentu dok vi pokušavate da pristupite Piwik stranici.<br \/><b>  » Kliknite ovde kako biste <a href='index.php'>instalirali Piwik<\/a><\/b><br \/><small>Ukoliko ste već ranije instalirali Piwik i imate neke tabele u bazi podataka, bez brige: možete nastaviti da ih koristite i zadržite postojeće podatke!<\/small>",
         "Optional": "Opciono",
+        "Password": "Lozinka",
         "PasswordDoNotMatch": "lozinke se ne podudaraju",
+        "PasswordRepeat": "Lozinka (ponovo)",
         "PercentDone": "%s %% Završeno",
         "PleaseFixTheFollowingErrors": "Molimo vas da ispravite sledeće greške",
         "DefaultSettings": "Podrazumevana Piwik podešavanja",
@@ -50,10 +53,13 @@
         "SeeBelowForMoreInfo": "Pogledajte ispod za više informacija.",
         "SetupWebsite": "Podešavanje sajta",
         "SetupWebsiteError": "Došlo je do greške prilikom dodavanja sajta",
+        "SetupWebSiteName": "Naziv sajta",
         "SetupWebsiteSetupSuccess": "Sajt %s je uspešno ubačen!",
+        "SetupWebSiteURL": "Adresa sajta",
         "SiteSetup": "Molimo vas da podesite prvi sajt koji želite da pratite i analizirate pomoću Piwik-a:",
         "SiteSetupFootnote": "Kada se završi instalacija moći ćete da dodate još sajtova za praćenje!",
         "SuperUser": "Superkorisnik",
+        "SuperUserLogin": "Superkorisnik",
         "SuperUserSetupError": "Došlo je do greške prilikom dodavanja superkorisnika",
         "SuperUserSetupSuccess": "Superkorisnik uspešno kreiran!",
         "SystemCheck": "Provera sistema",
@@ -67,6 +73,7 @@
         "SystemCheckExtensions": "Potrebna proširenja",
         "SystemCheckFileIntegrity": "Integritet datoteka",
         "SystemCheckFunctions": "Potrebne funkcije",
+        "SystemCheckFunctionHelp": "Morate da uključite ovu funkciju.",
         "SystemCheckGDFreeType": "GD > 2.x + Freetype (grafikoni)",
         "SystemCheckGDHelp": "Mali grafikoni (linije sa tačkicama) neće raditi",
         "SystemCheckGlobHelp": "Ova funkcija je isključena na vašem serveru. Piwik će pokušati da je emulira ali može da naleti na neke dalja sigurnosna ograničenja. Svakako će biti uticaja na funkcionalnost.",
@@ -97,6 +104,7 @@
         "SystemCheckSummaryThereWereWarnings": "Postoje izvesni problemi sa vašim sistemom. Piwik će raditi ali možete iskusiti manje probleme.",
         "SystemCheckTimeLimitHelp": "Na sajtovima sa visokim saobraćajem proces arhiviranja podataka može zahtevati više vremena nego što je to trenutno dozvoljeno.<br \/>Promenite vrednost parametra max_execution_time u php.ini datoteci ukoliko je to neophodno.",
         "SystemCheckTracker": "Status trekera",
+        "SystemCheckTrackerHelp": "GET zahtev ka piwik.php nije uspeo. Pokušajte da stavite ovu adresu na belu listu za mod_security i HTTP Authentication. Za više informacija o ovoj grešci pogledajte serverski zapis sa greškama.",
         "SystemCheckWarnDomHelp": "Trebalo bi da uključite \"dom\" proširenje (instalirajte npr. \"php-dom\" i\/ili \"php-xml\" paket).",
         "SystemCheckWarning": "Piwik će raditi normalno ali neke funkcije neće biti dostupne",
         "SystemCheckWarnJsonHelp": "Trebalo bi da uključite \"json\" proširenje (instalirajte npr. \"php-json\" paket) zarad boljih performansi",
@@ -121,6 +129,7 @@
         "TablesUpdatedSuccess": "Baza podataka je uspešno nadograđena sa verzije %1$s na verziju %2$s!",
         "TablesWarningHelp": "Ili izaberite opciju da nastavite sa korišćenjem postojećih tabela ili opciju nove instalacije čime ćete obrisati postojeće podatke iz baze",
         "TablesWithSameNamesFound": "Neke %1$s tabele u vašoj bazi %2$s imaju ista imena kao i tabele koje Piwik pokušava da kreira",
+        "Timezone": "Vremenska zona sajta",
         "WeHopeYouWillEnjoyPiwik": "Nadamo se da ćete uživati u korišćenju Piwik-a isto koliko smo mi uživali u njegovom stvaranju.",
         "Welcome": "Dobrodošli!",
         "WelcomeHelp": "<p>Piwik je alat otvorenog koda za analizu saobraćaja na sajtovima koji vam na lak način pruža željene informacije o vašim posetiocima.<\/p><p>Proces instalacije je podeljen na %s jednostavnih koraka i zahteva svega 5 minuta vašeg vremena.<\/p>",
diff --git a/plugins/Installation/lang/ta.json b/plugins/Installation/lang/ta.json
index 5119c446d6fd63958d7a1f209128d32f1f46e886..a8db325676185f3edf86861adf402345da6fd09f 100644
--- a/plugins/Installation/lang/ta.json
+++ b/plugins/Installation/lang/ta.json
@@ -1,7 +1,10 @@
 {
     "Installation": {
+        "CollaborativeProject": "பிவிக் என்பது உலகமெங்கும் ஒத்த கருத்தும் அன்பும் கொண்ட பெருமக்களால் கட்டமைக்கப்படும் கூட்டு முயற்சித் திட்டப்பணி ஆகும்.",
+        "Congratulations": "வாழ்த்துகள்!",
         "DatabaseAbilities": "தரவுத்தள திறன்கள்",
         "DatabaseCreation": "தரவுத்தள உருவாக்கம்",
+        "DatabaseErrorConnect": "தரவுத்தள வழங்குநரைத் தொடர்பு கொள்ளும் போது தவறு நேர்ந்துள்ளது!",
         "DatabaseServerVersion": "தரவுத்தள சர்வர் பதிப்பு",
         "DatabaseSetup": "தரவுத்தள அமைப்பு முறை",
         "DatabaseSetupAdapter": "இசைவாக்கி",
@@ -9,18 +12,50 @@
         "DatabaseSetupLogin": "புகுபதிகை",
         "DatabaseSetupServer": "தரவுத்தள சர்வர்",
         "DatabaseSetupTablePrefix": "அட்டவணை முன்வை",
+        "Email": "மின்னஞ்சல்",
         "Extension": "நீட்டிப்பு",
         "Filesystem": "கோப்பு முறை",
         "Installation": "நிறுவல்",
         "InstallationStatus": "நிறுவுதல் நிலை",
+        "Legend": "மேதை",
         "Optional": "விருப்பத்தேர்வு",
+        "Password": "கடவுச்சொல்",
         "PasswordDoNotMatch": "கடவுச்சொல் பொருந்தவில்லை",
+        "PasswordRepeat": "கடவுச் சொல்(மீண்டும் உள்ளிடுக)",
+        "PleaseFixTheFollowingErrors": "கீழ்க்காணும் தவறுகளைத் திருத்துங்களேன்",
+        "DefaultSettings": "பிவிக் இயல்பு அமைப்புகள்",
+        "Requirements": "பிவிக் தேவைகள்",
+        "PiwikOrgNewsletter": "பிவிக் சமூகத்தின் முக்கியமான விவரங்களை எனக்கு மின்னஞ்சல் இடுங்கள்!",
+        "SeeBelowForMoreInfo": "மேலதிக விவரங்களுக்குக் கீழுள்ளவற்றைக் காண்க.",
+        "SetupWebsite": "இணையத்தளத்தை அமைக்க.",
         "SetupWebsiteError": "இணையதளத்தை சேர்ப்பதில் பிழை உள்ளது",
+        "SetupWebSiteName": "இணையத்தளத்தின் பெயர்",
         "SetupWebsiteSetupSuccess": "இணையதளம் %s வெற்றிகரமாக உருவாக்கப்பட்டது!",
+        "SetupWebSiteURL": "இணையத்தள முகவரி",
+        "SuperUser": "உயர் பயனர்",
+        "SuperUserLogin": "உயர் பயனர் உள்நுழைவு",
+        "SuperUserSetupError": "உயர் பயனரை உருவாக்கும் போது தவறு நடந்துள்ளது.",
+        "SuperUserSetupSuccess": "உயர் பயனர் உருவாக்கப்பட்டுள்ளார்",
+        "SystemCheckFileIntegrity": "கோப்பு ஒருங்கமைப்பு",
+        "SystemCheckFunctions": "தேவையான செயல்பாடுகள்",
+        "SystemCheckFunctionHelp": "நீங்கள் இந்த அடிப்படைச் செயல்பாட்டை நடைமுறைப்படுத்த வேண்டும்.",
+        "SystemCheckMemoryLimit": "நினைவக அளவு",
         "SystemCheckOpenURL": "வெளிப்படையான இணைப்புகள்(உரலி)",
         "SystemCheckOtherExtensions": "மற்ற நீட்டிப்புகள்",
         "SystemCheckOtherFunctions": "மற்ற செயல்பாடுகள்",
         "SystemCheckPhp": "பிஎச்பி பதிப்பு",
-        "SystemCheckTracker": "கண்காணிப்பு நிலை"
+        "SystemCheckTracker": "கண்காணிப்பு நிலை",
+        "SystemCheckWriteDirs": "எழுத ஒப்புதல் உள்ள அடைவுகள்",
+        "NotSupported": "ஆதரிக்கப்படவில்லை",
+        "Tables": "அட்டவணைகள் உருவாக்கப்பட்டுக் கொண்டிருக்கின்றன.",
+        "TablesCreatedSuccess": "வெற்றிகரமாக அட்டவணைகள் உருவாக்கப்பட்டன.",
+        "TablesDelete": "கண்டறியப்பட்டுள்ள அட்டவணையை நீக்குக.",
+        "TablesDeletedSuccess": "ஏற்கெனவே இருந்த பிவிக் அட்டவணைகள் வெற்றிகரமாக நீக்கப்பட்டன.",
+        "TablesFound": "தரவுத்தளத்தில் பின்வரும் அட்டவணைகள் கண்டறியப்பட்டன.",
+        "TablesReuse": "ஏற்கெனவே உள்ள அட்டவணையை மீண்டும் பயன்படுத்துக.",
+        "TablesUpdatedSuccess": "தரவுத்தளம் வெற்றிகரமாக %1$s இல் இருந்து %2$s இற்கு உயர்த்தப்பட்டது!",
+        "Welcome": "வருக! நல்வரவு!",
+        "WelcomeToCommunity": "பிவிக் சமூகத்திற்குத் தங்களை வரவேற்கிறோம்!",
+        "CannotConnectToDb": "தரவுத் தளத்தை இணைக்க முடியவில்லை"
     }
 }
\ No newline at end of file
diff --git a/plugins/Installation/lang/zh-cn.json b/plugins/Installation/lang/zh-cn.json
index 85adf949ad98c9158e8c98bcccba1cc012b23bd7..edf6caa2a60a20efb7af5cb695a494d15d718684 100644
--- a/plugins/Installation/lang/zh-cn.json
+++ b/plugins/Installation/lang/zh-cn.json
@@ -44,8 +44,10 @@
         "PercentDone": "%s %% 已完成",
         "PleaseFixTheFollowingErrors": "请修复以下错误",
         "DefaultSettings": "默认 Piwik 设置",
+        "DefaultSettingsHelp": "Piwik自带的默认设置。现在,您可以自定义它们或稍后在管理介面上做。",
         "Requirements": "Piwik 需求",
         "RestartWebServer": "做过这个改动之后,请重新启动网络服务器。",
+        "ReusingTables": "重用的表",
         "PiwikOrgNewsletter": "邮件通知我重大的 Piwik 社区更新",
         "PiwikProNewsletter": "给我发送 %sPiwik PRO%s 的折扣和服务相关的信息",
         "SeeBelowForMoreInfo": "更详细的信息请看下面",
@@ -71,6 +73,7 @@
         "SystemCheckExtensions": "其他需要的扩展组件",
         "SystemCheckFileIntegrity": "文件完整性",
         "SystemCheckFunctions": "必需的函数",
+        "SystemCheckFunctionHelp": "您需要启用这个内置的功能。",
         "SystemCheckGDFreeType": "GD > 2.x + Freetype (graphics)",
         "SystemCheckGDHelp": "波形图 (小图) 将无法显示!",
         "SystemCheckGlobHelp": "这个内置函数在您的主机上已停用。Piwik 会尝试模拟这个功能,但可能会遇到其它的安全限制,功能可能受到影响。",
@@ -80,6 +83,7 @@
         "SystemCheckJsonHelp": "Piwik 需要 php5-json 扩展来读写 JSON 数据。",
         "SystemCheckMailHelp": "意见反馈及忘记密码信息若沒有 mail() 将无法寄送。",
         "SystemCheckMbstring": "mbstring",
+        "SystemCheckMbstringHelp": "這個mbstring扩展需要处理多字节字符的用户界面和API响应。同时请检查php.ini中的mbstring.func_overload设置为\"0\"。",
         "SystemCheckMemoryLimit": "内存限制",
         "SystemCheckMemoryLimitHelp": "在一个高流量的网站,数据处理过程中使用的内存可能超出当前系统的允许值!如果需要,请修改 php.ini文件中的 memory_limit 值!",
         "SystemCheckOpenURL": "开启网址",
@@ -100,6 +104,7 @@
         "SystemCheckSummaryThereWereWarnings": "您的系统有些问题,Piwik 可以运行,但是可能会出现些小错误。",
         "SystemCheckTimeLimitHelp": "在一个高流量的网站,数据处理需要的时间可能会超过目前系统所允许的时间!如有必要,请修改 php.ini 文件中的 max_execution_time 值!",
         "SystemCheckTracker": "跟踪状态",
+        "SystemCheckTrackerHelp": "从piwik.php请求失败。试试这个白名单网址,从HTTP验证和禁用mod_security的 (你可能要问你的虚拟主机提供商)。有关错误的详细信息,请检查您的Web服务器错误日志文件。",
         "SystemCheckWarnDomHelp": "需要启用 \"dom\" 扩展 (例如安装 \"php-dom\" 或者 \"php-xml\" 包)。",
         "SystemCheckWarning": "Piwik 将正常工作,但某些功能可能无效",
         "SystemCheckWarnJsonHelp": "为了更好的性能,您应该使 \"json\" 扩展有效 (例如安装 \"php-json\" 包)。",
@@ -129,6 +134,7 @@
         "Welcome": "欢迎使用!",
         "WelcomeHelp": "<p>Piwik 是一个让您能够轻易取得您所想要的访客信息的开放原始码页面分析软件!<\/p><p>此安装过程分为 %s 个简易的步骤,并且将仅花大约 5 分钟的时间!<\/p>",
         "WelcomeToCommunity": "欢迎来到 Piwik 社区!",
-        "CannotConnectToDb": "无法连接至数据库"
+        "CannotConnectToDb": "无法连接至数据库",
+        "CannotConnectToDbResolvingExplanation": "这可能是一个暂时的问题,请尝试 %1$s 刷新页面 %2$s。如果问题仍然存在,请联系您的Piwik管理员。"
     }
 }
\ No newline at end of file
diff --git a/plugins/LanguagesManager/LanguagesManager.php b/plugins/LanguagesManager/LanguagesManager.php
index 882545f0d8b7b1861f4c54b75ac645295d5150c5..012de9cd50980606b1d96c95b3dd312ac10be909 100644
--- a/plugins/LanguagesManager/LanguagesManager.php
+++ b/plugins/LanguagesManager/LanguagesManager.php
@@ -27,9 +27,9 @@ use Piwik\View;
 class LanguagesManager extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getStylesheetFiles'            => 'getStylesheetFiles',
diff --git a/plugins/LanguagesManager/Test/Unit/TranslationWriter/Validate/CoreTranslationsTest.php b/plugins/LanguagesManager/Test/Unit/TranslationWriter/Validate/CoreTranslationsTest.php
index 2b25f14f5b44c36882e4ac547318fc3e00cfe81b..fcd110ca16797da67c53650090f4992bac3dbee4 100644
--- a/plugins/LanguagesManager/Test/Unit/TranslationWriter/Validate/CoreTranslationsTest.php
+++ b/plugins/LanguagesManager/Test/Unit/TranslationWriter/Validate/CoreTranslationsTest.php
@@ -61,15 +61,6 @@ class CoreTranslationsTest extends \PHPUnit_Framework_TestCase
                 ),
                 CoreTranslations::ERRORSTATE_TRANSLATORINFOREQUIRED
             ),
-            array(
-                array(
-                    'General' => array(
-                        'Locale' => 'de_DE.UTF-8',
-                        'TranslatorName' => 'name',
-                    )
-                ),
-                CoreTranslations::ERRORSTATE_TRANSLATOREMAILREQUIRED
-            ),
             array(
                 array(
                     'General' => array(
diff --git a/plugins/LanguagesManager/Test/Unit/TranslationWriter/WriterTest.php b/plugins/LanguagesManager/Test/Unit/TranslationWriter/WriterTest.php
index 69f7f457e7be2f0eff227b33ea2b910aa8d1c4ec..9f1fda9568bae70e2cacefc919553d3c62dfffdb 100644
--- a/plugins/LanguagesManager/Test/Unit/TranslationWriter/WriterTest.php
+++ b/plugins/LanguagesManager/Test/Unit/TranslationWriter/WriterTest.php
@@ -103,8 +103,6 @@ class WriterTest extends \PHPUnit_Framework_TestCase
         return array(
             array(array('General' => array('Locale' => '')) + $translations, CoreTranslations::ERRORSTATE_LOCALEREQUIRED),
             array(array('General' => array('Locale' => 'de_DE.UTF-8')) + $translations, CoreTranslations::ERRORSTATE_TRANSLATORINFOREQUIRED),
-            array(array('General' => array('Locale' => 'de_DE.UTF-8',
-                                           'TranslatorName' => 'name')) + $translations, CoreTranslations::ERRORSTATE_TRANSLATOREMAILREQUIRED),
             array(array('General' => array('Locale' => 'invalid',
                                            'TranslatorName' => 'name',
                                            'TranslatorEmail' => 'name@domain.com')) + $translations, CoreTranslations::ERRORSTATE_LOCALEINVALID),
diff --git a/plugins/LanguagesManager/TranslationWriter/Validate/CoreTranslations.php b/plugins/LanguagesManager/TranslationWriter/Validate/CoreTranslations.php
index 4c4fa065aa39b1b7a9dfbbf79401e95d1f1430b5..bbb0057b237605b5bd2c92f9639567dbbcd2024d 100644
--- a/plugins/LanguagesManager/TranslationWriter/Validate/CoreTranslations.php
+++ b/plugins/LanguagesManager/TranslationWriter/Validate/CoreTranslations.php
@@ -20,7 +20,6 @@ class CoreTranslations extends ValidateAbstract
      */
     const ERRORSTATE_LOCALEREQUIRED = 'Locale required';
     const ERRORSTATE_TRANSLATORINFOREQUIRED = 'Translator info required';
-    const ERRORSTATE_TRANSLATOREMAILREQUIRED = 'Translator email required';
     const ERRORSTATE_LOCALEINVALID = 'Locale is invalid';
     const ERRORSTATE_LOCALEINVALIDLANGUAGE = 'Locale is invalid - invalid language code';
     const ERRORSTATE_LOCALEINVALIDCOUNTRY = 'Locale is invalid - invalid country code';
@@ -61,11 +60,6 @@ class CoreTranslations extends ValidateAbstract
             return false;
         }
 
-        if (empty($translations['General']['TranslatorEmail'])) {
-            $this->message = self::ERRORSTATE_TRANSLATOREMAILREQUIRED;
-            return false;
-        }
-
         /** @var LanguageDataProvider $languageDataProvider */
         $languageDataProvider = StaticContainer::get('Piwik\Intl\Data\Provider\LanguageDataProvider');
         /** @var RegionDataProvider $regionDataProvider */
diff --git a/plugins/LeftMenu/LeftMenu.php b/plugins/LeftMenu/LeftMenu.php
index 00b40d9a6f4cc6f3a76b7c98b68776bc491754b4..522965e6b8a81bd799c89cf51eb8920ac38a090a 100755
--- a/plugins/LeftMenu/LeftMenu.php
+++ b/plugins/LeftMenu/LeftMenu.php
@@ -11,7 +11,7 @@ namespace Piwik\Plugins\LeftMenu;
 
 class LeftMenu extends \Piwik\Plugin
 {
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getStylesheetFiles' => array('function' => 'getStylesheetFiles', 'after' => true),
diff --git a/plugins/LeftMenu/lang/cs.json b/plugins/LeftMenu/lang/cs.json
index e7d98158700de045f39ce447bb257d35338f9b16..e15938a574086816b06043197734a813c6330151 100644
--- a/plugins/LeftMenu/lang/cs.json
+++ b/plugins/LeftMenu/lang/cs.json
@@ -1,5 +1,6 @@
 {
     "LeftMenu": {
+        "PluginDescription": "Umístit menu nástěnky nalevo.",
         "SettingsIntroduction": "Zásuvný modul levé menu přesune menu hlášení na levou stranu (je-li povolen). To je především užitečné na velkých displejích.",
         "GlobalSettingTitle": "Levé menu je ve výchozím stavu povoleno",
         "GlobalSettingDescription": "Definuje systémovou výchozí hodnotu pro všechny uživatele.",
diff --git a/plugins/LeftMenu/lang/sr.json b/plugins/LeftMenu/lang/sr.json
index 12ce6cf860f5c7e594ce8bf15d8408dce97c5701..e2aaa6bbc15094efafab9f1d5324c1c621b9f2ac 100644
--- a/plugins/LeftMenu/lang/sr.json
+++ b/plugins/LeftMenu/lang/sr.json
@@ -1,5 +1,6 @@
 {
     "LeftMenu": {
+        "PluginDescription": "Postavi meni za konzolu na levu stranu.",
         "SettingsIntroduction": "Dodatak za levi meni će pomeriti meni za izveštaje sa vrha na levu stranu. Ovo je praktično od velikih monitora.",
         "GlobalSettingTitle": "Levi meni je podrazumevano uključen",
         "GlobalSettingDescription": "Postavljanje podrazumevanih vrednosti za sve korisnike.",
diff --git a/plugins/Live/Live.php b/plugins/Live/Live.php
index 3dbe242b78bdac4c342a31631110d7929047dd2f..93e8d67881121261b4e800ef5ae4467cb90eab91 100644
--- a/plugins/Live/Live.php
+++ b/plugins/Live/Live.php
@@ -10,8 +10,6 @@ namespace Piwik\Plugins\Live;
 
 use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
 
-require_once PIWIK_INCLUDE_PATH . '/plugins/Live/VisitorLog.php';
-
 /**
  *
  */
@@ -19,9 +17,9 @@ class Live extends \Piwik\Plugin
 {
 
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getJavaScriptFiles'        => 'getJsFiles',
diff --git a/plugins/Live/Model.php b/plugins/Live/Model.php
index 3a06c58d45c538dc4d2fbcbfeb433cfaf5eebd96..8f7087405eaaa82a42aa4e55b35c417b79f48f42 100644
--- a/plugins/Live/Model.php
+++ b/plugins/Live/Model.php
@@ -33,7 +33,7 @@ class Model
      */
     public function queryActionsForVisit($idVisit, $actionsLimit)
     {
-        $maxCustomVariables = CustomVariables::getMaxCustomVariables();
+        $maxCustomVariables = CustomVariables::getNumUsableCustomVariables();
 
         $sqlCustomVariables = '';
         for ($i = 1; $i <= $maxCustomVariables; $i++) {
diff --git a/plugins/Live/Reports/GetLastVisitsDetails.php b/plugins/Live/Reports/GetLastVisitsDetails.php
index c54c97e924d5705be0c7e7ff805f26ffbcc14468..8cf2268d284423c48550480b2d48327ad2a27df7 100644
--- a/plugins/Live/Reports/GetLastVisitsDetails.php
+++ b/plugins/Live/Reports/GetLastVisitsDetails.php
@@ -10,7 +10,7 @@ namespace Piwik\Plugins\Live\Reports;
 
 use Piwik\Menu\MenuReporting;
 use Piwik\Plugin\Report;
-use Piwik\Plugins\Live\VisitorLog;
+use Piwik\Plugins\Live\Visualizations\VisitorLog;
 use Piwik\WidgetsList;
 
 class GetLastVisitsDetails extends Base
diff --git a/plugins/Live/Reports/GetSimpleLastVisitCount.php b/plugins/Live/Reports/GetSimpleLastVisitCount.php
index d018f83f0d99bb2f8d69ddc444234ef5fdcfdf17..9b0db307699ab2146854a3a76cafaa65f89e91e9 100644
--- a/plugins/Live/Reports/GetSimpleLastVisitCount.php
+++ b/plugins/Live/Reports/GetSimpleLastVisitCount.php
@@ -13,7 +13,6 @@ use Piwik\Metrics\Formatter;
 use Piwik\Piwik;
 use Piwik\Plugin\Report;
 use Piwik\Plugins\Live\Controller;
-use Piwik\Plugins\Live\VisitorLog;
 use Piwik\API\Request;
 use Piwik\View;
 
diff --git a/plugins/Live/Visitor.php b/plugins/Live/Visitor.php
index dae839cd9ab303234840eeca845225aa9e85f393..341ac590c9d2fbbc12df4eb2f3847d84a4a124da 100644
--- a/plugins/Live/Visitor.php
+++ b/plugins/Live/Visitor.php
@@ -250,7 +250,7 @@ class Visitor implements VisitorInterface
         $actionDetails = $model->queryActionsForVisit($idVisit, $actionsLimit);
 
         $formatter = new Formatter();
-        $maxCustomVariables = CustomVariables::getMaxCustomVariables();
+        $maxCustomVariables = CustomVariables::getNumUsableCustomVariables();
 
         foreach ($actionDetails as $actionIdx => &$actionDetail) {
             $actionDetail =& $actionDetails[$actionIdx];
@@ -383,7 +383,6 @@ class Visitor implements VisitorInterface
         }
 
         $actions = array_merge($actionDetails, $goalDetails, $ecommerceDetails);
-
         usort($actions, array('static', 'sortByServerTime'));
 
         foreach ($actions as &$action) {
diff --git a/plugins/Live/VisitorLog.php b/plugins/Live/Visualizations/VisitorLog.php
similarity index 90%
rename from plugins/Live/VisitorLog.php
rename to plugins/Live/Visualizations/VisitorLog.php
index 6c817f5b2dbdbcfa858c56ffbbddba67af2dbc64..8c8c1e81397cd691fc87682b751b1cedfd4ddb7d 100644
--- a/plugins/Live/VisitorLog.php
+++ b/plugins/Live/Visualizations/VisitorLog.php
@@ -6,10 +6,11 @@
  * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
  *
  */
-namespace Piwik\Plugins\Live;
+namespace Piwik\Plugins\Live\Visualizations;
 
 use Piwik\Common;
 use Piwik\Piwik;
+use Piwik\Plugin\ViewDataTable;
 use Piwik\Plugin\Visualization;
 use Piwik\View;
 
@@ -20,8 +21,10 @@ use Piwik\View;
  */
 class VisitorLog extends Visualization
 {
-    const ID = 'Piwik\Plugins\Live\VisitorLog';
+    const ID = 'VisitorLog';
     const TEMPLATE_FILE = "@Live/_dataTableViz_visitorLog.twig";
+    const FOOTER_ICON_TITLE = '';
+    const FOOTER_ICON = '';
 
     public static function getDefaultConfig()
     {
@@ -90,4 +93,9 @@ class VisitorLog extends Visualization
             )
         );
     }
+
+    public static function canDisplayViewDataTable(ViewDataTable $view)
+    {
+        return ($view->requestConfig->getApiModuleToRequest() === 'Live');
+    }
 }
diff --git a/plugins/Live/VisitorLog/Config.php b/plugins/Live/Visualizations/VisitorLog/Config.php
similarity index 93%
rename from plugins/Live/VisitorLog/Config.php
rename to plugins/Live/Visualizations/VisitorLog/Config.php
index 42a09b50ca1aa6c4b854ba93f751070635be8378..e7bc817a00a034c05c141dd9d96e1ea4d3f669bb 100644
--- a/plugins/Live/VisitorLog/Config.php
+++ b/plugins/Live/Visualizations/VisitorLog/Config.php
@@ -7,7 +7,7 @@
  *
  */
 
-namespace Piwik\Plugins\Live\VisitorLog;
+namespace Piwik\Plugins\Live\Visualizations\VisitorLog;
 
 use Piwik\ViewDataTable\Config as VisualizationConfig;
 
diff --git a/plugins/Live/lang/cs.json b/plugins/Live/lang/cs.json
index 6ab27f36cee80648f8104cec10890d19e042668b..ec3ea624fdbfe2e68caf38cd198e3c926d34f6c6 100644
--- a/plugins/Live/lang/cs.json
+++ b/plugins/Live/lang/cs.json
@@ -38,6 +38,9 @@
         "VisitSummary": "Strávil celkem %1$s%2$s na stránkách%3$s a %4$szobrazil %5$s stránek za %6$s návštěv.%7$s",
         "RowActionTooltipDefault": "Zobrazit záznam návštěvníků rozdělený podle tohoto řádku",
         "RowActionTooltipWithDimension": "Zobrazit záznam návštěvníků rozdělený podle %s",
-        "RowActionTooltipTitle": "Otevřít rozdělený záznam návštěvníků"
+        "RowActionTooltipTitle": "Otevřít rozdělený záznam návštěvníků",
+        "SegmentedVisitorLogTitle": "Záznam návštěvníků, zobrazující návštěvy, kde %s je \"%s\"",
+        "OnClickPause": "%s běží. Klikněte pro pozastavení.",
+        "OnClickStart": "%s je zastaven. Klikněte pro spuštění."
     }
 }
\ No newline at end of file
diff --git a/plugins/Live/lang/it.json b/plugins/Live/lang/it.json
index cf43f3e242b3b6030c8804aad43b2926d3f8f3b0..5a00adfa52e453dc3aa35063229ec20b4adef5b2 100644
--- a/plugins/Live/lang/it.json
+++ b/plugins/Live/lang/it.json
@@ -9,7 +9,7 @@
         "FirstVisit": "Prima visita",
         "GoalType": "Tipo",
         "HideMap": "nascondi mappa",
-        "KeywordRankedOnSearchResultForThisVisitor": "La parola chiave %1$s è stata classificata %2$s su %3$s nei risultati di ricerca per il visitatore",
+        "KeywordRankedOnSearchResultForThisVisitor": "La parola chiave %1$s è stata classificata %2$s su %3$s nei risultati di ricerca per questo visitatore",
         "LastHours": "Ultime %s ore",
         "LastMinutes": "Ultimi %s minuti",
         "LastVisit": "Ultima visita",
@@ -24,13 +24,13 @@
         "PluginDescription": "Fornisce un log dei visitatori \\\"live\\\" e ti permette di vedere i tuoi visitatori in tempo reale in un widget della dashboard. Il plugin ti permette anche di vedere un profilo visitatore per ciascuno degli utenti.",
         "PreviousVisitor": "Visitatore precedente",
         "RealTimeVisitorCount": "Conteggio Visitatori in Tempo Reale",
-        "Referrer_URL": "URL del referer",
+        "Referrer_URL": "URL del referrer",
         "ShowMap": "mostra mappa",
         "SimpleRealTimeWidget_Message": "%s e %s negli ultimi %s",
         "ViewVisitorProfile": "Guarda profilo visitatore",
         "VisitedPages": "Pagine visitate",
         "VisitorLog": "Log Visitatori",
-        "VisitorLogDocumentation": "Questa tabella mostra le ultime visite nell'intervallo di date selezionato.%s Se l'intervallo di date comprende oggi, è possibile vedere in tempo reale i tuoi visitatori! %s I dati visualizzati qui sono sempre aggiornati, indipendentemente da quanto spesso usi l'archiviazione automatica.",
+        "VisitorLogDocumentation": "Questa tabella mostra le ultime visite nell'intervallo di date selezionato. Puoi vedere quando c'è stata l'ultima visita di un visitatore posizionando il mouse sopra la data di una visita. %sSe l'intervallo di date comprende oggi, è possibile vedere in tempo reale i tuoi visitatori!%s I dati visualizzati qui sono sempre aggiornati, indipendentemente da quanto spesso usi l'archiviazione automatica.",
         "VisitorProfile": "Profilo visitatore",
         "VisitorsInRealTime": "Visite in tempo reale",
         "VisitorsLastVisit": "L'ultima visita di questo visitatore è stata %s giorni fa.",
diff --git a/plugins/Live/templates/_dataTableViz_visitorLog.twig b/plugins/Live/templates/_dataTableViz_visitorLog.twig
index 3aa33fc91630292dae66f598613281e839e025b2..9944f53c19ce539d546f419451f9d3795f4ce673 100644
--- a/plugins/Live/templates/_dataTableViz_visitorLog.twig
+++ b/plugins/Live/templates/_dataTableViz_visitorLog.twig
@@ -57,7 +57,7 @@
                     {{ visitor.getColumn('goalConversions') }}
                     {% if visitHasEcommerceActivity %}
                         &nbsp;
-                        <img src="{{ visitor.getColumn('visitEcommerceStatusIcon') }}" title="{{ visitor.getColumn('visitEcommerceStatus') }}"/>
+                        <img src="{{ visitor.getColumn('visitEcommerceStatusIcon') }}" class='visitorLogTooltip' title="{{ visitor.getColumn('visitEcommerceStatus') }}"/>
                     {% endif %}
                 </span>
             {# Ecommerce activity only (no goal) #}
@@ -97,7 +97,7 @@
             {% set searchName %}{{ visitor.getColumn('referrerName') }}{% endset %}
             {% set position %}#{{ visitor.getColumn('referrerKeywordPosition') }}{% endset %}
             {% if visitor.getColumn('referrerKeywordPosition') %}
-                <span title='{{ 'Live_KeywordRankedOnSearchResultForThisVisitor'|translate(keyword,position,searchName) }}' class='visitorRank'>
+                <span title='{{ 'Live_KeywordRankedOnSearchResultForThisVisitor'|translate(keyword,position,searchName) }}' class='visitorRank visitorLogTooltip'>
                                 <span class='hash'>#</span>
                     {{ visitor.getColumn('referrerKeywordPosition') }}
                             </span>
@@ -111,7 +111,7 @@
         <div class="card row">
 
             {% if visitor.getColumn('visitorId') is not empty and not clientSideParameters.hideProfileLink %}
-                <a class="visitor-log-visitor-profile-link" title="{{ 'Live_ViewVisitorProfile'|translate }}" data-visitor-id="{{ visitor.getColumn("visitorId") }}">
+                <a class="visitor-log-visitor-profile-link visitorLogTooltip" title="{{ 'Live_ViewVisitorProfile'|translate }}" data-visitor-id="{{ visitor.getColumn("visitorId") }}">
                     <img src="plugins/Live/images/visitorProfileLaunch.png"/> <span>{{ 'Live_ViewVisitorProfile'|translate }}
                         {%- if visitor.getColumn('userId') is not empty %}: {{ visitor.getColumn('userId')|raw }}{% endif %}</span>
                 </a>
diff --git a/plugins/Login/Controller.php b/plugins/Login/Controller.php
index 454a0d6796300ff91986b749e47ab3e4e5bcc8c7..fa11c2574c4d8e5ac9762ab62fa2fb16c91de869 100644
--- a/plugins/Login/Controller.php
+++ b/plugins/Login/Controller.php
@@ -24,7 +24,7 @@ use Piwik\View;
 
 /**
  * Login controller
- *
+ * @api
  */
 class Controller extends \Piwik\Plugin\Controller
 {
diff --git a/plugins/Login/Login.php b/plugins/Login/Login.php
index b054b567b050d8fa06dd6e5023d4778c4319143d..8ee66623eb1562a27659c8d6b40ae5481e233f16 100644
--- a/plugins/Login/Login.php
+++ b/plugins/Login/Login.php
@@ -23,9 +23,9 @@ use Piwik\Session;
 class Login extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         $hooks = array(
             'Request.initAuthenticationObject' => 'initAuthenticationObject',
diff --git a/plugins/Login/lang/it.json b/plugins/Login/lang/it.json
index 69c496169c43a14570f71e30054767fbb13e5bb3..74b65a1b5bba9edfdc44e6fc6ff3c23ee57a8253 100644
--- a/plugins/Login/lang/it.json
+++ b/plugins/Login/lang/it.json
@@ -3,19 +3,19 @@
         "ConfirmationLinkSent": "Un link di conferma è stato inviato alla tua casella di posta. Controlla la tua e-mail e visita questo link per autorizzare la richiesta di modifica della password.",
         "ContactAdmin": "Possibile ragione: il tuo host potrebbe non avere attive le funzionalità di e-mail.<br \/>Per favore, contatta l'amministratore del server.",
         "ExceptionInvalidSuperUserAccessAuthenticationMethod": "Un utente con accesso Super User non può essere autenticato utilizzando il sistema '%s'.",
-        "ExceptionPasswordMD5HashExpected": "I parametri della password sono seguiti da un hash MD5 della password.",
-        "InvalidNonceOrHeadersOrReferrer": "Sicurezza modulo non è riuscita. Si prega di ricaricare il modulo e verificare che i cookie siano abilitati. Se si utilizza un server proxy, è necessario %s configurare Piwik per accettare gli header del proxy %s che inoltri l'header host. Inoltre, verificare che l'intestazione Referer venga inviata correttamente.",
-        "InvalidOrExpiredToken": "Il token non è valido o è scaduto",
-        "InvalidUsernameEmail": "Username e\/o indirizzo e-mail non validi",
-        "LogIn": "Entra",
-        "LoginOrEmail": "Login o E-mail",
-        "LoginPasswordNotCorrect": "Username & Password non corretti",
+        "ExceptionPasswordMD5HashExpected": "I parametri della password che ci si aspetta sono un hash MD5 della password.",
+        "InvalidNonceOrHeadersOrReferrer": "Sicurezza modulo non riuscita. Si prega di ricaricare il modulo e verificare che i cookie siano abilitati. Se si utilizza un server proxy, è necessario %s configurare Piwik per accettare gli header del proxy %s che inoltri l'header host. Inoltre, verificare che l'intestazione Referer venga inviata correttamente.",
+        "InvalidOrExpiredToken": "Token non valido o scaduto",
+        "InvalidUsernameEmail": "Nome utente e\/o indirizzo e-mail non validi",
+        "LogIn": "Accedi",
+        "LoginOrEmail": "Nome utente o E-mail",
+        "LoginPasswordNotCorrect": "Combinazione Nome utente e Password non corretta",
         "LostYourPassword": "Hai perso la password?",
-        "MailPasswordChangeBody": "Ciao %1$s, una richiesta di reimpostazione della password è stata ricevuta da %2$s. Per confermare la modifica della password in modo da poter accedere con le nuove credenziali, visitare il seguente link: %3$s Nota: questo token scade tra 24 ore. E vi ringrazio per l'utilizzo di Piwik!",
+        "MailPasswordChangeBody": "Ciao %1$s,\n\nUna richiesta di reimpostazione della password è stata ricevuta da %2$s. Per confermare la modifica della password in modo da poter accedere con le nuove credenziali, visitare il seguente link:\n\n%3$s\n\nNota: questo token scade tra 24 ore.\n\nE vi ringrazio per l'utilizzo di Piwik!",
         "MailTopicPasswordChange": "Conferma Cambio Password",
         "PasswordChanged": "La tua password è stata cambiata.",
         "PasswordRepeat": "Password (ripeti)",
-        "PasswordsDoNotMatch": "La password non combacia.",
+        "PasswordsDoNotMatch": "La password non corrisponde.",
         "PluginDescription": "Fornisce l'autenticazione tramite user name e password, e anche la funzione di reset della password. Il metodo di autenticazione può essere cambiato utilizzando un altro plugin di accesso, come LoginLdap disponibile nel Marketplace.",
         "RememberMe": "Ricordami",
         "ResetPasswordInstructions": "Immetti una nuova password per il tuo account."
diff --git a/plugins/MobileAppMeasurable/lang/cs.json b/plugins/MobileAppMeasurable/lang/cs.json
new file mode 100644
index 0000000000000000000000000000000000000000..73b88d5733fcd82d5a61a9aaeb2577f6fdd10ccd
--- /dev/null
+++ b/plugins/MobileAppMeasurable/lang/cs.json
@@ -0,0 +1,7 @@
+{
+    "MobileAppMeasurable": {
+        "MobileApp": "Mobilní aplikace",
+        "MobileApps": "Mobilní aplikace",
+        "MobileAppDescription": "Nativní mobilní aplikace pro IOS, Android, nebo pro jiný mobilní operační systém."
+    }
+}
\ No newline at end of file
diff --git a/plugins/MobileAppMeasurable/lang/sr.json b/plugins/MobileAppMeasurable/lang/sr.json
new file mode 100644
index 0000000000000000000000000000000000000000..906ba0a2cdd52518c6b017026a739eb4330b1897
--- /dev/null
+++ b/plugins/MobileAppMeasurable/lang/sr.json
@@ -0,0 +1,7 @@
+{
+    "MobileAppMeasurable": {
+        "MobileApp": "Mobilna aplikacija",
+        "MobileApps": "Mobilne aplikacije",
+        "MobileAppDescription": "Nativne mobilne aplikacije za iOS, Android i ostale mobilne operativne sisteme."
+    }
+}
\ No newline at end of file
diff --git a/plugins/MobileMessaging/MobileMessaging.php b/plugins/MobileMessaging/MobileMessaging.php
index ed57c259f90cd3173354125cf2ecbb31e30833ec..5db3a3a57158e6dfabec3af6575226b2434d44c2 100644
--- a/plugins/MobileMessaging/MobileMessaging.php
+++ b/plugins/MobileMessaging/MobileMessaging.php
@@ -61,9 +61,9 @@ class MobileMessaging extends \Piwik\Plugin
     );
 
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getJavaScriptFiles'           => 'getJsFiles',
diff --git a/plugins/MobileMessaging/lang/it.json b/plugins/MobileMessaging/lang/it.json
index 752a3f410303f4ccf4aaf14c6fc733bfbd67ac78..e981206157bfd01ea8b2b8999faeeb3eff3885da 100644
--- a/plugins/MobileMessaging/lang/it.json
+++ b/plugins/MobileMessaging/lang/it.json
@@ -14,23 +14,23 @@
         "Settings_CredentialProvided": "Il tuo account %s SMS API è configurato correttamente!",
         "Settings_DeleteAccountConfirm": "Sei sicuro di voler cancellare questo account SMS?",
         "Settings_InvalidActivationCode": "Il codice inserito non è valido, riprova.",
-        "Settings_LetUsersManageAPICredential": "Permetti a tutti gli utenti di gestire le proprie credenziali SMS API",
-        "Settings_LetUsersManageAPICredential_No_Help": "Tutti gli utenti potranno ricevere reports SMS e utilizzeranno le credenziali del tuo account.",
+        "Settings_LetUsersManageAPICredential": "Permetti a tutti gli utenti di gestire le proprio operatore SMS",
+        "Settings_LetUsersManageAPICredential_No_Help": "Tutti gli utenti potranno ricevere report SMS e utilizzeranno le credenziali del tuo account.",
         "Settings_LetUsersManageAPICredential_Yes_Help": "Ciascun utente potrà impostaare il proprio account SMS API e non utilizzarà le tue credenziali.",
-        "Settings_ManagePhoneNumbers": "gestisci Numeri Telefonici",
+        "Settings_ManagePhoneNumbers": "Gestisci Numeri Telefonici",
         "Settings_PhoneActivated": "Numero di telefono convalidato! Ora puoi ricevere gli SMS con le tue statistiche.",
         "Settings_PhoneNumber": "Numero di telefomo",
         "Settings_PhoneNumbers_Add": "Aggiungi Numero Telefonico",
         "Settings_PhoneNumbers_CountryCode_Help": "Se non conosci il prefisso internazionale del tuo Paese, cercalo qui",
-        "Settings_PhoneNumbers_Help": "Prima di ricevere SMS (messaggi di testo) sun un telefono, bisogna inserirne qui sotto il numero.",
-        "Settings_PhoneNumbers_HelpAdd": "Quando si fa clic su \"Aggiungi\", un SMS contenente un codice sarè inviato al telefono. L'utente che riceve il codice deve quindi accedere a Piwik, fare clic su Impostazioni, quindi fare clic su Messaggeria Mobile. Dopo aver inserito il codice, l'utente potrà ricevere i reports in formato testo sul suo telefono.",
+        "Settings_PhoneNumbers_Help": "Prima di ricevere SMS (messaggi di testo) su un telefono, bisogna inserirne qui sotto il numero.",
+        "Settings_PhoneNumbers_HelpAdd": "Quando si fa clic su \"Aggiungi\", un SMS contenente un codice sarà inviato al telefono. L'utente che riceve il codice deve quindi accedere a Piwik, fare clic su Impostazioni, quindi fare clic su Messaggeria Mobile. Dopo aver inserito il codice, l'utente potrà ricevere i report in formato di testo sul suo telefono.",
         "Settings_PleaseSignUp": "Per creare SMS e ricevere brevi messaggi di testo con le statistiche dei tuoi siti web sul tuo cellulare, si prega di registrarsi con l'API SMS e immettere le informazioni qui di seguito.",
         "Settings_SMSAPIAccount": "Gestisci Account SMS API",
         "Settings_SMSProvider": "Gestore SMS",
         "Settings_SuperAdmin": "Impostazioni Super User",
         "Settings_SuspiciousPhoneNumber": "Se non si riceve il messaggio di testo, si può provare senza lo zero iniziale. Cioè %s",
         "Settings_UpdateOrDeleteAccount": "Puoi anche %saggiornare%s o %scancellare%s questo account.",
-        "Settings_ValidatePhoneNumber": "Valida",
+        "Settings_ValidatePhoneNumber": "Convalida",
         "Settings_VerificationCodeJustSent": "Abbiamo inviato ora un SMS con un codice a questo numero: si prega di inserire questo codice qui sopraa e cliccare su \"Convalida\".",
         "SettingsMenu": "Messaggeria Mobile",
         "SMS_Content_Too_Long": "[troppo lungo]",
diff --git a/plugins/MultiSites/MultiSites.php b/plugins/MultiSites/MultiSites.php
index 60828e2df251bf79cf49ba753d49513cb9264cc2..1fb90cfeae6561d45de7c83f9c17668faf124986 100644
--- a/plugins/MultiSites/MultiSites.php
+++ b/plugins/MultiSites/MultiSites.php
@@ -13,9 +13,9 @@ use Piwik\Piwik;
 class MultiSites extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
diff --git a/plugins/Overlay/Overlay.php b/plugins/Overlay/Overlay.php
index af13ae2f6cc9dba0ac06b2a25b5249910ecc063e..329db936ebe1c89e761330798c87d90f283a5162 100644
--- a/plugins/Overlay/Overlay.php
+++ b/plugins/Overlay/Overlay.php
@@ -12,9 +12,9 @@ namespace Piwik\Plugins\Overlay;
 class Overlay extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    function getListHooksRegistered()
+    function registerEvents()
     {
         return array(
             'AssetManager.getJavaScriptFiles'        => 'getJsFiles',
diff --git a/plugins/Overlay/lang/cs.json b/plugins/Overlay/lang/cs.json
index 2b8ace59872930befb08705f691d5e166e236e79..69d47451753f0ac5561ef64655297bf4a48392ec 100644
--- a/plugins/Overlay/lang/cs.json
+++ b/plugins/Overlay/lang/cs.json
@@ -13,6 +13,7 @@
         "OneClick": "1 kliknutí",
         "OpenFullScreen": "Přejít na celou obrazovku (bez postranní lišty)",
         "Overlay": "Překryv stránky",
+        "PluginDescription": "Podívejte se na vaše analytická data jako na překryv na vašich stránkách. Zjistěte, kolik uživatelů kliklo na kterýkoliv odkaz. Poznámka: vyžaduje povolený zásuvný modul přechodů.",
         "RedirectUrlError": "Pokoušíte se spustit překryv pro stránku s url \"%s\". %s Žádná doména z nastavení Piwiku ale neodpovídá odkazu.",
         "RedirectUrlErrorAdmin": "Doménu můžete jako další URL přidat v %snastavení%s.",
         "RedirectUrlErrorUser": "Požádejte svého administrátora o přidání stránky jako další URL:."
diff --git a/plugins/Overlay/lang/it.json b/plugins/Overlay/lang/it.json
index b8a6611f05e50f3bef2d36c51ba2487f9943a0bf..8f5411007ac65e887455dd0330ca11e1356b7a31 100644
--- a/plugins/Overlay/lang/it.json
+++ b/plugins/Overlay/lang/it.json
@@ -6,16 +6,16 @@
         "ErrorNotLoading": "La sessione di Overlay Pagina non può ancora essere lanciata.",
         "ErrorNotLoadingDetails": "Forse la pagina caricata sulla destra non ha il codice tracking di Piwik. In questo caso prova ad avviare Overlay per una pagina diversa.",
         "ErrorNotLoadingDetailsSSL": "Dal momento che si sta utilizzando Piwik su HTTPS, la causa più probabile è che il vostro sito web non supporti SSL. Prova a utilizzare Piwik su HTTP.",
-        "ErrorNotLoadingLink": "Ottieni altri suggerimenti ai problemi",
+        "ErrorNotLoadingLink": "Ottieni altri suggerimenti sui problemi",
         "Link": "Link",
         "Location": "Posizione",
         "NoData": "Non vi sono dati per questa pagina nel periodo selezionato",
         "OneClick": "1 click",
-        "OpenFullScreen": "vai a schermo intero (niente barra laterale)",
+        "OpenFullScreen": "Vai a schermo intero (niente barra laterale)",
         "Overlay": "Overlay di Pagina",
         "PluginDescription": "Vedi i tuoi dati statistici in sovrapposizione al tuo sito web. Guarda quante volte i tuoi utenti hanno cliccato su ciascun link. Nota: Richiede che sia abilitato il plugin Transitions.",
         "RedirectUrlError": "Si sta tentando di aprire la Pagina Overlay per l'URL \"%s\". %s Nessuno dei domini dalle impostazioni di Piwik corrisponde al link.",
-        "RedirectUrlErrorAdmin": "È possibile aggiungere il dominio come un ulteriore URL %s nelle impostazioni%s.",
+        "RedirectUrlErrorAdmin": "È possibile aggiungere il dominio come un ulteriore URL %snelle impostazioni%s.",
         "RedirectUrlErrorUser": "Chiedi all'amministratore di aggiungere il dominio come un URL aggiuntivo."
     }
 }
\ No newline at end of file
diff --git a/plugins/Overlay/lang/sr.json b/plugins/Overlay/lang/sr.json
index a6f1fb771ca0450f12ddb4a062f459b643984048..76b071399637066a63115e71c43e662dc71f6dd8 100644
--- a/plugins/Overlay/lang/sr.json
+++ b/plugins/Overlay/lang/sr.json
@@ -13,6 +13,7 @@
         "OneClick": "1 klik",
         "OpenFullScreen": "Prikaži preko celog ekrana",
         "Overlay": "Prikaz preko (overlay)",
+        "PluginDescription": "Prikažite analitičke podatke preko vašeg sajta. Pogledajte koliko puta su korisnici kliknuli na svaki od linkova. Morate imati uključen Transitions dodatak.",
         "RedirectUrlError": "Pokušali ste da otvorite stranicu za URL \"%s\". %s Nijedan od domena iz Piwik podešavanja ne odgovara ovom linku.",
         "RedirectUrlErrorAdmin": "Možete dodati domen kao dodatni URL %su podešavanjima%s.",
         "RedirectUrlErrorUser": "Zamolite administratora da doda domen kao dodatni URL."
diff --git a/plugins/Overlay/lang/zh-cn.json b/plugins/Overlay/lang/zh-cn.json
index 6d3eea0bd40f8afcdc4f03dce5a8eeef833202d9..c6fec4aa708c0b7f859ca39e360a27cf55c353d3 100644
--- a/plugins/Overlay/lang/zh-cn.json
+++ b/plugins/Overlay/lang/zh-cn.json
@@ -13,6 +13,7 @@
         "OneClick": "1 次点击",
         "OpenFullScreen": "全屏(无边框)",
         "Overlay": "页面叠加",
+        "PluginDescription": "请参阅您的分析数据为您的实际网站的叠加。查看有多少次你的用户点击每一个环节上。注:需要在转换插件启用。",
         "RedirectUrlError": "您正在打开网址 \"%s\" 的页面叠加。%s 没有 Piwik 设置的域名匹配这个链接。",
         "RedirectUrlErrorAdmin": "您可以在 %s管理设置%s 中以附加网址添加域名。",
         "RedirectUrlErrorUser": "请管理员以附加网址来添加域名。"
diff --git a/plugins/PrivacyManager/PrivacyManager.php b/plugins/PrivacyManager/PrivacyManager.php
index b04799a9344a3f470f2ba5ed8cd23169a96b470d..5c4ec03ad294efad9533e0f6a923ffefab56c96f 100644
--- a/plugins/PrivacyManager/PrivacyManager.php
+++ b/plugins/PrivacyManager/PrivacyManager.php
@@ -130,9 +130,9 @@ class PrivacyManager extends Plugin
     }
 
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getJavaScriptFiles'         => 'getJsFiles',
diff --git a/plugins/PrivacyManager/lang/cs.json b/plugins/PrivacyManager/lang/cs.json
index 717effdc3308b495a5623dcec3a23ba6635fa71c..45881dd4873d510ecc8d4c26289ed5297cd6738c 100644
--- a/plugins/PrivacyManager/lang/cs.json
+++ b/plugins/PrivacyManager/lang/cs.json
@@ -13,6 +13,8 @@
         "DeleteDataDescription": "Můžete Piwik nastavit tak, aby po určitém čase mazal stará data logů nebo zpracovaná data hlášení. To pomáhá udržet malou databázi.",
         "DeleteDataDescription2": "Pokud si to přejete, zpracovaná hlášení mohou zůstat a budou odstraněna jen data logů (zobrazení stránek (návštěvy a konverze). Nebo mohou být smazána hlášení a data logů mohou být zachována.",
         "DeleteDataInterval": "Smazat stará data každých",
+        "DeleteOldVisitorLogs": "Smazat staré záznamy o návštěvnících",
+        "DeleteOldArchivedReports": "Smazat stará archivovaná hlášení",
         "DeleteLogDescription2": "Pokud povolíte automatické mazání logů, musíte zajistit, že jsou zpracována všechna denní hlášení, aby nedošlo ke ztrátě dat.",
         "DeleteLogInfo": "Logy z následujících tabulek budou smazány: %s",
         "DeleteLogsConfirm": "Chystáte se povolit mazání dat logů. Pokud budou odstraněna stará data logů a nebyla vytvořena historická hlášení, nebudete schopen zobrazit stará analytická data. Oprav",
@@ -25,6 +27,7 @@
         "DeleteReportsInfo2": "Pokud není povoleno \"%s\", stará hlášení budou na požádání znovu vytvořena.",
         "DeleteReportsInfo3": "Pokud je povoleno \"%s\", data budou nevratnÄ› ztracena.",
         "DeleteReportsOlderThan": "Smazat hlášení starší než",
+        "DeleteSchedulingSettings": "Maplánovat výmaz starých dat",
         "DeleteDataSettings": "Smazat staré logy návštěvníků a hlášení",
         "DoNotTrack_Description": "Do not track je návrh technologie a politiky, která umožňuje uživatelům indikovat, že si nepřejí být stránkami, které navštěvují a to včetně služeb webové analýzi, reklamních služeb a sociálních platforem.",
         "DoNotTrack_Disable": "Zakázat podporu Do not track",
@@ -39,6 +42,7 @@
         "GeolocationAnonymizeIpNote": "Poznámka: Geolokace bude mít přibližně stejnou přesnost, když je anonymizován 1 bit. Pokud jsou anonymizovány 2 bity a více, geolokace bude nepřesná.",
         "GetPurgeEstimate": "Získat odhad po vyprázdnění",
         "KeepBasicMetrics": "Uchovat základní měření (návštěvy, zobrazení stránek, odchody, cíle, atd.)",
+        "KeepDataFor": "Uchovávat všechna data po",
         "KeepReportSegments": "Pro výše uchovávaná data také zachovat segmentovaná hlášení",
         "LastDelete": "Poslední mazání bylo v",
         "LeastDaysInput": "Prosím, uveďte počet dní větší než %s.",
@@ -49,6 +53,7 @@
         "PurgeNow": "Vyprázdnit databázi nyní",
         "PurgeNowConfirm": "Chystáte se natrvalo odstranit data z vaší databáze. Opravdu chcete pokračovat?",
         "PurgingData": "Promazávání dat...",
+        "RecommendedForPrivacy": "Doporučeno pro soukromí",
         "ReportsDataSavedEstimate": "Velikost databáze",
         "SaveSettingsBeforePurge": "Nastavení mazání dat byla změněna. Uložte je před promazáním.",
         "SeeAlsoOurOfficialGuidePrivacy": "Podívejte se také na náš oficiální návod: %ssoukromí webové analýzy%s",
diff --git a/plugins/PrivacyManager/lang/de.json b/plugins/PrivacyManager/lang/de.json
index fc8c19451f063f52c1b182d84ff8bf9dac1025b7..8771dd1286503e4a1fff6c7e3502c0192b36e549 100644
--- a/plugins/PrivacyManager/lang/de.json
+++ b/plugins/PrivacyManager/lang/de.json
@@ -8,7 +8,7 @@
         "CannotLockSoDeleteLogActions": "Die log_action Tabelle wird nicht geleert: bitte geben Sie dem MySQL User '%s' das LOCK TABLES Privileg.",
         "ClickHereSettings": "Hier klicken, um die %s Einstellungen zu bearbeiten.",
         "CurrentDBSize": "Aktuelle Größe der Datenbank",
-        "DBPurged": "Datenbank geleert.",
+        "DBPurged": "Datenbank bereinigt.",
         "DeleteBothConfirm": "Sie sind dabei, das Löschen von sowohl Log- als auch Berichtsdaten zu aktivieren. Das wird Ihnen dauerhaft die Möglichkeit nehmen, auf alte Analyticsdaten zuzugreifen. Sind Sie sicher, dass Sie das wollen?",
         "DeleteDataDescription": "Sie können Piwik so konfigurieren, dass regelmäßig alte Besucher-Logs und\/oder generierte Berichte gelöscht werden, um die Größe der Datenbank klein zu halten.",
         "DeleteDataDescription2": "Falls gewünscht, können generierte Berichte behalten werden, während Besuchs-, Seitenansichten- und Konversions-Logdaten gelöscht werden. Oder die generierten Berichte können gelöscht werden, während die Logdaten behalten werden.",
@@ -52,7 +52,7 @@
         "PluginDescription": "Berücksichtigen Sie den Datenschutz für Ihre Benutzer und machen Sie Ihre Piwik Installation datenschutzkonform gemäss Ihren lokalen Datenschutzbestimmungen.",
         "PurgeNow": "Datenbank jetzt leeren",
         "PurgeNowConfirm": "Sie sind dabei, Daten dauerhaft aus der Datenbank zu entfernen. Sind Sie sicher?",
-        "PurgingData": "Lösche Daten...",
+        "PurgingData": "Daten werden bereinigt...",
         "RecommendedForPrivacy": "Für den Datenschutz empfohlen",
         "ReportsDataSavedEstimate": "Größe der Datenbank",
         "SaveSettingsBeforePurge": "Sie haben die Einstellungen für das Löschen von Daten geändert. Bitte erst speichern, bevor Sie einen Löschvorgang starten.",
diff --git a/plugins/PrivacyManager/lang/it.json b/plugins/PrivacyManager/lang/it.json
index d85496ec5a54c9cae907667bd75b7414160cbbf7..b0203718af01a5de9cbe213eade9f7040b38de14 100644
--- a/plugins/PrivacyManager/lang/it.json
+++ b/plugins/PrivacyManager/lang/it.json
@@ -1,21 +1,21 @@
 {
     "PrivacyManager": {
-        "AnonymizeIpDescription": "Seleziona \"Si\" se vuoi che Piwik non mostri gli indirizzi IP completi dei visitatori.",
-        "AnonymizeIpInlineHelp": "Rende anonimi gli ip dei tuoi visitatori per conformarsi alle leggi o alle linee guida locali.",
-        "AnonymizeIpExtendedHelp": "Quando gli utenti visitano il tuo sito web, Piwik non userà l'indirizzo IP completo (come %s) ma lo renderà prima anonimo (in %s). Questo è uno dei requisiti definiti dalle leggi sulla privacy in alcuni paesi come la Germania.",
+        "AnonymizeIpDescription": "Seleziona \"Sì\" se vuoi che Piwik non mostri gli indirizzi IP completi dei visitatori.",
+        "AnonymizeIpInlineHelp": "Rende anonimi gli ip dei tuoi visitatori per conformarsi alle leggi o ai regolamenti locali.",
+        "AnonymizeIpExtendedHelp": "Quando gli utenti visitano il tuo sito web, Piwik non userà l'indirizzo IP completo (come %s) ma lo renderà prima anonimo (%s). Questo è uno dei requisiti definiti dalle leggi sulla privacy in alcuni paesi come la Germania.",
         "AnonymizeIpMaskLengtDescription": "Seleziona quanti byte degli indirizzi IP dei visitatori devono essere nascosti.",
-        "AnonymizeIpMaskLength": "%s byte - e.s. %s",
-        "CannotLockSoDeleteLogActions": "La tabella log_action non verrà pulita: assicura il privilegio LOCK TABLES a '%s' utente MYSQL.",
+        "AnonymizeIpMaskLength": "%s byte(s) - es. %s",
+        "CannotLockSoDeleteLogActions": "La tabella log_action non verrà pulita: assicura il privilegio LOCK TABLES all'utente MYSQL '%s'.",
         "ClickHereSettings": "Accedi alle impostazioni %s.",
         "CurrentDBSize": "Dimensione corrente del database",
         "DBPurged": "DB ripulito.",
-        "DeleteBothConfirm": "Stai per consentire sia la cancellazione dei dati di log che la cancellazione dei dati dei report. Questo eliminerà in modo permanente la possibilità di visualizzare i vecchi dati di analisi. Sei sicuro di volerlo fare?",
+        "DeleteBothConfirm": "Stai per consentire sia la cancellazione dei dati di log che quella dei dati dei report. Questo eliminerà in modo permanente la possibilità di visualizzare i vecchi dati di analisi. Sei sicuro di volerlo fare?",
         "DeleteDataDescription": "Puoi configurare Piwik per cancellare regolarmente i vecchi log dei visitatori e\/o i report già elaborati per mantenere bassa la dimensione del database.",
         "DeleteDataDescription2": "Se lo si desidera, i report pre-elaborati non saranno cancellati, solo le visite, le pagine visualizzate e i log delle conversioni verranno cancellati. Oppure, i report pre-elaborati possono essere cancellati e i dati dei log possono essere mantenuti.",
         "DeleteDataInterval": "Cancella i vecchi dati ogni",
         "DeleteOldVisitorLogs": "Cancella i vecchi log dei visitatori",
         "DeleteOldArchivedReports": "Cancella i vecchi report archiviati",
-        "DeleteLogDescription2": "Quando l'eliminazione automatica è abilitata, è necessario assicurarsi che tutti i report giornalieri precedenti siano stati processati, in modo che nessun dato venga perso. Ottieni più informazioni.",
+        "DeleteLogDescription2": "Quando l'eliminazione automatica è abilitata, è necessario assicurarsi che tutti i report giornalieri precedenti siano stati elaborati, in modo che nessun dato venga perso. Ottieni più informazioni.",
         "DeleteLogInfo": "I log delle seguenti tabelle saranno cancellati: %s",
         "DeleteLogsConfirm": "Stai per consentire la cancellazione dei dati di log. Se i vecchi dati di registro vengono rimossi e le relazioni non sono già state create, non sarai in grado di vedere i dati storici di analisi. Sei sicuro di volerlo fare?",
         "DeleteLogsOlderThan": "Cancella log più vecchi di",
@@ -25,42 +25,42 @@
         "DeleteReportsDetailedInfo": "I dati delle tabelle numeriche d'archivio del database(%s) e le tabelle d'archivio blob (%s) saranno cancellate.",
         "DeleteReportsInfo": "Se abilitato, i vecchi report verranno cancellati. %sRaccomandiamo di abilitare solo quando lo spazio del database è limitato.%s",
         "DeleteReportsInfo2": "Se non è stato abilitato \"%s\", i vecchi report verranno automaticamente ricreati quando richiesti.",
-        "DeleteReportsInfo3": "Se abilitato \"%s\", i dati andranno permanentemente persi.",
+        "DeleteReportsInfo3": "Se abilitato \"%s\", i dati andranno definitivamente persi.",
         "DeleteReportsOlderThan": "Elimina i report più vecchi di",
-        "DeleteSchedulingSettings": "Programma la cancellazione dei vecchi dati",
+        "DeleteSchedulingSettings": "Pianifica la cancellazione dei vecchi dati",
         "DeleteDataSettings": "Cancella i vecchi log dei visitatori e i report",
-        "DoNotTrack_Description": "Do Not Track è una tecnologia e una proposta di indirizzo che consente agli utenti di escludersi dal tracciamento dei siti che non visitano, includendo i servizi statistici, le reti pubblicitarie e le piattaforme sociali.",
+        "DoNotTrack_Description": "Do Not Track è una tecnologia e una proposta di indirizzo che consente agli utenti di escludersi dal tracciamento dei siti che visitano, includendo i servizi statistici, le reti pubblicitarie e le piattaforme sociali.",
         "DoNotTrack_Disable": "Disabilita il supporto per Do Not Track",
-        "DoNotTrack_Disabled": "Al momento Piwik sta tracciando tutti i visitatori, anche quendo essi hanno specificato \"Non voglio essere tracciato\" nel loro browser.",
-        "DoNotTrack_DisabledMoreInfo": "Si raccomanda di rispettare la privacy dei tuoi visitatori abilitanddo il supporto DoNotTrack.",
+        "DoNotTrack_Disabled": "Al momento Piwik sta tracciando tutti i visitatori, anche quando essi hanno specificato \"Non voglio essere tracciato\" nel loro browser.",
+        "DoNotTrack_DisabledMoreInfo": "Si raccomanda di rispettare la privacy dei tuoi visitatori abilitando il supporto DoNotTrack.",
         "DoNotTrack_Enable": "Abilita il supporto per Do Not Track",
         "DoNotTrack_Enabled": "Al momento stai rispettando la Privacy dei tuoi utenti. Bravo!",
         "DoNotTrack_EnabledMoreInfo": "Quando gli utenti hanno impostato il browser su \"Non voglio essere tracciato\" (DoNotTrack abilitato) Piwik non traccerà queste visite.",
         "DoNotTrack_SupportDNTPreference": "Supporto preferenza Do Not Track",
-        "EstimatedDBSizeAfterPurge": "Dimensione stimata del database dopo la cancellazione",
+        "EstimatedDBSizeAfterPurge": "Dimensione stimata del database dopo la pulizia",
         "EstimatedSpaceSaved": "Stima dello spazio risparmiato",
         "GeolocationAnonymizeIpNote": "Nota: La Geolocalizzazione avrà circa gli stessi risultati con 1 byte anonimo. Con 2 byte o più, la Geolocalizzazione sarà imprecisa.",
         "GetPurgeEstimate": "Ottieni stima pulizia",
         "KeepBasicMetrics": "Mantieni le metriche di base (visite, pagine viste, percentuali dei rimbalzi, conversioni obiettivi, conversioni ecommerce, ecc.)",
         "KeepDataFor": "Conserva tutti i dati per",
         "KeepReportSegments": "Per i dati qui sopra che sono stati mantenuti, tieni anche i report segmentati",
-        "LastDelete": "Ultima cancellazione è stata il",
-        "LeastDaysInput": "Specificare un numero di giorni maggiore di %s.",
+        "LastDelete": "L'ultima cancellazione è stata il",
+        "LeastDaysInput": "Specifica un numero di giorni maggiore di %s.",
         "LeastMonthsInput": "Specifica un numero di mesi superiore a %s",
         "MenuPrivacySettings": "Privacy",
         "NextDelete": "Prossima cancellazione programmata per il",
-        "PluginDescription": "Aumenta la privacy per i tuoi utenti e rende la privacy della tua istanza di Piwik conforme con le leggi locali.",
+        "PluginDescription": "Aumenta la privacy per i tuoi utenti e rendi la privacy della tua istanza di Piwik conforme con le leggi locali.",
         "PurgeNow": "Pulisci il DB Ora",
         "PurgeNowConfirm": "Stai per cancellare definitivamente dei dati dal tuo database. Sei sicuro di voler continuare?",
         "PurgingData": "Eliminazione dei dati...",
         "RecommendedForPrivacy": "Raccomandato per la privacy",
         "ReportsDataSavedEstimate": "Dimensioni database",
-        "SaveSettingsBeforePurge": "Hai cambiato le impostazioni per la cancellazione dei dati. Si consiglia di salvarli prima di cominciare un'eliminazione.",
+        "SaveSettingsBeforePurge": "Hai cambiato le impostazioni per la cancellazione dei dati. Si consiglia di salvarli prima di cominciare una pulizia.",
         "SeeAlsoOurOfficialGuidePrivacy": "Leggi anche la nostra guida ufficiale: %sWeb Analytics Privacy%s",
         "Teaser": "In questa pagina è possibile personalizzare Piwik per renderlo conforme alle norme vigenti sulla privacy. È possibile %s rendere anonimi gli IP dei visitatori%s, %s rimuovere automaticamente dal database i vecchi log dei visitatori%s e %s fornire un meccanismo opt-out per il sito%s.",
         "TeaserHeadline": "Impostazioni privacy",
         "UseAnonymizedIpForVisitEnrichment": "Usa anche gli indirizzi IP Anonimi quando si arricchiscono le visite",
-        "UseAnonymizedIpForVisitEnrichmentNote": "Plugin come geo Location tramite IP e Provider incrementano i metadati dei visitatori. Di default questi plugin utiizzano gli indirizzi IP resi anonimi. Se selezioni 'No', verrà utilizzato l'indirizzo IP completo non reso anonimo, con la conseguenza di minore privaacy ma accuratezza dei dati migliore.",
+        "UseAnonymizedIpForVisitEnrichmentNote": "Plugin come Geo Location tramite IP e Provider incrementano i metadati dei visitatori. Di default questi plugin utiizzano gli indirizzi IP resi anonimi. Se selezioni 'No', verrà utilizzato l'indirizzo IP completo non reso anonimo, con la conseguenza di una minore privacy ma con un'accuratezza dei dati migliore.",
         "UseAnonymizeIp": "Rendi anonimi gli IP dei visitatori",
         "UseDeleteLog": "Cancella regolarmente i vecchi log delle visite dal database",
         "UseDeleteReports": "Cancella regolarmente i vecchi report dal database"
diff --git a/plugins/PrivacyManager/lang/sr.json b/plugins/PrivacyManager/lang/sr.json
index c396eda8933f01990185f28ea1be94a66ebcdd21..cd29363ee9872cac238f2046c8aa0479a3fdb2e0 100644
--- a/plugins/PrivacyManager/lang/sr.json
+++ b/plugins/PrivacyManager/lang/sr.json
@@ -13,6 +13,8 @@
         "DeleteDataDescription": "Možete podesiti Piwik tako da periodično briše stare zapise o posetama i\/ili obrađene izveštaje te da tako održite veličinu baze malom.",
         "DeleteDataDescription2": "Ukoliko želite, već obrađeni izveštaji ne moraju biti obrisani već samo posete, prikazi stranica i ispunjenja ciljeva. Ili, već obrađeni izveštaji se mogu obrisati a zapisi ostati sačuvani.",
         "DeleteDataInterval": "Obriši stare posatke svakih",
+        "DeleteOldVisitorLogs": "Obriši stare zapise",
+        "DeleteOldArchivedReports": "Obriši stare arhivirane izveštaje",
         "DeleteLogDescription2": "Kada omogućite automatsko brisanje zapisa, morate biti sigurni da su svi prethodni dnevni izveštaji obrađeni kako ne bi došlo do gubitka podataka.",
         "DeleteLogInfo": "Zapisi iz sledećih tabela će biti obrisani: %s",
         "DeleteLogsConfirm": "Na putu ste da uključite brisanje zapisa sa podacima. Ukoliko obrišete stare podatke a izveštaji još nisu napravljeni, nećete biti u mogućnosti da vidite analitičke podatke za prošlost. Da li ste sigurni da želite to da uradite?",
@@ -25,6 +27,7 @@
         "DeleteReportsInfo2": "Ukoliko niste uključili \"%s\", stari izveštaji će biti ponovo napravljeni automatski kada budu zahtevani.",
         "DeleteReportsInfo3": "Ukoliko ste uključili \"%s\", podaci će biti zauvek izgubljeni.",
         "DeleteReportsOlderThan": "Briši izveštaje starije od",
+        "DeleteSchedulingSettings": "Zakaži brisanje starih podataka",
         "DeleteDataSettings": "Obriši stare zapise i izveštaje",
         "DoNotTrack_Description": "Do Not Track je predlog tehnologije i polise koji omogućuje korisnicima da se izuzmu iz praćenja od strane sajtova koje oni nisu posetili uključujući analitičke servise, reklamne mreže i društvene platforme.",
         "DoNotTrack_Disable": "Isključi podršku za Do Not Track",
@@ -39,6 +42,7 @@
         "GeolocationAnonymizeIpNote": "Pažnja: Geolokacija će imati približno iste rezultate sa jednim bajtom anonimizacije. Sa dva bajta ili više, Geolokacija neće biti tačna.",
         "GetPurgeEstimate": "Daj procenu",
         "KeepBasicMetrics": "Zadrži osnovne metrike (posete, broj prikaza stranica, stopu odbijanja, ispunjenje ciljeva, elektronske porudžbine itd.)",
+        "KeepDataFor": "Zadrži sve podatke za",
         "KeepReportSegments": "Za gore sačuvane podatke sačuvaj i segmentirane izveštaje",
         "LastDelete": "Poslednje brisanje je bilo",
         "LeastDaysInput": "Molimo vas da navedete broj dana veći od %s.",
@@ -49,6 +53,7 @@
         "PurgeNow": "Očisti bazu",
         "PurgeNowConfirm": "Na putu ste da trajno obrišete podatke iz baze. Da li želite da nastavite?",
         "PurgingData": "Čišćenje baze",
+        "RecommendedForPrivacy": "Preporučljivo zbog privatnosti",
         "ReportsDataSavedEstimate": "Veličina baze",
         "SaveSettingsBeforePurge": "Izmenili ste pravila oko brisanja podataka. Molimo vas da ih sačuvate pre nego što počnete sa čišćenjem podataka.",
         "SeeAlsoOurOfficialGuidePrivacy": "Pogledajte i naš zvanični vodič: %sPrivatnost u analitikama%s",
diff --git a/plugins/Provider/Provider.php b/plugins/Provider/Provider.php
index 38707c5cb17136bcb38bf4da5563d9b629b611ea..1fb538565131bbc8062979e81c96e3adefc7cb66 100644
--- a/plugins/Provider/Provider.php
+++ b/plugins/Provider/Provider.php
@@ -18,9 +18,9 @@ use Piwik\Piwik;
 class Provider extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'Live.getAllVisitorDetails' => 'extendVisitorDetails'
diff --git a/plugins/Provider/lang/it.json b/plugins/Provider/lang/it.json
index 7bda34b1f6ab1d47702a6542f2c8f8f2a631d977..ffd214bf63201014ef0bacb3225ba3ec2a35c6d0 100644
--- a/plugins/Provider/lang/it.json
+++ b/plugins/Provider/lang/it.json
@@ -2,8 +2,8 @@
     "Provider": {
         "ColumnProvider": "Provider",
         "PluginDescription": "Restituisce gli Internet Service Provider dei visitatori.",
-        "ProviderReportDocumentation": "Questo reports mostra quali prvider Internet Service (ISP)i tuoi visitatori hanno utilizzato per accedere al sito web. È possibile fare clic su un nome per maggiori dettagli. %s Se Piwik non può determinare il provider di un visitatore, questo viene elencato come IP.",
+        "ProviderReportDocumentation": "Questo report mostra quali Internet Service Provider i tuoi visitatori hanno utilizzato per accedere al sito web. È possibile fare clic su un nome per maggiori dettagli. %s Se Piwik non può determinare il provider di un visitatore, questo viene elencato come IP.",
         "WidgetProviders": "Providers",
-        "ProviderReportFooter": "Provider sconosciuto significa che l'indirizzo IP non può essere ricercato"
+        "ProviderReportFooter": "Provider sconosciuto significa che non è possibile trovare l'indirizzo IP"
     }
 }
\ No newline at end of file
diff --git a/plugins/Proxy/Controller.php b/plugins/Proxy/Controller.php
index bfc44f421f8e38eeae591de32df4d225eb8869ef..550078e2d73d2e5427e9f314e4b79095f9cf98f3 100644
--- a/plugins/Proxy/Controller.php
+++ b/plugins/Proxy/Controller.php
@@ -78,7 +78,9 @@ class Controller extends \Piwik\Plugin\Controller
     public function redirect()
     {
         $url = Common::getRequestVar('url', '', 'string', $_GET);
-
+        if (!UrlHelper::isLookLikeUrl($url)) {
+            die('Please check the &url= parameter: it should to be a valid URL');
+        }
         // validate referrer
         $referrer = Url::getReferrer();
         if (empty($referrer) || !Url::isLocalUrl($referrer)) {
@@ -93,9 +95,6 @@ class Controller extends \Piwik\Plugin\Controller
         if (!self::isPiwikUrl($url)) {
             Piwik::checkUserHasSomeViewAccess();
         }
-        if (!UrlHelper::isLookLikeUrl($url)) {
-            die('Please check the &url= parameter: it should to be a valid URL');
-        }
         Common::sendHeader('Content-Type: text/html; charset=utf-8');
         echo '<html><head><meta http-equiv="refresh" content="0;url=' . $url . '" /></head></html>';
 
diff --git a/plugins/QueuedTracking b/plugins/QueuedTracking
index 0c609086f4e190a8aac88329ffc50fe4a19260c2..abe4986e60d79564ab82676797833da2e3808d60 160000
--- a/plugins/QueuedTracking
+++ b/plugins/QueuedTracking
@@ -1 +1 @@
-Subproject commit 0c609086f4e190a8aac88329ffc50fe4a19260c2
+Subproject commit abe4986e60d79564ab82676797833da2e3808d60
diff --git a/plugins/Referrers/Columns/Base.php b/plugins/Referrers/Columns/Base.php
index 5c80aa63498752c63dc0b217d982706625ca8640..ab6090e78e9abae87ce1a8c718eea46d4c359674 100644
--- a/plugins/Referrers/Columns/Base.php
+++ b/plugins/Referrers/Columns/Base.php
@@ -339,6 +339,9 @@ abstract class Base extends VisitDimension
         // 2) Referrer URL stored in the _ref cookie
         // 3) If no info from the cookie, attribute to the current visit referrer
 
+
+        Common::printDebug("Attributing a referrer to this Goal...");
+
         // 3) Default values: current referrer
         $type    = $visitor->getVisitorColumn('referer_type');
         $name    = $visitor->getVisitorColumn('referer_name');
@@ -351,11 +354,13 @@ abstract class Base extends VisitDimension
             && !empty($name)
         ) {
             // Use default values per above
+            Common::printDebug("Invalid Referrer information found: current visitor seems to have used a campaign, but campaign name was not found in the request.");
         } // 1) Campaigns from 1st party cookie
         elseif (!empty($referrerCampaignName)) {
             $type    = Common::REFERRER_TYPE_CAMPAIGN;
             $name    = $referrerCampaignName;
             $keyword = $referrerCampaignKeyword;
+            Common::printDebug("Campaign information from 1st party cookie is used.");
         } // 2) Referrer URL parsing
         elseif (!empty($referrerUrl)) {
 
@@ -367,7 +372,13 @@ abstract class Base extends VisitDimension
                 $type    = $referrer['referer_type'];
                 $name    = $referrer['referer_name'];
                 $keyword = $referrer['referer_keyword'];
+
+                Common::printDebug("Referrer URL (search engine or website) is used.");
+            } else {
+                Common::printDebug("No referrer attribution found for this user. Current user's visit referrer is used.");
             }
+        } else {
+            Common::printDebug("No referrer attribution found for this user. Current user's visit referrer is used.");
         }
 
         $this->setCampaignValuesToLowercase($type, $name, $keyword);
diff --git a/plugins/Referrers/Controller.php b/plugins/Referrers/Controller.php
index efd1820d443332d8a6054b441b0d1994513bab43..c628af7a83157c5f96a278cadc075f7d30cad840 100644
--- a/plugins/Referrers/Controller.php
+++ b/plugins/Referrers/Controller.php
@@ -310,7 +310,7 @@ class Controller extends \Piwik\Plugin\Controller
         // HTML
         $api = SettingsPiwik::getPiwikUrl()
             . '?module=API&method=Referrers.getKeywordsForPageUrl'
-            . '&format=php'
+            . '&format=json'
             . '&filter_limit=10'
             . '&token_auth=' . Piwik::getCurrentUserTokenAuth();
 
@@ -325,7 +325,8 @@ function DisplayTopKeywords($url = "")
 	// Get the Keywords data
 	$url = empty($url) ? "http://". $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] : $url;
 	$api = "' . $api . '&url=" . urlencode($url);
-	$keywords = @unserialize(file_get_contents($api));
+	$keywords = @json_decode(file_get_contents($api), $assoc = true);
+	Common::sendHeader(\'Content-Type: text/html; charset=utf-8\', true);
 	if ($keywords === false || isset($keywords["result"])) {
 		// DEBUG ONLY: uncomment for troubleshooting an empty output (the URL output reveals the token_auth)
 		// echo "Error while fetching the <a href=\'$api\'>Top Keywords from Piwik</a>";
@@ -362,7 +363,8 @@ function DisplayTopKeywords($url = "")
             // Get the Keywords data
             $url = empty($url) ? "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] : $url;
             $api = $api . "&url=" . urlencode($url);
-            $keywords = @unserialize(file_get_contents($api));
+            $keywords = @json_decode(file_get_contents($api), $assoc = true);
+            Common::sendHeader('Content-Type: text/html; charset=utf-8', true);
             if ($keywords === false || isset($keywords["result"])) {
                 // DEBUG ONLY: uncomment for troubleshooting an empty output (the URL output reveals the token_auth)
                 //echo "Error while fetching the <a href=\'".$api."\'>Top Keywords from Piwik</a>";
diff --git a/plugins/Referrers/Referrers.php b/plugins/Referrers/Referrers.php
index cefa27bef83eb5e051082e1e8314e56fe132b2fa..ce8667929bba3a117deea4383021060d4a43cce4 100644
--- a/plugins/Referrers/Referrers.php
+++ b/plugins/Referrers/Referrers.php
@@ -23,9 +23,9 @@ require_once PIWIK_INCLUDE_PATH . '/plugins/Referrers/functions.php';
 class Referrers extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'Insights.addReportToOverview'      => 'addReportToInsightsOverview',
diff --git a/plugins/Referrers/lang/it.json b/plugins/Referrers/lang/it.json
index 455e665912f605ccdba76afa91cf880cb81b68a2..94396a0dcd91bd1a5b794be18fafbec99a5671a8 100644
--- a/plugins/Referrers/lang/it.json
+++ b/plugins/Referrers/lang/it.json
@@ -1,8 +1,8 @@
 {
     "Referrers": {
-        "AllReferrersReportDocumentation": "Questo report mostra tutti i tuoi Referenti in un unico report che elenca tutti i siti web, Parole chiave di ricerca e Campagne utilizzate dai visitatori per trovare il tuo sito web.",
+        "AllReferrersReportDocumentation": "Questo report mostra tutti i tuoi Referenti in un unico report che elenca tutti i Siti web, le Parole chiave di ricerca e Campagne utilizzate dai visitatori per trovare il tuo sito web.",
         "Campaigns": "Campagne",
-        "CampaignsDocumentation": "Visitatori che sono arrivati sul tuo sito web a seguito di una campagna. %s Vedi il Report %s per maggiori dettagli.",
+        "CampaignsDocumentation": "Visitatori che sono arrivati sul tuo sito web a seguito di una campagna. %s Vedi il%s Report per maggiori dettagli.",
         "CampaignsReportDocumentation": "Questo report mostra quali campagne hanno portato i visitatori sul tuo sito web. %s Per ulteriori informazioni sulle campagne di monitoraggio, leggi la %sdocumentazione campagne su piwik.org%s",
         "ColumnCampaign": "Campagna",
         "ColumnSearchEngine": "Motore di ricerca",
@@ -12,43 +12,43 @@
         "DirectEntry": "Ingressi Diretti",
         "DirectEntryDocumentation": "Un visitatore ha inserito l'URL nel proprio browser e ha iniziato la navigazione sul tuo sito web - è entrato direttamente al sito.",
         "Distinct": "Referenti distinti per tipo",
-        "DistinctCampaigns": "Campagne",
-        "DistinctKeywords": "Parole chiave",
-        "DistinctSearchEngines": "Motori di ricerca",
-        "DistinctWebsites": "Siti web",
+        "DistinctCampaigns": "campagne distinte",
+        "DistinctKeywords": "parole chiave distinte",
+        "DistinctSearchEngines": "motori di ricerca distinti",
+        "DistinctWebsites": "siti web distinti",
         "EvolutionDocumentation": "Questa è una panoramica dei referenti che hanno portato i visitatori sul tuo sito web.",
-        "EvolutionDocumentationMoreInfo": "Per ulteriori informazioni sui diversi tipi referenti, consulta la documentazione della%s tabella.",
+        "EvolutionDocumentationMoreInfo": "Per ulteriori informazioni sui diversi tipi referenti, consulta la documentazione della %s tabella.",
         "Keywords": "Keywords",
-        "KeywordsReportDocumentation": "Questo report mostra le parole chiave che gli utenti hanno ricercato prima prima di venire indirizzati sul tuo sito web. %s Cliccando su una riga della tabella, è possibile vedere la distribuzione dei motori di ricerca che sono stati interrogati per la parola chiave.",
+        "KeywordsReportDocumentation": "Questo report mostra le parole chiave che gli utenti hanno ricercato prima di venire indirizzati sul tuo sito web. %s Cliccando su una riga della tabella, è possibile vedere la distribuzione dei motori di ricerca che sono stati interrogati per la parola chiave.",
         "PluginDescription": "Restituisce i dati dei Referrer: Motori di Ricerca, Keywords, Siti, Campagne, Social media, Ingressi diretti.",
         "Referrer": "Referente",
         "ReferrerName": "Nome Referente",
-        "Referrers": "Provenienze",
+        "Referrers": "Referenti",
         "ReferrersOverview": "Panoramica Referenti",
-        "ReferrerTypes": "Tipi di Referer",
+        "ReferrerTypes": "Tipi di Referenti",
         "SearchEngines": "Motori di ricerca",
         "SearchEnginesDocumentation": "Un visitatore è stato portato sul tuo sito da un motore di ricerca. %s Vedi il %s report per maggiori dettagli.",
-        "SearchEnginesReportDocumentation": "Questo report mostra quali motori di ricerca dhanno portato gli utenti sull tuo sito web. %s Cliccando su una riga della tabella è possibile vedere ciò che gli utenti stavano cercando utilizzando un determinato motore di ricerca.",
+        "SearchEnginesReportDocumentation": "Questo report mostra quali motori di ricerca hanno portato gli utenti sul tuo sito web. %s Cliccando su una riga della tabella è possibile vedere ciò che gli utenti stavano cercando utilizzando un determinato motore di ricerca.",
         "SocialFooterMessage": "Questo è un sottoinsieme dei siti web riportati a sinistra. Esso filtra altri siti web in modo da poter confrontare direttamente i vostri referenti di social network.",
         "Socials": "Social Networks",
         "SocialsReportDocumentation": "Questo report mostra quali social networks hanno portato i visitatori sul tuo sito web. <br \/> Cliccando su una riga della tabella si può vedere da quali pagine di social network i visitatori sono venuti sul tuo sito web.",
         "SubmenuSearchEngines": "Motori di ricerca e parole chiave",
-        "SubmenuWebsites": "Siti web",
+        "SubmenuWebsites": "Siti web e Social",
         "Type": "Tipo di referente",
         "TypeCampaigns": "%s da campagne",
         "TypeDirectEntries": "%s ingressi diretti",
         "TypeReportDocumentation": "Questa tabella contiene informazioni sulla distribuzione dei tipi di referente.",
-        "TypeSearchEngines": "%s da motore di ricerca",
+        "TypeSearchEngines": "%s da motori di ricerca",
         "TypeWebsites": "%s da siti web",
         "UsingNDistinctUrls": "(usando %s URL distinti)",
         "ViewAllReferrers": "Vedi tutti i Referenti",
         "ViewReferrersBy": "Vedi Referenti per %s",
         "Websites": "Siti web",
-        "WebsitesDocumentation": "Il visitatore ha seguito un link suun altro sito web che lo ha portato sul tuo sito. %s Vedi il %s report per maggiori dettagli.",
+        "WebsitesDocumentation": "Il visitatore ha seguito un link su un altro sito web che lo ha portato sul tuo. %s Vedi il %s report per maggiori dettagli.",
         "WebsitesReportDocumentation": "In questa tabella è possibile vedere quali siti web hanno portato i visitatori sul tuo sito. %s Cliccando su una riga della tabella è possibile vedere su quali URL si trovavano i link al tuo sito.",
-        "WidgetExternalWebsites": "Lista di Siti web esterni",
+        "WidgetExternalWebsites": "Elenco di Siti web esterni",
         "WidgetGetAll": "Tutti i Referenti",
-        "WidgetSocials": "Elenco dei social network",
+        "WidgetSocials": "Elenco di social network",
         "WidgetTopKeywordsForPages": "Top Keyword per URL Pagina",
         "XPercentOfVisits": "%s%% di visite"
     }
diff --git a/plugins/Referrers/lang/zh-cn.json b/plugins/Referrers/lang/zh-cn.json
index cc53e77b1778245ac2f2e55cf9ca1adfa5a19303..7fdef3a5f02784f40e92a7188efc1f9cd84d3d2a 100644
--- a/plugins/Referrers/lang/zh-cn.json
+++ b/plugins/Referrers/lang/zh-cn.json
@@ -20,10 +20,12 @@
         "EvolutionDocumentationMoreInfo": "不同的来源分类详情请看 %s 表的文档.",
         "Keywords": "关键词",
         "KeywordsReportDocumentation": "本报表显示访客搜索哪些关键字后来到了您的网站。%s 点击表中的一行,可查看用于搜索该关键字的搜索引擎列表。",
+        "PluginDescription": "报告引荐数据:搜索引擎,关键词,网站,广告活动,社会化媒体,直接进入。",
         "Referrer": "来源分析",
         "ReferrerName": "来源名称",
         "Referrers": "来源分析",
         "ReferrersOverview": "来源总表",
+        "ReferrerTypes": "引荐类型",
         "SearchEngines": "搜索引擎",
         "SearchEnginesDocumentation": "访客来自搜索引擎。%s 查看 %s 报表了解详情。",
         "SearchEnginesReportDocumentation": "本报表显示哪些搜索引擎给您带来了访客。%s 点击表中的一行,可查看访客使用该搜索引擎搜索的内容。",
@@ -47,6 +49,7 @@
         "WidgetExternalWebsites": "来源网站",
         "WidgetGetAll": "所有来源",
         "WidgetSocials": "社交网络",
-        "WidgetTopKeywordsForPages": "主要关键词"
+        "WidgetTopKeywordsForPages": "主要关键词",
+        "XPercentOfVisits": "%s%% 个访问"
     }
 }
\ No newline at end of file
diff --git a/plugins/Resolution/Resolution.php b/plugins/Resolution/Resolution.php
index 49b2d3a9a62c7a745c909d54cc50b2ce0c190958..5ab7692ccf6e1e54dad7d05b5bd7cdacd1079e0b 100644
--- a/plugins/Resolution/Resolution.php
+++ b/plugins/Resolution/Resolution.php
@@ -17,9 +17,9 @@ use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
 class Resolution extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'Live.getAllVisitorDetails'            => 'extendVisitorDetails',
diff --git a/plugins/Resolution/lang/it.json b/plugins/Resolution/lang/it.json
index 41dc660c4f7c38b559ec206be5c6202a15aa5fdd..702f8911c540bd7ac1d9934e31fc446c25893f77 100644
--- a/plugins/Resolution/lang/it.json
+++ b/plugins/Resolution/lang/it.json
@@ -5,7 +5,7 @@
         "Configurations": "Configurazioni",
         "PluginDescription": "Restituisce la risoluzione di schermo dei tuoi visitatori.",
         "Resolutions": "Risoluzioni",
-        "WidgetGlobalVisitors": "Riepilogo configurazione visitatori",
+        "WidgetGlobalVisitors": "Configurazione visitatori",
         "WidgetGlobalVisitorsDocumentation": "Questo report mostra le configurazioni globali più comuni che i visitatori avevano. Una configurazione è la combinazione di un sistema operativo, un tipo browser e una risoluzione di schermo.",
         "WidgetResolutions": "Risoluzione schermo"
     }
diff --git a/plugins/SEO/lang/it.json b/plugins/SEO/lang/it.json
index b7dcf0a06cbc6cd4e9cb52e3fe24b2f6343ea99d..55b1b044e534dcc3bd6a7f2de940473089abdcd7 100644
--- a/plugins/SEO/lang/it.json
+++ b/plugins/SEO/lang/it.json
@@ -1,6 +1,6 @@
 {
     "SEO": {
-        "PluginDescription": "Questo plugin estrae e visualizza le metriche SEO. Alexa web ranking, Google Pagerank, numero di pagine indicizzate e i backlink del sito al momento selezionato.",
+        "PluginDescription": "Questo plugin estrae e visualizza le metriche SEO: Alexa web ranking, Google Pagerank, numero di pagine indicizzate e i backlink del sito al momento selezionato.",
         "AlexaRank": "Alexa Rank",
         "Bing_IndexedPages": "Pagine indicizzate da Bing",
         "Dmoz": "Voci DMOZ",
diff --git a/plugins/SEO/lang/sr.json b/plugins/SEO/lang/sr.json
index fc86a2cd81130a2c4f4c3a580b67670e739ca217..eff63967c012233269b5148ae3ddcc853949de4f 100644
--- a/plugins/SEO/lang/sr.json
+++ b/plugins/SEO/lang/sr.json
@@ -1,5 +1,6 @@
 {
     "SEO": {
+        "PluginDescription": "Ovaj dodatak prikuplja i prikazuje SEO metrike: Aleksa rangiranje, Gugl rangiranje, broj indeksiranih stranica i povratnih linkova za trenutno odabrani sajt.",
         "AlexaRank": "Alexa rangiranje",
         "Bing_IndexedPages": "Stranice koje je indeksirao Bing",
         "Dmoz": "DMOZ stavke",
diff --git a/plugins/SEO/lang/zh-cn.json b/plugins/SEO/lang/zh-cn.json
index a21d0a51323d59808b758ebafb823ee24ce78804..77a35b915d7d7f7b565a1076b523f6d46b122a1e 100644
--- a/plugins/SEO/lang/zh-cn.json
+++ b/plugins/SEO/lang/zh-cn.json
@@ -1,5 +1,6 @@
 {
     "SEO": {
+        "PluginDescription": "这个插件提取和显示的搜索引擎优化指标:Alexa的网站排名,谷歌的PageRank,索引和反向当前选择的网站数。",
         "AlexaRank": "Alexa 排名",
         "Bing_IndexedPages": "Bing 索引页面",
         "Dmoz": "DMOZ 条目",
diff --git a/plugins/ScheduledReports/ScheduledReports.php b/plugins/ScheduledReports/ScheduledReports.php
index 9876ad0ed7dd2e3581f6084e000b9173f8318bf5..c66a6ad0d68ea8f3c210370d0ea2c20f3155c18d 100644
--- a/plugins/ScheduledReports/ScheduledReports.php
+++ b/plugins/ScheduledReports/ScheduledReports.php
@@ -71,9 +71,9 @@ class ScheduledReports extends \Piwik\Plugin
     const OPTION_KEY_LAST_SENT_DATERANGE = 'report_last_sent_daterange_';
 
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getJavaScriptFiles'           => 'getJsFiles',
diff --git a/plugins/ScheduledReports/lang/cs.json b/plugins/ScheduledReports/lang/cs.json
index 7f59aba1113f8f87396af6c3a49af8514007ded8..836eb47133deeda2e101c726fc384ac61cbc78fb 100644
--- a/plugins/ScheduledReports/lang/cs.json
+++ b/plugins/ScheduledReports/lang/cs.json
@@ -24,9 +24,11 @@
         "Pagination": "Stránka %s z %s",
         "PiwikReports": "Hlášení Piwiku",
         "PleaseFindAttachedFile": "Prosím najděte v přiloženém souboru %1$s hlášení pro %2$s",
+        "SentFromX": "Odesláno z %s.",
         "PleaseFindBelow": "Najděte níže vaše %1$s hlášení pro %2$s.",
         "PluginDescription": "Vytvořte vlastní emailová hlášení a naplánujte jejich zaslání denně, týdně nebo měsíčně jednomu nebo více lidem. Je podporováno mnoho formátů (HTML, PDF, CSV, obrázky).",
         "ReportFormat": "Formát hlášení",
+        "ReportHour": "Odeslat hlášení v %s hodin",
         "ReportIncludeNWebsites": "Hlášení bude obsahovat hlavní měření pro webové stránky, které mají aspoň jednnu návštěvu z %s aktuálně dostupných stránek.",
         "ReportSent": "Hlášení posláno",
         "ReportsIncluded": "Zahrnuté statistiky",
diff --git a/plugins/ScheduledReports/lang/de.json b/plugins/ScheduledReports/lang/de.json
index 4b367ac92255aaac4a82d502fbd408d34da5cbef..7e4ed30e0bea3fe58ee06bca50f95b28eb4ec95b 100644
--- a/plugins/ScheduledReports/lang/de.json
+++ b/plugins/ScheduledReports/lang/de.json
@@ -24,6 +24,7 @@
         "Pagination": "Seite %s von %s",
         "PiwikReports": "Piwik-Berichte",
         "PleaseFindAttachedFile": "Sie finden in der angehängten Datei Ihren Bericht (Intervall: %1$s) für %2$s.",
+        "SentFromX": "Gesendet von %s",
         "PleaseFindBelow": "Unterhalb befindet sich der Bericht (Intervall: %1$s) für %2$s.",
         "PluginDescription": "Erstellen Sie eigene Berichte und planen Sie deren täglichen, wöchentlichen oder monatlichen Versand an einen oder mehrere Empfänger. Diverse Berichtsformate werden unterstützt (HTML, PDF, CSV, Bilder).",
         "ReportFormat": "Berichtsformat",
diff --git a/plugins/ScheduledReports/lang/el.json b/plugins/ScheduledReports/lang/el.json
index dc8ed941abcb248347665142308766edd158deca..cea172536bf0b1ad75e89e79733766392e67876c 100644
--- a/plugins/ScheduledReports/lang/el.json
+++ b/plugins/ScheduledReports/lang/el.json
@@ -24,6 +24,7 @@
         "Pagination": "Σελίδα %s από %s",
         "PiwikReports": "Αναφορές Piwik",
         "PleaseFindAttachedFile": "Βρείτε στο συνημμένο αρχείο την αναφορά %1$s για %2$s.",
+        "SentFromX": "Στάλθηκε από %s.",
         "PleaseFindBelow": "Βρείτε παρακάτω την αναφορά %1$s για τη %2$s.",
         "PluginDescription": "Δημιουργεί προσαρμοσμένες αναφορές και τις προγραμματίζει για καθημερινή, εβδομαδιαία ή μηνιαία αναφορά σε ένα ή περισσότερα άτομα. Υποστηρίζονται αρκετοί τύποι αναφορών (html, pdf, csv, εικόνες).",
         "ReportFormat": "Μορφή Αναφοράς",
diff --git a/plugins/ScheduledReports/lang/fr.json b/plugins/ScheduledReports/lang/fr.json
index 5b8a0b27baa087214fbc23a869ec1dde11d86c8a..97521be39a5409a4f08605443762aece83476cc2 100644
--- a/plugins/ScheduledReports/lang/fr.json
+++ b/plugins/ScheduledReports/lang/fr.json
@@ -24,6 +24,7 @@
         "Pagination": "Page %s sur %s",
         "PiwikReports": "Rapports Piwik",
         "PleaseFindAttachedFile": "Veuillez trouver en pièce jointe votre rapport %1$s pour %2$s.",
+        "SentFromX": "Envoyé depuis %s.",
         "PleaseFindBelow": "Veuillez trouver ci-dessous votre %1$s rapport pour %2$s.",
         "PluginDescription": "Créez des rapports personnalisés et planifiez de les envoyer par courriel quotidiennement, hebdomadairement ou mensuellement à une ou plusieurs personnes. Plusieurs formats de rapports sont supportés (html, pdf, csv, images).",
         "ReportFormat": "Format du rapport",
diff --git a/plugins/ScheduledReports/lang/nb.json b/plugins/ScheduledReports/lang/nb.json
index 58f50e1528215d297d87986617f423ec8931cc9f..4b49ab9199737f791f986c31eff1ddc4ebe22397 100644
--- a/plugins/ScheduledReports/lang/nb.json
+++ b/plugins/ScheduledReports/lang/nb.json
@@ -14,6 +14,7 @@
         "Pagination": "Side %s av %s",
         "PiwikReports": "Piwik-rapporter",
         "PleaseFindAttachedFile": "I den vedlagte filen finner du din %1$s rapport for %2$s.",
+        "SentFromX": "Sendt fra %s.",
         "PleaseFindBelow": "Nedenfor finner du din %1$s rapport for %2$s.",
         "ReportFormat": "Rapportformat",
         "ReportHour": "Send rapport klokken %s",
diff --git a/plugins/ScheduledReports/lang/sr.json b/plugins/ScheduledReports/lang/sr.json
index e063dc3915b41386dcbf8d9134b973cc8f5dad39..e3666b4c53cad34c0eee77a19a28339bcc29af3e 100644
--- a/plugins/ScheduledReports/lang/sr.json
+++ b/plugins/ScheduledReports/lang/sr.json
@@ -24,9 +24,11 @@
         "Pagination": "Strana %s od %s",
         "PiwikReports": "Piwik izveštaji",
         "PleaseFindAttachedFile": "u prilogu se nalazi vaš %1$s izveštaj za %2$s.",
+        "SentFromX": "Poslato od strane %s.",
         "PleaseFindBelow": "u nastavku je vaš %1$s izveštaj za %2$s.",
         "PluginDescription": "Kreirajte sopstvene izveštaje i zakažite njihovo slanje putem elektronske pošte dnevno, nedeljno ili mesečno jednoj ili više osoba. Više različitih formata je podržano (HTML, PDF, CSV, slike).",
         "ReportFormat": "Format izveštaja",
+        "ReportHour": "Pošalji izveštaj u %s",
         "ReportIncludeNWebsites": "Izveštaj će obuhvatiti glavne metrike za sve sajtove koji imaju barem jednu posetu (od ukupno %s sajtova koliko je trenutno dostupno).",
         "ReportSent": "Izveštaj je poslat",
         "ReportsIncluded": "Statistika uključena",
diff --git a/plugins/ScheduledReports/lang/zh-cn.json b/plugins/ScheduledReports/lang/zh-cn.json
index 0b2552a2d14834df8c97b0f864d2fe95c90ee752..f9b79ebf690a86dc0bc911f0a861d251cc13778c 100644
--- a/plugins/ScheduledReports/lang/zh-cn.json
+++ b/plugins/ScheduledReports/lang/zh-cn.json
@@ -17,14 +17,18 @@
         "EmailSchedule": "邮件计划",
         "EvolutionGraph": "显示前 %s 个的历史图形",
         "FrontPage": "首页",
+        "PersonalEmailReports": "个人电子邮件报告",
         "MonthlyScheduleHelp": "每月计划: 报表将会在每月的第一天寄出。",
         "MustBeLoggedIn": "登录后才能创建和自定义报表。",
         "NoRecipients": "这个报表没有收件人",
         "Pagination": "第 %s 页,共 %s 页",
         "PiwikReports": "Piwik 报表",
         "PleaseFindAttachedFile": "您的 %2$s 的 %1$s 报表在附件中。",
+        "SentFromX": "来自%s发送。",
         "PleaseFindBelow": "下面是您的 %2$s 的 %1$s 报表。",
+        "PluginDescription": "创建自定义报告,并安排他们每天通过电子邮件发送,每周或每月一个或几个人。一些报告格式支持(HTML,PDF,CSV,图像)。",
         "ReportFormat": "报表格式",
+        "ReportHour": "发送报告在 %s 点的时候",
         "ReportIncludeNWebsites": "本报表包括至少有一次访问(来自当前的 %s 个网站)的所有网站的主要指标。",
         "ReportSent": "报表已发出",
         "ReportsIncluded": "包括统计",
diff --git a/plugins/SecurityInfo b/plugins/SecurityInfo
index 7a8aa2939e4d7cab3c2a3c6e23ded823e409c66d..0c630c240963446c90396939d323416852b3ea48 160000
--- a/plugins/SecurityInfo
+++ b/plugins/SecurityInfo
@@ -1 +1 @@
-Subproject commit 7a8aa2939e4d7cab3c2a3c6e23ded823e409c66d
+Subproject commit 0c630c240963446c90396939d323416852b3ea48
diff --git a/plugins/SegmentEditor/SegmentEditor.php b/plugins/SegmentEditor/SegmentEditor.php
index 4ed59a4a7b5fd89752c1d4be06a860e8af699ff7..9107935e7307fe74d7c163033a348b98c72dd776 100644
--- a/plugins/SegmentEditor/SegmentEditor.php
+++ b/plugins/SegmentEditor/SegmentEditor.php
@@ -18,9 +18,9 @@ use Piwik\Version;
 class SegmentEditor extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'Segments.getKnownSegmentsToArchiveForSite'  => 'getKnownSegmentsToArchiveForSite',
diff --git a/plugins/SegmentEditor/lang/cs.json b/plugins/SegmentEditor/lang/cs.json
index 851af5b92154a40806c487d27ff56736ebc38435..36dd2084b373b4afa97249ab7d86665fac7f2373 100644
--- a/plugins/SegmentEditor/lang/cs.json
+++ b/plugins/SegmentEditor/lang/cs.json
@@ -1,5 +1,6 @@
 {
     "SegmentEditor": {
+        "PluginDescription": "Vytvářejte a znovu použijte vlastní segmenty návštěvníků za použití editoru segmentů.",
         "AddANDorORCondition": "Přidat podmínku %s",
         "AddNewSegment": "Přidat nový segment",
         "AreYouSureDeleteSegment": "Opravdu chcete odstranit tento segment?",
diff --git a/plugins/SegmentEditor/lang/sr.json b/plugins/SegmentEditor/lang/sr.json
index e713bde3b44a2e3bf1c2f1daa4ef7a59237ad477..82102c610e1473c2c49d170348bdae21e625e62c 100644
--- a/plugins/SegmentEditor/lang/sr.json
+++ b/plugins/SegmentEditor/lang/sr.json
@@ -1,5 +1,6 @@
 {
     "SegmentEditor": {
+        "PluginDescription": "Kreiranje segmentiranih izveštaja.",
         "AddANDorORCondition": "Dodavanje uslova %s",
         "AddNewSegment": "Dodavanje novog segmenta",
         "AreYouSureDeleteSegment": "Da li ste sigurni da želite da obrišete ovaj segment?",
diff --git a/plugins/SitesManager/API.php b/plugins/SitesManager/API.php
index 7c2715fa2b4d74a4e1a9dd694a81ed47ae3970c1..fabdd616e66e85dced3b6ec8f9d3e0b621fd5bca 100644
--- a/plugins/SitesManager/API.php
+++ b/plugins/SitesManager/API.php
@@ -263,6 +263,7 @@ class API extends \Piwik\Plugin\API
      *
      * @param bool|int $timestamp
      * @return array The list of website IDs
+     * @deprecated since 2.15 This method will be removed in Piwik 3.0, there is no replacement.
      */
     public function getSitesIdWithVisits($timestamp = false)
     {
diff --git a/plugins/SitesManager/Model.php b/plugins/SitesManager/Model.php
index 6a78a493c77266d38335eed3bc9e77c2399dff51..62372510ac971474b017a2ba4c0a7518321b07e5 100644
--- a/plugins/SitesManager/Model.php
+++ b/plugins/SitesManager/Model.php
@@ -80,8 +80,8 @@ class Model
     /**
      * Returns the list of the website IDs that received some visits since the specified timestamp.
      *
-     * @param \Piwik\Date $time
-     * @param \Piwik\Date $now
+     * @param string $time
+     * @param string $now
      * @return array The list of website IDs
      */
     public function getSitesWithVisits($time, $now)
diff --git a/plugins/SitesManager/SitesManager.php b/plugins/SitesManager/SitesManager.php
index 16c330d6c1cef067e306f0b28d9120fd5e2fdb90..cd37b6e63b91015e702eff1e67bb3a583345994b 100644
--- a/plugins/SitesManager/SitesManager.php
+++ b/plugins/SitesManager/SitesManager.php
@@ -26,9 +26,9 @@ class SitesManager extends \Piwik\Plugin
     const KEEP_URL_FRAGMENT_NO = 2;
 
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getJavaScriptFiles'        => 'getJsFiles',
diff --git a/plugins/SitesManager/lang/cs.json b/plugins/SitesManager/lang/cs.json
index 0b145e9a6a2da2ff21c72723af65c010248a743b..014c9f88f2327123f9b282221534d12d0e1bef55 100644
--- a/plugins/SitesManager/lang/cs.json
+++ b/plugins/SitesManager/lang/cs.json
@@ -1,6 +1,7 @@
 {
     "SitesManager": {
         "AddSite": "Přídat nový web",
+        "AddMeasurable": "Přidat nové měření",
         "AdvancedTimezoneSupportNotFound": "Pokročilá podpora časových zón nebyla ve vašem PHP (podporována v PHP >=5.2) nalezena. Stále můžete použít ruční UTF offset.",
         "AliasUrlHelp": "Je doporučeno, ale ne vyžadováno, specifikovat různé URL, jednu na řádku, které vaší návštěvníci používají pro přístup ke stránkám. Aliasy se neobjeví hlášení Odkazující stránky>WWW. Všimněte si, že není nutné zadávat URL s a bez 'www'. Piwik automaticky rozezná obě.",
         "ChangingYourTimezoneWillOnlyAffectDataForward": "Změna vaší časové zóny se projeví pouze v nových datech a nebude aplikována zpětně.",
@@ -66,13 +67,18 @@
         "SiteSearchUse": "Piwik můžete použít ke sledování a hlášení toho, co návštěvníci hledají pomocí interního vyhledávače.",
         "SiteWithoutDataTitle": "Zatím nebyla zaznamenána žádná data",
         "SiteWithoutDataDescription": "Pro tuto stránku nebyla zatím zaznamenána žádná analytická data.",
+        "SiteWithoutDataSetupTracking": "Prosím, nastavte %1$ssledovací javascriptový kód %2$s na vašich webových stránkách, a pak stránku obnovte.",
         "SuperUserAccessCan": "eUživatel se super uživatelským přístupem může také %sspecifikovat globální nastavení%s pro nové webové stránky.",
         "Timezone": "Časová zóna",
         "TrackingSiteSearch": "Sledování interního vyhledávání na stránkách",
         "TrackingTags": "Zaznamenávací tagy pro %s",
         "Urls": "URL",
         "UTCTimeIs": "UTC čas je %s",
+        "OnlyMatchedUrlsAllowed": "Sledovat návštěvy a akce pouze tehdy, když URL akce začíná jednou z výše uvedených URL.",
+        "OnlyMatchedUrlsAllowedHelp": "Pokud je povoleno, Piwik bude sledovat interní akce pouze tehdy, když je URL stránky jednou ze známých URL vašich webových stránek. To zabrání lidem, aby zahltili analýzu URL jiných stránek.",
         "WebsitesManagement": "Nastavení Web sídel",
+        "XManagement": "Spravovat %s",
+        "ChooseMeasurableTypeHeadline": "Co byste chtěl měřit?",
         "YouCurrentlyHaveAccessToNWebsites": "Momentálně máte přístup k %s stránce\/stránkám.",
         "YourCurrentIpAddressIs": "Vaše současná IP adresa je %s"
     }
diff --git a/plugins/SitesManager/lang/de.json b/plugins/SitesManager/lang/de.json
index 828e38ead4c45d8a7812cde26b11b0947d8e5e8c..159a7a74b24031686b1b8b88c471865a85fb8efb 100644
--- a/plugins/SitesManager/lang/de.json
+++ b/plugins/SitesManager/lang/de.json
@@ -74,6 +74,8 @@
         "TrackingTags": "Tracking-Code für %s",
         "Urls": "URLs",
         "UTCTimeIs": "UTC-Zeit ist %s.",
+        "OnlyMatchedUrlsAllowed": "Zeichne Besuche und Aktionen nur auf wenn die Aktions-URL mit einer der oben genannten URLs beginnt.",
+        "OnlyMatchedUrlsAllowedHelp": "Wenn aktiviert zeichnet Piwik nur noch interne Aktionen auf bei denen die Seiten-URL eine der bekannten URLs der Website ist. Dies hindert andere daran Ihre Analyse mit URLs von anderen Websites zu verfälschen.",
         "WebsitesManagement": "Websiteverwaltung",
         "XManagement": "%s verwalten",
         "ChooseMeasurableTypeHeadline": "Was möchten Sie messen?",
diff --git a/plugins/SitesManager/lang/el.json b/plugins/SitesManager/lang/el.json
index 9385aec3acb3918172bbf59da088283073f7e3aa..2670247d2798e33731dc97ba1587e638e401b432 100644
--- a/plugins/SitesManager/lang/el.json
+++ b/plugins/SitesManager/lang/el.json
@@ -74,6 +74,8 @@
         "TrackingTags": "Κώδικας εποπτείας για %s",
         "Urls": "Διευθύνσεις URL",
         "UTCTimeIs": "Ο Παγκόσμιος χρόνος είναι %s.",
+        "OnlyMatchedUrlsAllowed": "Να παρακολυθούνται επισκέψεις και οι ενέργειες μόνο όταν η διεύθυνση URL ξεκινάει με μία από τις παραπάνω διευθύνσεις URL.",
+        "OnlyMatchedUrlsAllowedHelp": "Όταν είναι ενεργοποιημένο, το Piwik θα παρακολουθεί εσωτερικές ενέργειες όταν η διεύθυνση URL είναι μία από τις γνωστές διευθύνσεις URL για τον ιστοτόπο σας. Αυτό αποτρέπει τρίτους από ανεπιθύμητη κίνηση στα αναλυτικά σας με διευθύνσεις URL από τρίτους ιστοτόπους.",
         "WebsitesManagement": "Διαχείριση ιστοσελίδων",
         "XManagement": "Διαχείριση του %s",
         "ChooseMeasurableTypeHeadline": "Τι θέλετε να μετρήσετε;",
diff --git a/plugins/SitesManager/lang/fr.json b/plugins/SitesManager/lang/fr.json
index c277dc3d46400f91fb8df5f51c121eec0262b8d8..283f77c0f3467640d7194f52f62be512eec230a3 100644
--- a/plugins/SitesManager/lang/fr.json
+++ b/plugins/SitesManager/lang/fr.json
@@ -74,6 +74,8 @@
         "TrackingTags": "Code de suivi pour %s",
         "Urls": "URLs",
         "UTCTimeIs": "L'heure UTC est %s.",
+        "OnlyMatchedUrlsAllowed": "Effectue le suivit des visites et actions uniquement quand l'URL d'action commence avec une des URL's ci-dessus.",
+        "OnlyMatchedUrlsAllowedHelp": "Quand activé, Piwik va effectuer le suivit des actions uniquement quand l'URL de la page est une des URL's de votre site web. Ceci empêche les gens de spammer vos données d'analyse avec des URL's d'autres sites web.",
         "WebsitesManagement": "Gestion des sites",
         "XManagement": "Gérer %s",
         "ChooseMeasurableTypeHeadline": "Que voudriez-vous mesurer ?",
diff --git a/plugins/SitesManager/lang/it.json b/plugins/SitesManager/lang/it.json
index 814f255f599536ef190bbd2639952b1b31aa5391..412011d891d88c2cb54eac260f878fc7abed04e6 100644
--- a/plugins/SitesManager/lang/it.json
+++ b/plugins/SitesManager/lang/it.json
@@ -3,7 +3,7 @@
         "AddSite": "Aggiungi un nuovo sito web",
         "AddMeasurable": "Aggiungi un nuovo sito",
         "AdvancedTimezoneSupportNotFound": "Non è stato trovato nel tuo PHP il supporto avanzato dei fusi orari (supportato in PHP> = 5.2). È comunque possibile scegliere manualmente un offset UTC.",
-        "AliasUrlHelp": "E' raccomandato, ma non necessario, di specificare le diverse URL che i tuoi utenti usano per accedere al sito. Gli URL alias di un sito non compariranno tra i siti Referer. Nota che non è necessario specificare le URL con e senza 'www' perchè Piwik li considererà; entrambi automaticamente.",
+        "AliasUrlHelp": "È raccomandato, ma non necessario, di specificare i diversi URL che i tuoi utenti usano per accedere al sito. Gli URL alias di un sito non compariranno tra i siti Referer. Nota che non è necessario specificare gli URL con e senza 'www' in quanto Piwik li considererà; entrambi automaticamente.",
         "ChangingYourTimezoneWillOnlyAffectDataForward": "Il cambio del fuso orario interesserà i prossimi report a partire da adesso, mentre quelli precedenti non saranno modificati.",
         "ChooseCityInSameTimezoneAsYou": "Scegli una città che si trova nel tuo stesso fuso orario.",
         "Currency": "Valuta",
@@ -16,18 +16,18 @@
         "EnableEcommerce": "Ecommerce attivato",
         "EnableSiteSearch": "Tracciamento Ricerca nel Sito abilitato",
         "EnableSiteSpecificUserAgentExclude": "Abilita l'esclusione dal sito di uno specifico user agent",
-        "EnableSiteSpecificUserAgentExclude_Help": "Se è necessario escludere diversi user agent per diversi siti web, seleziona questa casella, clicca su Salva e%1$saggiungi qui sopra gli user agents%2$s.",
+        "EnableSiteSpecificUserAgentExclude_Help": "Se è necessario escludere diversi user agent per diversi siti web, seleziona questa casella, clicca su Salva e%1$saggiungi qui sopra gli user agent%2$s.",
         "ExceptionDeleteSite": "Non è possibile cancellare questo sito web perché è l'unico registrato. Aggiungi prima un nuovo sito, quindi puoi cancellare questo.",
         "ExceptionEmptyName": "Il nome del sito non può essere vuoto.",
         "ExceptionInvalidCurrency": "La valuta \"%s\" non è valida. Inserisci un simbolo di valuta valido (es. %s)",
         "ExceptionInvalidIPFormat": "L'indirizzo IP da escludere \"%s\" non ha un formato IP valido (per esempio %s).",
-        "ExceptionInvalidTimezone": "Il timezone \"%s\" non è valido. Per favore inserisci un valido timezone.",
+        "ExceptionInvalidTimezone": "Il fuso orario \"%s\" non è valido. Per favore inseriscine uno valido.",
         "ExceptionInvalidUrl": "L'indirizzo \"%s\" non è un URL valido.",
         "ExceptionNoUrl": "Devi specificare almeno un URL per questo sito.",
         "ExcludedIps": "IP Esclusi",
         "ExcludedParameters": "Escludi Parametri",
         "ExcludedUserAgents": "User Agents Esclusi",
-        "GlobalExcludedUserAgentHelp1": "Inserisci l'elenco degli user agents da escludere dal monitoraggio di Piwik.",
+        "GlobalExcludedUserAgentHelp1": "Inserisci l'elenco degli user agent da escludere dal monitoraggio di Piwik.",
         "GlobalExcludedUserAgentHelp2": "È possibile utilizzare questo per escludere dal tracciamento alcuni bot.",
         "GlobalListExcludedIps": "Lista globale di IP Esclusi",
         "GlobalListExcludedQueryParameters": "Lista globale di parametri Query URL da escludere",
@@ -39,32 +39,32 @@
         "KeepURLFragments": "Tracciamento frammenti URL Pagina",
         "KeepURLFragmentsHelp": "Se la casella qui sottto è spuntata, i frammenti URL Pagina (tutti dopo il %1$s) verranno rimossi durante il tracciamento: %2$s verranno tracciati come %3$s",
         "KeepURLFragmentsHelp2": "È anche possibile ignorare questa impostazione per i singoli siti web qui sopra.",
-        "KeepURLFragmentsLong": "Conserva i frammenti di URL Pagina quando si tracciano le URL Pagina",
+        "KeepURLFragmentsLong": "Conserva i frammenti di URL Pagina quando si tracciano gli URL Pagina",
         "ListOfIpsToBeExcludedOnAllWebsites": "I seguenti indirizzi IP verranno esclusi dal tracking su tutti i siti.",
-        "ListOfQueryParametersToBeExcludedOnAllWebsites": "I parametri URL Query qui sotto saranno esclusi dalle URL su tutti i siti.",
+        "ListOfQueryParametersToBeExcludedOnAllWebsites": "I parametri URL Query qui sotto saranno esclusi dagli URL su tutti i siti.",
         "ListOfQueryParametersToExclude": "Inserisci l'elenco dei parametri di ricerca URL, uno per riga, da escludere dai reports URL Pagina.",
         "MainDescription": "Per generare i report dei tuoi siti web, devi configurarli in Piwik! Aggiungi, aggiorna, cancella i siti web e visualizza il codice JavaScript da inserire nelle tue pagine.",
         "NotAnEcommerceSite": "Sito non Ecommerce",
         "NotFound": "Nessun sito trovato per",
         "NoWebsites": "Non hai configurato alcun sito web da amministrare.",
-        "OnlyOneSiteAtTime": "Puoi modificare solo un sito per volta. Per favore Salva o Annulla le modifiche attuali al sito %s.",
-        "PiwikOffersEcommerceAnalytics": "Piwik permette statistiche Ecommerce avanzate di monitoraggio e reporting. Per saperne di più su%s Statistiche Ecommerce%s.",
+        "OnlyOneSiteAtTime": "Puoi modificare solo un sito per volta. Per favore Salva o Annulla le attuali modifiche al sito %s.",
+        "PiwikOffersEcommerceAnalytics": "Piwik permette statistiche Ecommerce avanzate di monitoraggio e reporting. Vai, per saperne di più, su%s Statistiche Ecommerce%s.",
         "PiwikWillAutomaticallyExcludeCommonSessionParameters": "Piwik escluderà automaticamente i parametri di sessioni comuni (%s).",
         "PluginDescription": "La Gestione dei Siti ti permette di aggiungere e modificare i siti web esistenti.",
         "SearchCategoryDesc": "Piwik può anche monitorare la categoria Ricerca per ogni parola chiave di ricerca interna al sito.",
         "SearchCategoryLabel": "Parametro categoria",
         "SearchCategoryParametersDesc": "Puoi immettere una lista di parametri di ricerca separati da virgola specificando la categoria di ricerca.",
         "SearchKeywordLabel": "Parametro di ricerca",
-        "SearchKeywordParametersDesc": "Immetti una lista separata da virgola di tutti i nomi dei parametri di ricerca che contengono la parola chiave di ricerca del sito.",
-        "SearchParametersNote": "Nota: i parametri di ricerca e parametri della categoria saranno utilizzati solo per i siti web che hanno la Ricerca nel Sito abilitata ma hanno lasciato questi parametri vuoti.",
-        "SearchParametersNote2": "Per disabilitare Ricerca nel Sito per i nuovi siti web, lascia vuoti questi due campi.",
-        "SearchUseDefault": "Usa i parametri %sdefault%s di Ricerca nel Sito",
+        "SearchKeywordParametersDesc": "Immetti un elenco separato da virgola di tutti i nomi dei parametri di ricerca che contengono la parola chiave di ricerca del sito.",
+        "SearchParametersNote": "Nota: parametri di ricerca e parametri di categoria saranno utilizzati solo per i siti web che hanno la Ricerca nel Sito abilitata ma hanno lasciato questi parametri vuoti.",
+        "SearchParametersNote2": "Per disabilitare la Ricerca nel Sito per i nuovi siti web, lascia vuoti questi due campi.",
+        "SearchUseDefault": "Usa i parametri %spredefiniti%s di Ricerca nel Sito",
         "SelectACity": "Seleziona una città",
-        "SelectDefaultCurrency": "È possibile selezionare la valuta da impostare di default per i nuovi siti web.",
-        "SelectDefaultTimezone": "Puoi selezionare il fuso orario da caricare di default per i nuovi siti.",
+        "SelectDefaultCurrency": "È possibile selezionare la valuta predefinita da impostare per i nuovi siti web.",
+        "SelectDefaultTimezone": "Puoi selezionare il fuso orario predefinito da caricare per i nuovi siti.",
         "ShowTrackingTag": "Vedi codice Tracking",
         "Sites": "Siti web",
-        "SiteSearchUse": "È possibile utilizzare Piwik per monitorare e creare reports su ciò che i visitatori stanno cercando nel motore di ricerca interno del tuo sito web.",
+        "SiteSearchUse": "È possibile utilizzare Piwik per monitorare e creare dei report su ciò che i visitatori stanno cercando nel motore di ricerca interno del tuo sito web.",
         "SiteWithoutDataTitle": "Non è stato ancora registrato alcun dato",
         "SiteWithoutDataDescription": "Per questo sito non sono ancora stati tracciati dati statistici.",
         "SiteWithoutDataSetupTracking": "Imposta il %1$scodice di tracciamento JavaScript%2$s nel sito e ricarica la pagina.",
diff --git a/plugins/SitesManager/lang/nl.json b/plugins/SitesManager/lang/nl.json
index 162f67e6727a6c490057f516e24a63b5d1f17d53..8acbfa3042923c77319cd5f6096addb58885d07f 100644
--- a/plugins/SitesManager/lang/nl.json
+++ b/plugins/SitesManager/lang/nl.json
@@ -48,6 +48,7 @@
         "PiwikOffersEcommerceAnalytics": "In Piwik is een geavanceerde Ecommerce Analytics tracking & rapportage mogelijk. Leer meer over %s Ecommerce Analytics%s.",
         "PiwikWillAutomaticallyExcludeCommonSessionParameters": "Piwik sluit automatisch veelvoorkomende sessie parameters uit (%s).",
         "PluginDescription": "Website beheer laat je toe nieuwe",
+        "SearchCategoryDesc": "Piwik kan ook de zoekcategorieën bijhouden voor elk zoekwoord gebruikt op de lokale zoekmachine.",
         "SearchCategoryLabel": "Categorie parameter",
         "SearchKeywordLabel": "Query parameter",
         "SearchKeywordParametersDesc": "Voer een komma gescheiden lijst in van alle query parameter namen die het site zoek sleutelwoord bevatten.",
diff --git a/plugins/SitesManager/lang/sr.json b/plugins/SitesManager/lang/sr.json
index a83da4d4651e3b9e7d65c63fe9ebe2dd8e7fc81f..5d6605c4aa76074e624f49bb0ff2c6e8cff7662e 100644
--- a/plugins/SitesManager/lang/sr.json
+++ b/plugins/SitesManager/lang/sr.json
@@ -1,6 +1,7 @@
 {
     "SitesManager": {
         "AddSite": "Dodavanje novog sajta",
+        "AddMeasurable": "Dodavanje novog parametra za merenje",
         "AdvancedTimezoneSupportNotFound": "Napredna podrška za vremenske zone nije pronađena u vašoj PHP instalaciji (podržana u PHP>=5.2). Kako bilo, još uvek možete ručno izabrati UTC pomeraj.",
         "AliasUrlHelp": "Savetuje se ali nije neophodno da navedete više adresa, po jednu u svakoj liniji, koje korisnici koriste kako bi pristupili ovom sajtu. Alias adrese se neće pojaviti u izveštaju Reference > Sajtovi. Imajte na umu da nije neophodno navesti adrese sa i bez 'www' zato što Piwik automatski vodi računa o obe.",
         "ChangingYourTimezoneWillOnlyAffectDataForward": "Promena vremenske zone će uticati samo na potonje podatke i neće se primenjivati retroaktivno.",
@@ -73,7 +74,11 @@
         "TrackingTags": "Kod za praćenje za %s",
         "Urls": "Adresa",
         "UTCTimeIs": "UTC vreme je %s.",
+        "OnlyMatchedUrlsAllowed": "Prati posete i akcije samo kada URL akcije počinje sa nekom od sledećih adresa.",
+        "OnlyMatchedUrlsAllowedHelp": "Ukoliko uključite ovu opciju, Pivik će pratiti samo akcije koje imaju neke veze sa adresama vašeg sajta. Na taj način ćete sprečiti spemovanje vaše analitike adresama drugih sajtova.",
         "WebsitesManagement": "Upravljanje sajtovima",
+        "XManagement": "Upravljanje sa %s",
+        "ChooseMeasurableTypeHeadline": "Å ta biste voleli da merite?",
         "YouCurrentlyHaveAccessToNWebsites": "Broj sajtova na koje trenutno imate pristup: %s",
         "YourCurrentIpAddressIs": "Vaša trenutna IP adresa je %s"
     }
diff --git a/plugins/TasksTimetable b/plugins/TasksTimetable
index 4fc122f32959fd7eab2d3e201c2cf6e8431f987f..6c37dfee30982eda5c439b8c4422f5ecbd40a331 160000
--- a/plugins/TasksTimetable
+++ b/plugins/TasksTimetable
@@ -1 +1 @@
-Subproject commit 4fc122f32959fd7eab2d3e201c2cf6e8431f987f
+Subproject commit 6c37dfee30982eda5c439b8c4422f5ecbd40a331
diff --git a/plugins/TestRunner/Commands/TestsRun.php b/plugins/TestRunner/Commands/TestsRun.php
index b025330f9bb93c2bc035580f5eced25e334d6d0e..08e456da1985af8cfe90678dcf37ad3016d15b5a 100644
--- a/plugins/TestRunner/Commands/TestsRun.php
+++ b/plugins/TestRunner/Commands/TestsRun.php
@@ -44,7 +44,8 @@ class TestsRun extends ConsoleCommand
 
         $groups = $this->getGroupsFromString($groups);
 
-        $command = PIWIK_VENDOR_PATH . '/phpunit/phpunit/phpunit';
+        // bin is the composer executeable directory, where all vendors (should) place their executables
+        $command = PIWIK_VENDOR_PATH . '/bin/phpunit';
 
         if (version_compare(PHP_VERSION, '5.4.0', '<')) {
             $command = 'php -dzend.enable_gc=0 ' . $command;
diff --git a/plugins/Transitions/Transitions.php b/plugins/Transitions/Transitions.php
index 473ab7c647206efbba32eff9d20ca76765092d47..c1c10d8b814eb2e6d83e667c58d74a75da66e5aa 100644
--- a/plugins/Transitions/Transitions.php
+++ b/plugins/Transitions/Transitions.php
@@ -14,9 +14,9 @@ namespace Piwik\Plugins\Transitions;
 class Transitions extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getStylesheetFiles'        => 'getStylesheetFiles',
diff --git a/plugins/Transitions/lang/it.json b/plugins/Transitions/lang/it.json
index 7de5cf9832ea5b51393939d0c66709d59b9365ac..c1c76543b137d4a2cb67878a73e7ce2fdc3c3f67 100644
--- a/plugins/Transitions/lang/it.json
+++ b/plugins/Transitions/lang/it.json
@@ -14,7 +14,7 @@
         "IncomingTraffic": "Traffico entrante",
         "LoopsInline": "%s pagine ricaricate",
         "NoDataForAction": "Non ci sono dati per %s",
-        "NoDataForActionDetails": "O l'azione non ha avuto pagine viste durante il periodo di%s o non è valida.",
+        "NoDataForActionDetails": "O l'azione non ha avuto pagine viste durante il periodo di %s o non è valida.",
         "OutgoingTraffic": "Traffico uscente",
         "PluginDescription": "Restituisce le azioni precedenti e seguenti per ciascun URL di pagina in un nuovo report Transizioni, disponibile tra i report Azioni con una nuova icona.",
         "ShareOfAllPageviews": "Questa pagina ha %s visualizzazioni (%s di tutte le visualizzazioni)",
diff --git a/plugins/Transitions/lang/zh-cn.json b/plugins/Transitions/lang/zh-cn.json
index 6c9061118ec2deb8b3875d2172265bde54b1f966..61a7bc5e298e15b6ef98e5b319b01a3781acf37d 100644
--- a/plugins/Transitions/lang/zh-cn.json
+++ b/plugins/Transitions/lang/zh-cn.json
@@ -16,6 +16,7 @@
         "NoDataForAction": "没有 %s 数据",
         "NoDataForActionDetails": "本活动在 %s 期间没有被访问过或者不正确。",
         "OutgoingTraffic": "出口流量",
+        "PluginDescription": "以前的报告并为每个页面的URL在一个新的过渡报告,在操作报告中提供一个新的图标来通过操作。",
         "ShareOfAllPageviews": "本页面被访问 %s 次 (总访问量的 %s)",
         "ToFollowingPages": "转向站内页面",
         "ToFollowingPagesInline": "%s 次转向站内页面",
diff --git a/plugins/TreemapVisualization b/plugins/TreemapVisualization
index d3651405b2c037c5e7b9635179011cce94049bfe..e26eb6514fe4d306248d9833bdc78c4dd1d4c1f7 160000
--- a/plugins/TreemapVisualization
+++ b/plugins/TreemapVisualization
@@ -1 +1 @@
-Subproject commit d3651405b2c037c5e7b9635179011cce94049bfe
+Subproject commit e26eb6514fe4d306248d9833bdc78c4dd1d4c1f7
diff --git a/plugins/UserCountry/GeoIPAutoUpdater.php b/plugins/UserCountry/GeoIPAutoUpdater.php
index aba1d5d26397eeb729e5901dc8e5ec7047bea6d6..1359c8ac2e87ae89d319606736b4f0678313020c 100755
--- a/plugins/UserCountry/GeoIPAutoUpdater.php
+++ b/plugins/UserCountry/GeoIPAutoUpdater.php
@@ -268,7 +268,7 @@ class GeoIPAutoUpdater extends Task
             }
 
             $tempFile = GeoIp::getPathForGeoIpDatabase($tempFilename);
-            rename($existing = $tempFile, $newName = $oldDbFile);
+            rename($tempFile, $oldDbFile);
 
             // delete original archive
             if ($unlink) {
diff --git a/plugins/UserCountry/UserCountry.php b/plugins/UserCountry/UserCountry.php
index d28e6ce6014fdae79fa84dd1893760416704cfe3..d0ea7fab1bbcb88e42240dd653fd8ff7c75fdd9e 100644
--- a/plugins/UserCountry/UserCountry.php
+++ b/plugins/UserCountry/UserCountry.php
@@ -28,9 +28,9 @@ require_once PIWIK_INCLUDE_PATH . '/plugins/UserCountry/GeoIPAutoUpdater.php';
 class UserCountry extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getStylesheetFiles'        => 'getStylesheetFiles',
diff --git a/plugins/UserCountry/lang/de.json b/plugins/UserCountry/lang/de.json
index 89f7f07a003c49a4f7b594a6ad869b5a3abbd5e6..f05987dbb88fa6cab3ee8f1526b1e29a43dec115 100644
--- a/plugins/UserCountry/lang/de.json
+++ b/plugins/UserCountry/lang/de.json
@@ -63,7 +63,7 @@
         "HowToSetupGeoIP_Step4": "Und fertig! Sie haben gerade Piwik konfiguriert GeoIP zu verwenden. Dies bedeutet, dass Sie nun in der Lage sind die Regionen und Städte zusammen mit einer sehr genauen Angabe der Länder ihrer Besucher zu sehen.",
         "HowToSetupGeoIPIntro": "Anscheinend wurde die Standorterkennung noch nicht vollständig konfiguriert. Dies ist ein nützliches Feature und ohne es ist es nicht möglich, komplett vollständige und umfangreiche Informationen über die Besucher zu erhalten. Nachfolgend alle Informationen, um schnell damit zu beginnen:",
         "HttpServerModule": "HTTP-Server-Modul",
-        "InvalidGeoIPUpdatePeriod": "Ungültiger Zeitraum für den GeoIP Aktualisierer: %1$s. Gültige Werte sind %2$s.",
+        "InvalidGeoIPUpdatePeriod": "Ungültiger Zeitraum für die GeoIP-Aktualisierung: %1$s. Gültige Werte sind %2$s.",
         "IPurchasedGeoIPDBs": "Ich habe %1$sgenauere Datenbanken von MaxMind%2$s erworben und möchte automatische Aktualisierungen einrichten.",
         "ISPDatabase": "Internet Anbieter Datenbank",
         "IWantToDownloadFreeGeoIP": "Ich möchte die kostenlose GeoIP Datenbank herunterladen...",
diff --git a/plugins/UserCountry/lang/it.json b/plugins/UserCountry/lang/it.json
index ef5141ad9d9b503399e644f7df75c94837d1baa7..46c3e442066115ab2b476641ed360bd3d04b81c7 100644
--- a/plugins/UserCountry/lang/it.json
+++ b/plugins/UserCountry/lang/it.json
@@ -1,10 +1,10 @@
 {
     "UserCountry": {
-        "AssumingNonApache": "Impossibile trovare la funzione apache_get_modules, si suppone server non-Apache.",
-        "CannotFindGeoIPDatabaseInArchive": "Impossibile trovare %1$s file nell'archivio tar %2$s!",
+        "AssumingNonApache": "Impossibile trovare la funzione apache_get_modules, si suppone che sia un server non-Apache.",
+        "CannotFindGeoIPDatabaseInArchive": "Impossibile trovare il file %1$s nell'archivio tar %2$s!",
         "CannotFindGeoIPServerVar": "La variabile %s non è impostata. Il tuo server potrebbe non essere correttamente configurato.",
-        "CannotFindPeclGeoIPDb": "Impossibile trovare un database di paese, regione o città per il modulo GeoIP PECL. Assicurati che il tuo database di GeoIP si trovi in%1$s e abbia il nome%2$s oppure %3$s, altrimenti il ​​modulo PECL non se ne accorgerà.",
-        "CannotListContent": "Impossibile il contenutto per %1$s: %2$s",
+        "CannotFindPeclGeoIPDb": "Impossibile trovare un database di paese, regione o città per il modulo GeoIP PECL. Assicurati che il tuo database di GeoIP si trovi in %1$s e abbia il nome %2$s oppure %3$s, altrimenti il ​​modulo PECL non se ne accorgerà.",
+        "CannotListContent": "Impossibile elencare il contenuto per %1$s: %2$s",
         "CannotLocalizeLocalIP": "L'indirizzo IP %s è un indirizzo locale e non può essere geolocalizzato.",
         "CannotSetupGeoIPAutoUpdating": "Sembra che tu stia conservando i database GeoIP al di fuori di Piwik (lo possiamo dire in quanto non ci sono i database nella sottodirectory misc, ma il tuo GeoIP sta lavorando). Piwik non può aggiornare automaticamente i database GeoIP se si trovano al di fuori della directory misc.",
         "CannotUnzipDatFile": "Impossibile decomprimere il file dat in %1$s: %2$s",
@@ -18,25 +18,25 @@
         "country_o1": "Altri Paesi",
         "country_ti": "Tibet",
         "CurrentLocationIntro": "In base a questo provider, la tua posizione attuale è",
-        "DefaultLocationProviderDesc1": "L'individuatore di posizione di default desume il paese di un visitatore dalla lingua utilizzata.",
+        "DefaultLocationProviderDesc1": "L'individuatore di posizione predefinito desume il paese di un visitatore dalla lingua utilizzata.",
         "DefaultLocationProviderDesc2": "Quasta non è molto accurata, dunque %1$snoi raccomandiamo di installare e utilizzare %2$sGeoIP%3$s.%4$s",
-        "DefaultLocationProviderExplanation": "Stai utiilizzando l'individuatore di posizione di default, ciò significa che Piwik indovinerà la posizione dei visitatori dalla lingua che utilizzano. %1$sLeggi qui%2$s per capire come impostare una geolocalizzazione più accurata",
+        "DefaultLocationProviderExplanation": "Stai utiilizzando l'individuatore di posizione di default, ciò significa che Piwik individuerà la posizione dei visitatori in base lingua che utilizzano. %1$sLeggi qui%2$s per capire come impostare una geolocalizzazione più accurata",
         "DistinctCountries": "%s continenti differenti",
         "DownloadingDb": "Sto scaricando %s",
         "DownloadNewDatabasesEvery": "Aggiorna il database ogni",
-        "FatalErrorDuringDownload": "Si è verificato un errore fatale durante il download di questo file. Ci potrebbe essere qualcosa di sbagliato con la connessione a Internet, con il database GeoIP scaricato o con Piwik. Prova a scaricarlo e installarlo manualmente.",
+        "FatalErrorDuringDownload": "Si è verificato un errore fatale durante il download di questo file. Ci potrebbe essere qualcosa di sbagliato con la connessione a Internet, con il database GeoIP scaricato o con Piwik. Prova a scaricarlo e a installarlo manualmente.",
         "FoundApacheModules": "Piwik ha trovato i seguenti moduli Apache",
         "FromDifferentCities": "città diverse",
         "GeoIPCannotFindMbstringExtension": "Impossibile trovare la funzione %1$s. Assicurati che l'estensione %2$s sia installata e caricata.",
         "GeoIPDatabases": "Database GeoIP",
-        "GeoIPDocumentationSuffix": "Per vedere i dati di questo report è necessario impostare GeoIP nella scheda Amministrazione Geolocation. I database GeoIP commerciali%1$sMaxmind%2$s sono più accurati di quelli gratuiti. Per vedere come sono precisi, clicca%3$squi%4$s.",
-        "GeoIPImplHasAccessTo": "Questa implementazione GeoIP ha accesso ai seguenti database",
-        "GeoIPIncorrectDatabaseFormat": "Il vostro database GeoIP non sembra avere un formato corretto. Potrebbe essere corrotto. Assicuratevi che state utilizzando la versione binaria e provate a sostituirla con un'altra copia,",
+        "GeoIPDocumentationSuffix": "Per vedere i dati di questo report è necessario impostare GeoIP nella scheda Amministrazione Geolocation. I database GeoIP commerciali%1$sMaxmind%2$s sono più accurati di quelli gratuiti. Per vedere come sono precisi, clicca %3$squi%4$s.",
+        "GeoIPImplHasAccessTo": "Questa implementazione GeoIP ha accesso ai seguenti tipi di database",
+        "GeoIPIncorrectDatabaseFormat": "Il vostro database GeoIP non sembra avere un formato corretto. Potrebbe essere corrotto. Assicuratevi che stiate utilizzando la versione binaria e provate a sostituirla con un'altra copia,",
         "GeoIpLocationProviderDesc_Pecl1": "Questo individuatore di posizione utilizza un database GeoIP e un modulo PECL per determinare accuratamente e con efficienza la posizione dei tuoi visitatori.",
         "GeoIpLocationProviderDesc_Pecl2": "Non ci sono limitazioni con questo provider, dunque è uno di cui raccomandiamo l'uso.",
         "GeoIpLocationProviderDesc_Php1": "Questo individuatore di posizione è il più semplice da installare in quanto non richiede la configurazione del server (ideale per hosting condiviso!). Esso utilizza un database GeoIP e MaxMind PHP API per determinare con precisione la posizione dei tuoi visitatori.",
         "GeoIpLocationProviderDesc_Php2": "Se il tuo sito riceve parecchio traffico, è possibile che questo individuatore di posizione sia troppo lento. In questo caso, è necessario installare l'%1$sestensione PECL%2$s o un %3$smodulo server%4$s.",
-        "GeoIpLocationProviderDesc_ServerBased1": "Questo individuatore di posizione utilizza il modulo GeoIP che è stato installato nel vostro server HTTP. Questo è veloce e preciso, ma %1$spuò essere utilizzato solo con il normale monitoraggio browser.%2$s",
+        "GeoIpLocationProviderDesc_ServerBased1": "Questo individuatore di posizione utilizza il modulo GeoIP che è stato installato nel vostro server HTTP. È veloce e preciso, ma %1$spuò essere utilizzato solo con il normale monitoraggio browser.%2$s",
         "GeoIpLocationProviderDesc_ServerBased2": "Se si devono importare i file di log o fare qualcos'altro che richiede l'impostazione degli indirizzi IP, utilizza l'%1$simplementazione PECL GeoIP (consigliata)%2$s oppure l'%3$simplementazione PHP GeoIP%4$s.",
         "GeoIpLocationProviderDesc_ServerBasedAnonWarn": "Nota: l'anonimizzazione IP non ha alcun effetto sui luoghi segnalati da questo fornitore. Prima di utilizzarlo con la trasformazione in forma anonima degli IP, assicurati che questo non violi alcuna legge sulla privacy a cui puoi essere soggetto.",
         "GeoIpLocationProviderNotRecomnended": "La geolocalizzazione sta funzionando ma tu non stai utilizzando uno dei provider raccomandati.",
@@ -49,7 +49,7 @@
         "Geolocation": "Geolocalizzazione",
         "GeolocationPageDesc": "In questa pagina puoi cambiare le impostazioni di come Piwik determina la località dei visitatori.",
         "getCityDocumentation": "Questo report mostra le città in cui si trovavano i tuoi visitatori quando sono entrati nel tuo sito.",
-        "getContinentDocumentation": "Queesto report mostra in quale continente si trovavano i tuoi visitatori quando sono entrati nel tuo sito.",
+        "getContinentDocumentation": "Questo report mostra in quale continente si trovavano i tuoi visitatori quando sono entrati nel tuo sito.",
         "getCountryDocumentation": "Questo report mostra in quale nazione si trovavano i tuoi visitatori quando sono entrati nel tuo sito.",
         "getRegionDocumentation": "Questo report mostra in quale regione si trovavano i tuoi visitatori quando sono entrati nel tuo sito.",
         "HowToInstallApacheModule": "Come posso installare il modulo GeoIP per Apache?",
@@ -58,13 +58,13 @@
         "HowToInstallNginxModule": "Come posso installare il modulo GeoIP per Nginx?",
         "HowToSetupGeoIP": "Come impostare la geolocalizzazione accurata con GeoIP",
         "HowToSetupGeoIP_Step1": "%1$sScarica%2$s il database GeoLite City da %3$sMaxMind%4$s.",
-        "HowToSetupGeoIP_Step2": "Estrai questo file e copia il risultato, %1$s nella sottodirectory %2$smisc%3$s di Piwik (puoi fare ciò sia in FTP che in SSH).",
+        "HowToSetupGeoIP_Step2": "Estrai questo file e copia il risultato, %1$s nella sottodirectory %2$smisc%3$s di Piwik (puoi farlo sia tramite FTP che SSH).",
         "HowToSetupGeoIP_Step3": "Ricarica questa schermata. Il provider %1$sGeoIP (PHP)%2$s verrà ora %3$sinstallato%4$s. Selezionalo.",
-        "HowToSetupGeoIP_Step4": "E il gioco è fatto! Hai appena configurato Piwik per usare GeoIP, che significa che sarai in grado di vedere le regioni e le città dei tuoi visitatori con informazioni sul paese molto accurate.",
-        "HowToSetupGeoIPIntro": "Sembra che tu non abbia una configurazione di Geolocalizzazione accurata. Questa è una funzionalità utile e senza di essa non si vedranno informazioni accurate e informazioni di localizzazione accurate per i tuoi visitatori. Ecco come puoi iniziare a usarla rapidamente:",
+        "HowToSetupGeoIP_Step4": "E il gioco è fatto! Hai appena configurato Piwik per usare GeoIP, ciò significa che sarai in grado di vedere le regioni e le città dei tuoi visitatori con informazioni sul paese molto accurate.",
+        "HowToSetupGeoIPIntro": "Sembra che tu non abbia una configurazione di Geolocalizzazione accurata. Questa è una funzionalità utile, e senza di essa non si avranno informazioni accurate e complete sulla localizzazione dei tuoi visitatori. Ecco come puoi iniziare a usarla rapidamente:",
         "HttpServerModule": "Modulo Server HTTP",
         "InvalidGeoIPUpdatePeriod": "Periodo non valido per l'updater GeoIP: %1$s. I valori validi sono: %2$s.",
-        "IPurchasedGeoIPDBs": "Ho acquistato altri %1$sdatabase saccurati da MaxMind%2$s e voglio impostare gli aggiornamenti automatici.",
+        "IPurchasedGeoIPDBs": "Ho acquistato altri %1$sdatabase accurati da MaxMind%2$s e voglio impostare gli aggiornamenti automatici.",
         "ISPDatabase": "Database ISP",
         "IWantToDownloadFreeGeoIP": "Voglio scaricare il database gratuito GeoIP...",
         "Latitude": "Latitudine",
@@ -77,22 +77,22 @@
         "NoDataForGeoIPReport2": "Per abilitare la geolocalizzazione accurata cambia le impostazioni %1$squi%2$s e usa un %3$sdatabase a livello città%4$s.",
         "Organization": "Organizzazione",
         "OrgDatabase": "Database Organizzazioni",
-        "PeclGeoIPNoDBDir": "Il modulo PECL è alla ricerca di databasee in%1$s, ma questa directory non esiste. Si prega di crearla e aggiungervi i database GeoIP. In alternativa, è possibile impostare %2$s per la directory corretta nel file php.ini.",
+        "PeclGeoIPNoDBDir": "Il modulo PECL è alla ricerca di database in %1$s, ma questa directory non esiste. Si prega di crearla e aggiungervi i database GeoIP. In alternativa, è possibile impostare %2$s per la directory corretta nel file php.ini.",
         "PeclGeoLiteError": "Il tuo databese GeoIP in %1$s è chiamato %2$s. Sfortunatamente il modulo PECL non lo riconosce con questo nome. Si prega di rinominarlo come %3$s.",
         "PiwikNotManagingGeoIPDBs": "Piwik attualmente non sta gestendo alcun database GeoIP.",
         "PluginDescription": "Restituisce la provenienza dei tuoi visitatori: nazione, regione, città e coordinate geografiche (latitudine\/longitudine).",
         "Region": "Regione",
         "SetupAutomaticUpdatesOfGeoIP": "Imposta gli aggiornamenti automatici dei database GeoIP",
         "SubmenuLocations": "Località",
-        "TestIPLocatorFailed": "Piwik ha cercato di controllare la posizione di un indirizzo IP conosciuto (%1$s), ma il server ha restituito%2$s. Se questo localizzatore fosse correttamente configurato, sidovrebbe restituire%3$s.",
+        "TestIPLocatorFailed": "Piwik ha cercato di controllare la posizione di un indirizzo IP conosciuto (%1$s), ma il server ha restituito %2$s. Se questo localizzatore fosse correttamente configurato, dovrebbe restituire %3$s.",
         "ThisUrlIsNotAValidGeoIPDB": "Il file scaricato non è un database GeoIP valido. Si prega di controllare l'URL o di scaricare il file manualmente.",
         "ToGeolocateOldVisits": "Per avere i dati di localizzazione delle tue vecchie visite, usa lo script descritto %1$squi%2$s.",
         "UnsupportedArchiveType": "Si è incontrato un archivio di tipo non supportato %1$s.",
         "UpdaterHasNotBeenRun": "Il programma di aggiornamento non è mai stato eseguito.",
-        "UpdaterIsNotScheduledToRun": "Non è programmato per essere avviato in futuro.",
-        "UpdaterScheduledForNextRun": "E' programmato per essere avviato durante la prossima esecuzione del cron-job archive.php",
+        "UpdaterIsNotScheduledToRun": "Non è pianificato un suo futuro avvio.",
+        "UpdaterScheduledForNextRun": "È programmato un suo avvio durante l'esecuzione del prossimo cron.job core:archive.",
         "UpdaterWasLastRun": "Il programma di aggiornamento è stato eseguito per l'ultima volta il %s.",
-        "UpdaterWillRunNext": "E' programmato per essere eseguito il %s.",
+        "UpdaterWillRunNext": "È programmato per essere eseguito il %s.",
         "WidgetLocation": "Posizione Visitatore"
     }
 }
\ No newline at end of file
diff --git a/plugins/UserCountry/lang/sr.json b/plugins/UserCountry/lang/sr.json
index 2a201e6b541d7ef379dfce7325230f19241c57cc..679e14cf2242c678d305f10b96ab9d6c76e1999f 100644
--- a/plugins/UserCountry/lang/sr.json
+++ b/plugins/UserCountry/lang/sr.json
@@ -16,6 +16,7 @@
         "country_a2": "Satelitski provajder",
         "country_cat": "Katalonske zajednice",
         "country_o1": "Ostale zemlje",
+        "country_ti": "Tibet",
         "CurrentLocationIntro": "Sudeći po ovom provajderu, vaša trenutna lokacija je",
         "DefaultLocationProviderDesc1": "Podrazumevani provajder lokacija nagađa zemlju posetioca na osnovu jezika koji oni koriste.",
         "DefaultLocationProviderDesc2": "Ovo nije veoma precizno tako da %1$spreporučujemo da instalirate %2$sGeoIP%3$s.%4$s",
diff --git a/plugins/UserCountry/lang/zh-cn.json b/plugins/UserCountry/lang/zh-cn.json
index 19be2de27eb2dfe738601cd1c835651d4ca40fb9..40d10f2c7f3d5203e4068ad03ac337aa111629b4 100644
--- a/plugins/UserCountry/lang/zh-cn.json
+++ b/plugins/UserCountry/lang/zh-cn.json
@@ -39,6 +39,7 @@
         "GeoIpLocationProviderDesc_ServerBased1": "本地理位置服务商使用已经安装在 HTTP 服务器上的 GeoIP 模块。本服务商速度快也更精确,但是 %1$s只能使用一般的浏览器跟踪。%2$s",
         "GeoIpLocationProviderDesc_ServerBased2": "如果您需要导入日志文件,或者需要设置 IP 地址的操作,使用 %1$sPECL GeoIP 方案 (推荐)%2$s 或者 %3$sPHP GeoIP 方案%4$s。",
         "GeoIpLocationProviderDesc_ServerBasedAnonWarn": "提示: IP 屏蔽对这个服务商的报表无效。在使用它和 IP 屏蔽前,请确认这不违反您当地的隐私保护法规。",
+        "GeoIpLocationProviderNotRecomnended": "地理位置的工作,但你不使用推荐的供应商之一。",
         "GeoIPNoServerVars": "Piwik 没有找到 GeoIP %s 变量。",
         "GeoIPPeclCustomDirNotSet": "%s PHP ini 选项没有设置。",
         "GeoIPServerVarsFound": "Piwik 检测到以下 GeoIP %s 变量",
@@ -79,6 +80,7 @@
         "PeclGeoIPNoDBDir": "PECL 模块在 %1$s 中查找数据库,但这个目录不存在,请改正并把 GeoIP 数据库加入。另外,您也可以在 php.ini 文件中设置 %2$s 为正确的目录。",
         "PeclGeoLiteError": "您在 %1$s 中的GeoIP 数据库名称为 %2$s。但是 PECL 模块无法识别这个名称,请改名为 %3$s。",
         "PiwikNotManagingGeoIPDBs": "Piwik 目前没有任何 GeoIP 数据库。",
+        "PluginDescription": "报告访问者的位置:国家,地区,城市和地理坐标(纬度\/经度)。",
         "Region": "地区",
         "SetupAutomaticUpdatesOfGeoIP": "设置自动更新 GeoIP 数据库",
         "SubmenuLocations": "所在地",
@@ -87,7 +89,10 @@
         "ToGeolocateOldVisits": "要获得以前访问的地理数据,请使用 %1$s这里%2$s的脚步。",
         "UnsupportedArchiveType": "不支持的文件类型 %1$s。",
         "UpdaterHasNotBeenRun": "更新程序从未运行。",
+        "UpdaterIsNotScheduledToRun": "它不计划在将来运行。",
+        "UpdaterScheduledForNextRun": "它计划在未来的cron核心在运行:归档命令执行。",
         "UpdaterWasLastRun": "更新程序最后运行时间 %s。",
+        "UpdaterWillRunNext": "这是下一个计划在 %s 运行。",
         "WidgetLocation": "访客位置"
     }
 }
\ No newline at end of file
diff --git a/plugins/UserCountry/tests/Unit/UserCountryTest.php b/plugins/UserCountry/tests/Unit/UserCountryTest.php
index 9b62518e3e397edd980668ccb9dd083566d1ebb9..dddbce6b9fd9cb3d9a120cd4a438623125822912 100644
--- a/plugins/UserCountry/tests/Unit/UserCountryTest.php
+++ b/plugins/UserCountry/tests/Unit/UserCountryTest.php
@@ -138,7 +138,7 @@ class UserCountryTest extends \PHPUnit_Framework_TestCase
         foreach ($filesToRemove as $name) {
             $path = $geoIpDirPath . '/' . $name;
             if (file_exists($path)) {
-                unlink($path);
+                @unlink($path);
             }
         }
     }
diff --git a/plugins/UserCountryMap/UserCountryMap.php b/plugins/UserCountryMap/UserCountryMap.php
index d351054b4596efe7ade16e817e8f0e8da5082a82..c7819f7f8ce070fcf6dd451ac894acba865be471 100644
--- a/plugins/UserCountryMap/UserCountryMap.php
+++ b/plugins/UserCountryMap/UserCountryMap.php
@@ -29,7 +29,7 @@ class UserCountryMap extends \Piwik\Plugin
         $out .= FrontController::getInstance()->fetchDispatch('UserCountryMap', 'visitorMap');
     }
 
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         $hooks = array(
             'AssetManager.getJavaScriptFiles' => 'getJsFiles',
diff --git a/plugins/UserCountryMap/lang/sr.json b/plugins/UserCountryMap/lang/sr.json
index 74182a041ccfc937c1222721572c686b6c91cc36..d8c4ad04542bfd187dd90fd762a3639438d041b4 100644
--- a/plugins/UserCountryMap/lang/sr.json
+++ b/plugins/UserCountryMap/lang/sr.json
@@ -1,5 +1,6 @@
 {
     "UserCountryMap": {
+        "PluginDescription": "Ovaj dodatak donosi vidžete Mapa posetilaca i Mapa u realnom vremenu. Zahteva UserCountry dodatak.",
         "AndNOthers": "i %s ostalih",
         "Cities": "Gradovi",
         "Countries": "Države",
diff --git a/plugins/UserLanguage/UserLanguage.php b/plugins/UserLanguage/UserLanguage.php
index a28bfa6ecad0b47b816d8d3bdf37cc706fa6410c..be892d419659e15164c58633cab9440f12e3910f 100644
--- a/plugins/UserLanguage/UserLanguage.php
+++ b/plugins/UserLanguage/UserLanguage.php
@@ -17,9 +17,9 @@ use Piwik\FrontController;
 class UserLanguage extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'Live.getAllVisitorDetails'              => 'extendVisitorDetails'
diff --git a/plugins/UsersManager/UsersManager.php b/plugins/UsersManager/UsersManager.php
index 8bfd20c2fca5231a618470b19ac5484f4d181f23..340f081b5f550f69c033ff998cb6ff1465cf1b31 100644
--- a/plugins/UsersManager/UsersManager.php
+++ b/plugins/UsersManager/UsersManager.php
@@ -24,9 +24,9 @@ class UsersManager extends \Piwik\Plugin
     const PASSWORD_MAX_LENGTH = 80;
 
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getJavaScriptFiles'        => 'getJsFiles',
diff --git a/plugins/UsersManager/lang/de.json b/plugins/UsersManager/lang/de.json
index c49e7bd36acd673ffe4b1b53101c8a07034bec3d..7f5ef268618dfe4b1f37a81df3c412a266616ed3 100644
--- a/plugins/UsersManager/lang/de.json
+++ b/plugins/UsersManager/lang/de.json
@@ -60,7 +60,7 @@
         "TypeYourPasswordAgain": "Geben Sie Ihr Passwort nochmals ein.",
         "User": "Benutzer",
         "UsersManagement": "Benutzerverwaltung",
-        "UsersManagementMainDescription": "Neue Benutzer erstellen oder bereits existierende Benutzer aktualisieren. Die Berechtigungen können dann oben gesetzt werden.",
+        "UsersManagementMainDescription": "Erstellen Sie neue Benutzer oder aktualisieren Sie bereits existierende Benutzer. Die Berechtigungen können dann oben gesetzt werden.",
         "WhenUsersAreNotLoggedInAndVisitPiwikTheyShouldAccess": "Wenn Benutzer nicht angemeldet sind und Piwik besuchen, sollten sie Zugriff haben auf",
         "YourUsernameCannotBeChanged": "Ihr Benutzername kann nicht geändert werden.",
         "YourVisitsAreIgnoredOnDomain": "%sIhre Besuche auf %s werden von Piwik ignoriert %s (das Piwik-Cookie zum Ignorieren von Besuchen wurde in Ihrem Browser gefunden).",
diff --git a/plugins/UsersManager/lang/hi.json b/plugins/UsersManager/lang/hi.json
index 647e20395f6bf89c0609101d5579e17d3b1d7834..bec90d5c03d8e77b3768f780ca8b546d44017c1e 100644
--- a/plugins/UsersManager/lang/hi.json
+++ b/plugins/UsersManager/lang/hi.json
@@ -8,7 +8,19 @@
         "ApplyToAllWebsites": "सभी वेबसाइटों के लिए लागू करें",
         "DeleteConfirm": "क्या आप प्रयोक्ता %s को हटाना चाहते हैं?",
         "Email": "ईमेल",
+        "ExcludeVisitsViaCookie": "एक कुकी का उपयोग कर अपने दौरे को बाहर निकालें",
+        "ForAnonymousUsersReportDateToLoadByDefault": "अनाम उपयोगकर्ताओं के लिए, रिपोर्ट तिथि डिफ़ॉल्ट रूप से लोड करने के लिए",
+        "IfYouWouldLikeToChangeThePasswordTypeANewOne": "आप बदलना चाहते हैं, तो पासवर्ड एक नया एक टाइप करें। अन्यथा इस खाली छोड़ दें।",
+        "LastSeen": "अंतिम बार देखा गया",
+        "ManageAccess": "उपयोग का प्रबंधन",
+        "MenuAnonymousUserSettings": "बेनामी उपयोगकर्ता सेटिंग",
         "MenuUsers": "उपयोगकर्ता",
+        "MenuUserSettings": "उपयोगकर्ता सेटिंग",
+        "MenuPersonal": "व्यक्तिगत",
+        "PersonalSettings": "व्यक्तिगत सेटिंग",
+        "NoUsersExist": "कोई उपयोगकर्ता अभी तक कर रहे हैं ।",
+        "PrivAdmin": "व्यवस्थापक",
+        "PrivNone": "प्रवेश नही",
         "PrivView": "देखना"
     }
 }
\ No newline at end of file
diff --git a/plugins/UsersManager/lang/it.json b/plugins/UsersManager/lang/it.json
index a1dfccedd72237f5939e1ae9d7fc039dcf95462c..0b657894166571846655fc7bc703f68cd153385e 100644
--- a/plugins/UsersManager/lang/it.json
+++ b/plugins/UsersManager/lang/it.json
@@ -19,22 +19,22 @@
         "EmailYourAdministrator": "%1$sManda un'email al tuo amministratore su questo problema%2$s.",
         "ExceptionAccessValues": "Il parametro per l'accesso deve avere uno dei seguenti valori: [ %s ]",
         "ExceptionAdminAnonymous": "Non puoi dare privilegi da amministratore agli utenti anonimi.",
-        "ExceptionDeleteDoesNotExist": "L'utente \"%s\" non esiste, di conseguenza non può essere eliminato.",
+        "ExceptionDeleteDoesNotExist": "L'utente '%s' non esiste, di conseguenza non può essere eliminato.",
         "ExceptionDeleteOnlyUserWithSuperUserAccess": "L'eliminazione dell'utente '%s' non è possibile.",
         "ExceptionEditAnonymous": "Gli utenti anonimi non possono essere modificati o cancellati. Questo profilo è utilizzato da Piwik per definire un utente che non ha effettuato l'accesso. Per esempio, se vuoi rendere pubbiche le tue statistiche, puoi dare il privilegio \"Visualizza\" al profilo degli utenti anonimi.",
-        "ExceptionEmailExists": "Utente con l'e-mail \"%s\" è già esistente.",
+        "ExceptionEmailExists": "Utente con l'e-mail '%s' è già esistente.",
         "ExceptionInvalidEmail": "L'e-mail inserita non è valida.",
-        "ExceptionInvalidLoginFormat": "Il nome utente deve essere lungo tra %1$s e %2$s caratteri e contenere solo lettere, numeri o i caratteri '_' oppure '-' oppure '.'",
+        "ExceptionInvalidLoginFormat": "Il nome utente deve essere lungo tra %1$s e %2$s caratteri e contenere solo lettere, numeri o i caratteri '_' o '-' o '.' o '@' o '+'",
         "ExceptionInvalidPassword": "La lunghezza della password deve essere tra %1$s e %2$s caratteri.",
-        "ExceptionLoginExists": "Utente \"%s\" già esistente.",
-        "ExceptionPasswordMD5HashExpected": "UsersManager.getTokenAuth si aspetta una password MD5 hash (stringa lunga 32 caratteri). Si prega di richiamare la funzione md5 () sulla password prima di richiamare questo metodo.",
-        "ExceptionRemoveSuperUserAccessOnlySuperUser": "E' impossibile togliere l'accesso Super User all'utente '%s'.",
-        "ExceptionSuperUserAccess": "Questo utente ha l'accesso Super User e ha già i permessi per accedere e modificare tutti i siti web in Piwik. Puoi togliere l'accesso Super User a questo utente e provare di nuuovo.",
-        "ExceptionUserDoesNotExist": "L'utente \"%s\" non esiste.",
-        "ExceptionYouMustGrantSuperUserAccessFirst": "Ci deve essere almeno un utente con l'accesso Super User. Si prega di dare l'accesso Super User a un altro utente prima.",
+        "ExceptionLoginExists": "L'utente '%s' già esiste.",
+        "ExceptionPasswordMD5HashExpected": "UsersManager.getTokenAuth si aspetta una password MD5 hash (stringa lunga 32 caratteri). Si prega di richiamare la funzione md5() sulla password prima di richiamare questo metodo.",
+        "ExceptionRemoveSuperUserAccessOnlySuperUser": "È impossibile togliere l'accesso Super User all'utente '%s'.",
+        "ExceptionSuperUserAccess": "Questo utente ha l'accesso Super User e ha già i permessi per accedere e modificare tutti i siti web in Piwik. Puoi togliere l'accesso Super User a questo utente e provare di nuovo.",
+        "ExceptionUserDoesNotExist": "L'utente '%s' non esiste.",
+        "ExceptionYouMustGrantSuperUserAccessFirst": "Ci deve essere almeno un utente con l'accesso Super User. Si prega di dare prima l'accesso Super User a un altro utente.",
         "ExcludeVisitsViaCookie": "Escludi le tue visite usando un cookie",
-        "ForAnonymousUsersReportDateToLoadByDefault": "Per utenti anonimi, report dati da caricare di default",
-        "IfYouWouldLikeToChangeThePasswordTypeANewOne": "Se vuoi cambiare la password scrivine qui una nuova. Altrimenti lascia pure bianco.",
+        "ForAnonymousUsersReportDateToLoadByDefault": "Per utenti anonimi, data report da caricare di default",
+        "IfYouWouldLikeToChangeThePasswordTypeANewOne": "Se vuoi cambiare la password scrivine qui una nuova. Altrimenti lascia pure in bianco.",
         "InjectedHostCannotChangePwd": "Al momento stai navigando da un host sconosciuto (%1$s). Non è possibile modificare la password fino a quando questo problema non verrà risolto.",
         "LastSeen": "Visto l'ultima volta",
         "MainDescription": "Decidi quali utenti possono accedere alle statistiche Piwik dei siti web. Puoi anche impostare i permessi di tutti i siti in una volta sola.",
@@ -48,7 +48,7 @@
         "NoUsersExist": "Non ci sono ancora utenti.",
         "PluginDescription": "La Gestione Utenti ti permette di aggiungere nuovi utenti, modificare quelli esistenti e assegnare loro i permessi per vedere o amministrare i siti web.",
         "PrivAdmin": "Amministra Piwik",
-        "PrivNone": "Nessun privilegio",
+        "PrivNone": "Nessun accesso",
         "PrivView": "Vista",
         "ReportDateToLoadByDefault": "Data report da caricare di default",
         "ReportToLoadByDefault": "Report da caricare di default",
@@ -57,13 +57,13 @@
         "SuperUserAccessManagementMainDescription": "I Super User hanno i permessi più elevati. Possono eseguire tutti i compiti amministrativi come aggiungere nuovi siti web da controllare, aggiungere utenti, cambiare i permessi utente, attivare e disattivare i plugin e persino installare dei nuovi plugin presi dal Marketplace.",
         "TheLoginScreen": "La schermata di login",
         "ThereAreCurrentlyNRegisteredUsers": "Al momento ci sono %s utenti registrati.",
-        "TypeYourPasswordAgain": "Scrivi la tua nuova password di nuovo.",
+        "TypeYourPasswordAgain": "Scrivi di nuovo la tua nuova password.",
         "User": "Utente",
         "UsersManagement": "Gestione utenti",
         "UsersManagementMainDescription": "Crea nuovi utenti o aggiorna quelli esistenti. Puoi anche scegliere quali operazioni permettere tramite la tabella qui sopra.",
         "WhenUsersAreNotLoggedInAndVisitPiwikTheyShouldAccess": "Quando gli utenti non si sono autenticati in Piwik, possono accedere a",
         "YourUsernameCannotBeChanged": "Il tuo nome utente non può essere cambiato.",
-        "YourVisitsAreIgnoredOnDomain": "%sLe tue visite sono ignorate da Piwik %s %s (il cookie 'ignora visite' di Piwik è stato trovato nel tuo browser).",
-        "YourVisitsAreNotIgnored": "%sLe tue visite non sono ignorate da Piwik%s (il cookie 'ignora visite' di Piwik non è stato trovato nel tuo browser)."
+        "YourVisitsAreIgnoredOnDomain": "%sLe tue visite sono ignorate da Piwik su %s %s (il cookie 'ignora visite' è stato trovato nel tuo browser).",
+        "YourVisitsAreNotIgnored": "%sLe tue visite non sono ignorate da Piwik%s (il cookie 'ignora visite' non è stato trovato nel tuo browser)."
     }
 }
\ No newline at end of file
diff --git a/plugins/UsersManager/lang/nl.json b/plugins/UsersManager/lang/nl.json
index 93410a9a31fbad9de5ba7586f7967341a2e2d95b..e46b9d6dd96300b808c4a95f34d866c0c1bbae34 100644
--- a/plugins/UsersManager/lang/nl.json
+++ b/plugins/UsersManager/lang/nl.json
@@ -30,6 +30,7 @@
         "ExceptionPasswordMD5HashExpected": "UsersManager.getTokenAuth verwacht een MD5-hash wachtwoord (32 tekens lange reeks). Vraag de md5()functie op het wachtwoord op alvorens deze methode aan te roepen.",
         "ExceptionRemoveSuperUserAccessOnlySuperUser": "Het verwijderen van de Super User rechten van gebruiker '%s' is niet toegestaan.",
         "ExceptionUserDoesNotExist": "Gebruiker '%s' bestaat niet.",
+        "ExceptionYouMustGrantSuperUserAccessFirst": "Er moet minimaal één gebruiker zijn met Super User rechten. Geef eerst een gebruiker Super User rechten.",
         "ExcludeVisitsViaCookie": "Sluit uw bezoeken uit met een cookie",
         "ForAnonymousUsersReportDateToLoadByDefault": "Voor anonieme gebruikers, Standaard rapport datum bij laden pagina.",
         "IfYouWouldLikeToChangeThePasswordTypeANewOne": "Als u het wachtwoord wilt wijzigen, geef dan een nieuwe op. Laat het anders leeg.",
diff --git a/plugins/UsersManager/lang/ta.json b/plugins/UsersManager/lang/ta.json
index a5d165cfb8f5bbc326681c820f38abdaa6d1d78c..516c1a5250c9df07b7d066b8f04ea32caffb63de 100644
--- a/plugins/UsersManager/lang/ta.json
+++ b/plugins/UsersManager/lang/ta.json
@@ -1,5 +1,6 @@
 {
     "UsersManager": {
+        "Email": "மின்னஞ்சல்",
         "MenuUsers": "பாவனையாளர்கள்",
         "PrivView": "பார்க்க"
     }
diff --git a/plugins/VisitFrequency/VisitFrequency.php b/plugins/VisitFrequency/VisitFrequency.php
index ad7451e0cecdffdf195b232a3f33c52a4ccc611f..b8c01a95689900c138343fe527b004722f1fda90 100644
--- a/plugins/VisitFrequency/VisitFrequency.php
+++ b/plugins/VisitFrequency/VisitFrequency.php
@@ -14,9 +14,9 @@ use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
 class VisitFrequency extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'Metrics.getDefaultMetricTranslations' => 'addMetricTranslations'
diff --git a/plugins/VisitFrequency/lang/it.json b/plugins/VisitFrequency/lang/it.json
index 80df2f2f4007d5c2fae99d982637f859f79736da..313e48cc90eb37d5810d292327477beff803eb52 100644
--- a/plugins/VisitFrequency/lang/it.json
+++ b/plugins/VisitFrequency/lang/it.json
@@ -1,26 +1,26 @@
 {
     "VisitFrequency": {
-        "ColumnActionsByReturningVisits": "Azioni eseguite dalle visite ricorrenti",
+        "ColumnActionsByReturningVisits": "Azioni eseguite dalle Visite di Ritorno",
         "ColumnAverageVisitDurationForReturningVisitors": "Media. Durata delle Visite di Ritorno (in sec)",
         "ColumnAvgActionsPerReturningVisit": "Media. Azioni per Visite di Ritorno",
         "ColumnBounceCountForReturningVisits": "Numero Rimbalzi per Visite di Ritorno",
-        "ColumnBounceRateForReturningVisits": "Percentuale dei rimbalzi per le visite ricorrenti",
+        "ColumnBounceRateForReturningVisits": "Percentuale dei rimbalzi per le Visite di Ritorno",
         "ColumnMaxActionsInReturningVisit": "Numero massimo di azioni in una visita di ritorno",
         "ColumnNbReturningVisitsConverted": "Numero di visite di ritorno convertite",
-        "ColumnReturningVisits": "Visite ricorrenti",
+        "ColumnReturningVisits": "Visite di Ritorno",
         "ColumnSumVisitLengthReturning": "Tempo complessivo speso dai visitatori di ritorno (in secondi)",
         "ColumnUniqueReturningVisitors": "Visitatori unici di ritorno",
-        "ColumnReturningUsers": "Utenti di ritorno",
+        "ColumnReturningUsers": "Utenti di Ritorno",
         "PluginDescription": "Restituisce le metriche riguardanti i nuovi visitatori e quelli di ritorno.",
-        "ReturnActions": "%s pagine visualizzate dalle visite ricorrenti",
-        "ReturnAverageVisitDuration": "%s durata visita per visitatori di ritorno",
+        "ReturnActions": "%s azioni delle visite di ritorno",
+        "ReturnAverageVisitDuration": "%s media durata visita per visitatori di ritorno",
         "ReturnAvgActions": "%s azioni per visita di ritorno",
-        "ReturnBounceRate": "Il %s dei visitatori ricorrenti hanno visto 1 sola pagina",
+        "ReturnBounceRate": "Il %s dei visitatori di ritorno hanno rimbalzato (hanno lasciato il sito dopo aver visto una sola pagina)",
         "ReturningVisitDocumentation": "Una visita di ritorno è fatta (al contrario di una nuova visita) da qualcuno che ha visitato il sito almeno una volta in precedenza.",
         "ReturningVisitsDocumentation": "Questa è una panoramica delle visite di ritorno.",
-        "ReturnVisits": "%s visite ricorrenti",
-        "SubmenuFrequency": "Frequenze",
-        "WidgetGraphReturning": "Grafico visite ricorrenti",
-        "WidgetOverview": "Riepilogo visite ricorrenti"
+        "ReturnVisits": "%s visite di ritorno",
+        "SubmenuFrequency": "Frequenza",
+        "WidgetGraphReturning": "Visite di Ritorno nel Tempo",
+        "WidgetOverview": "Riepilogo Frequenza"
     }
 }
\ No newline at end of file
diff --git a/plugins/VisitTime/VisitTime.php b/plugins/VisitTime/VisitTime.php
index 08b7ad36e53d994e89fab1055658a61842b6dccc..5b1c256ce74ec3d30c17cd24e9e12a74481d8587 100644
--- a/plugins/VisitTime/VisitTime.php
+++ b/plugins/VisitTime/VisitTime.php
@@ -12,9 +12,9 @@ namespace Piwik\Plugins\VisitTime;
 class VisitTime extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'Live.getAllVisitorDetails' => 'extendVisitorDetails',
diff --git a/plugins/VisitTime/lang/zh-cn.json b/plugins/VisitTime/lang/zh-cn.json
index 0fb176ae41e06e8ed7f76e68726d9737696bc8a4..96f998405e9f8bc6cc958678b3aef42615f0900b 100644
--- a/plugins/VisitTime/lang/zh-cn.json
+++ b/plugins/VisitTime/lang/zh-cn.json
@@ -5,6 +5,7 @@
         "DayOfWeek": "星期几的",
         "LocalTime": "日报表",
         "NHour": "%s 点",
+        "PluginDescription": "报告本地时间,当访问者浏览您的网站或应用程序服务器的时间。",
         "ServerTime": "依服务器时间记录的访问",
         "SubmenuTimes": "访问时间",
         "VisitsByDayOfWeek": "周报表",
diff --git a/plugins/VisitorGenerator b/plugins/VisitorGenerator
index 6fdf06613c4d75a51a498e47a20e8d9e19505680..4fcc7da73a376d0b077c4ffa30bd03acad265bfe 160000
--- a/plugins/VisitorGenerator
+++ b/plugins/VisitorGenerator
@@ -1 +1 @@
-Subproject commit 6fdf06613c4d75a51a498e47a20e8d9e19505680
+Subproject commit 4fcc7da73a376d0b077c4ffa30bd03acad265bfe
diff --git a/plugins/VisitorInterest/VisitorInterest.php b/plugins/VisitorInterest/VisitorInterest.php
index 11d5f717c490ef30feb52296db5f283da9cc629f..f135e12923aae3d4ee8801ebd9eadf844848de7b 100644
--- a/plugins/VisitorInterest/VisitorInterest.php
+++ b/plugins/VisitorInterest/VisitorInterest.php
@@ -19,9 +19,9 @@ class VisitorInterest extends \Piwik\Plugin
 {
 
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'Live.getAllVisitorDetails' => 'extendVisitorDetails',
diff --git a/plugins/VisitorInterest/lang/zh-cn.json b/plugins/VisitorInterest/lang/zh-cn.json
index 3c6217f9337e84623454522c162c1bcd4f6201df..2d501ac96ddf7132e9b47af3bec13e72360199c7 100644
--- a/plugins/VisitorInterest/lang/zh-cn.json
+++ b/plugins/VisitorInterest/lang/zh-cn.json
@@ -7,6 +7,7 @@
         "Engagement": "忠诚度",
         "NPages": "%s 页",
         "OnePage": "1 页",
+        "PluginDescription": "有关访问者的兴趣报道:一些浏览过的网页,在网站上花费的时间,上次访问后到现在几天,等等。",
         "VisitNum": "访问次数",
         "VisitsByDaysSinceLast": "基于距离上次访问天数的统计",
         "visitsByVisitCount": "基于访问次数的统计",
diff --git a/plugins/VisitsSummary/VisitsSummary.php b/plugins/VisitsSummary/VisitsSummary.php
index f0e7215aac68c2c0c26e039a9886ba3a671bde11..9bb86de374d13430d777068593b643992837861b 100644
--- a/plugins/VisitsSummary/VisitsSummary.php
+++ b/plugins/VisitsSummary/VisitsSummary.php
@@ -21,9 +21,9 @@ use Piwik\Plugins\VisitsSummary\Reports\Get;
 class VisitsSummary extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
diff --git a/plugins/VisitsSummary/lang/zh-cn.json b/plugins/VisitsSummary/lang/zh-cn.json
index 613352c9fb27abc242837ed353f78acb0ef9fcd0..ddc41833d227b80bba60771f981574e3c416d127 100644
--- a/plugins/VisitsSummary/lang/zh-cn.json
+++ b/plugins/VisitsSummary/lang/zh-cn.json
@@ -17,6 +17,7 @@
         "NbUniquePageviewsDescription": "%s 次唯一浏览",
         "NbUniqueVisitors": "%s 个独立访客数",
         "NbVisitsBounced": "%s 的跳出率 (查看一个页面后就离开)",
+        "PluginDescription": "报告一般分析指标:参观,独立访问者,动作次数,跳出率等。",
         "VisitsSummary": "访客总表",
         "VisitsSummaryDocumentation": "这是访客趋势总表。",
         "WidgetLastVisits": "访客趋势图",
diff --git a/plugins/WebsiteMeasurable/lang/cs.json b/plugins/WebsiteMeasurable/lang/cs.json
new file mode 100644
index 0000000000000000000000000000000000000000..abc772a6da6a375dff49d6774c9cb4179a4d7304
--- /dev/null
+++ b/plugins/WebsiteMeasurable/lang/cs.json
@@ -0,0 +1,7 @@
+{
+    "WebsiteMeasurable": {
+        "Website": "Webová stránka",
+        "Websites": "Webové stránky",
+        "WebsiteDescription": "Webová stránka se skládá ze stránek, většinou umístěných na jedné doméně."
+    }
+}
\ No newline at end of file
diff --git a/plugins/WebsiteMeasurable/lang/sr.json b/plugins/WebsiteMeasurable/lang/sr.json
new file mode 100644
index 0000000000000000000000000000000000000000..d1609882b889bfeb5b45895e12e4e8cf1f00bb12
--- /dev/null
+++ b/plugins/WebsiteMeasurable/lang/sr.json
@@ -0,0 +1,7 @@
+{
+    "WebsiteMeasurable": {
+        "Website": "Sajt",
+        "Websites": "Sajtovi",
+        "WebsiteDescription": "Sajt se sastoji od stranica koje se obično nalaze na jednom domenu."
+    }
+}
\ No newline at end of file
diff --git a/plugins/Widgetize/Widgetize.php b/plugins/Widgetize/Widgetize.php
index 02a520dcd2d5220d3093651ff738a0e546bf929f..750686c6f9465e8029942e7d094e94979a98f2bd 100644
--- a/plugins/Widgetize/Widgetize.php
+++ b/plugins/Widgetize/Widgetize.php
@@ -13,9 +13,9 @@ namespace Piwik\Plugins\Widgetize;
 class Widgetize extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getJavaScriptFiles'        => 'getJsFiles',
diff --git a/plugins/ZenMode/ZenMode.php b/plugins/ZenMode/ZenMode.php
index d22ad4af9d06af9083b0a2fefda5596bb0ef8af8..bbacb157c386381a66d33af8ad4ec49849da93b1 100644
--- a/plugins/ZenMode/ZenMode.php
+++ b/plugins/ZenMode/ZenMode.php
@@ -13,9 +13,9 @@ namespace Piwik\Plugins\ZenMode;
 class ZenMode extends \Piwik\Plugin
 {
     /**
-     * @see Piwik\Plugin::getListHooksRegistered
+     * @see Piwik\Plugin::registerEvents
      */
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getJavaScriptFiles' => 'getJsFiles',
diff --git a/plugins/ZenMode/lang/cs.json b/plugins/ZenMode/lang/cs.json
index 4dd1ffd097e3a3911a480977714c8512ebd87475..9ff86d36151f9a5b2edb42294c3e668baf38f0c8 100644
--- a/plugins/ZenMode/lang/cs.json
+++ b/plugins/ZenMode/lang/cs.json
@@ -1,5 +1,6 @@
 {
     "ZenMode": {
+        "PluginDescription": "Nebuďte rušeni. Zen režim věci zjednoduší. Je dostupný přes ikonu v pravém horním rohu obrazovky.",
         "SearchForAnything": "Hledat cokoliv",
         "QuickAccessTitle": "Hledat hlášení, webové stránky nebo položky menu",
         "HowToSearch": "Pokud chcete najít hlášení nebo položky menu, použijte vyhledávací pole v pravé horní části, nebo stiskněte 'alt+f'.",
diff --git a/plugins/ZenMode/lang/sr.json b/plugins/ZenMode/lang/sr.json
index 0a28199a895e5d6f84e85b47b02084ff6708f12f..4f73c1cf1ab9fd730b5701cf718290414216c566 100644
--- a/plugins/ZenMode/lang/sr.json
+++ b/plugins/ZenMode/lang/sr.json
@@ -1,5 +1,6 @@
 {
     "ZenMode": {
+        "PluginDescription": "Budite u Zenu sa Pivikom. Zen mod čini stvari jednostavnim. Možete ga omogućiti preko sličice u gornjem desnom uglu ekrana.",
         "SearchForAnything": "Pretraži sve",
         "QuickAccessTitle": "Pretraživanje stavki menija, izveštaja i sajtova",
         "HowToSearch": "Ukoliko želite da pretražujete stavke menija, izveštaje ili sajtove, upotrebite polje za pretraživanje u gornjem desnom uglu ili pritisnite Alt + f.",
diff --git a/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php b/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php
index 5845f3190967f8a9f212f4e80952890ad107fe73..3a107c26bd6596ae7c247d3ece3fd8e74bda0f4a 100644
--- a/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php
+++ b/tests/PHPUnit/Fixtures/ManySitesImportedLogs.php
@@ -7,13 +7,11 @@
  */
 namespace Piwik\Tests\Fixtures;
 
-use Piwik\Access;
 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\Framework\Fixture;
-use Piwik\Tests\Framework\OverrideLogin;
 
 /**
  * Imports visits from several log files using the python log importer.
@@ -69,6 +67,11 @@ class ManySitesImportedLogs extends Fixture
             self::createWebsite($this->dateTime, $ecommerce = 0, $siteName = 'Piwik test two',
                 $siteUrl = 'http://example-site-two.com');
         }
+
+        if (!self::siteCreated($idSite = 3)) {
+            self::createWebsite($this->dateTime, $ecommerce = 0, $siteName = 'Piwik test three',
+                $siteUrl = 'http://example-site-three.com');
+        }
     }
 
     const SEGMENT_PRE_ARCHIVED = 'visitCount<=5;visitorType!=non-existing-type;daysSinceFirstVisit<=50';
@@ -110,6 +113,7 @@ class ManySitesImportedLogs extends Fixture
         $this->logVisitsWithStaticResolver();
         $this->logVisitsWithAllEnabled();
         $this->replayLogFile();
+        $this->replayLogFile(array('--idsite' => 3));
         $this->logCustomFormat();
 
         if ($this->includeIisWithCustom) {
@@ -188,7 +192,7 @@ class ManySitesImportedLogs extends Fixture
      * Logs a couple visits for the site we created and two new sites that do not
      * exist yet. Visits are from Aug 12, 13 & 14 of 2012.
      */
-    public function logVisitsWithDynamicResolver()
+    public function logVisitsWithDynamicResolver($maxPayloadSize = 1)
     {
         $logFile = PIWIK_INCLUDE_PATH . '/tests/resources/access-logs/fake_logs_dynamic.log'; # log file
 
@@ -197,8 +201,8 @@ class ManySitesImportedLogs extends Fixture
         $opts = array('--add-sites-new-hosts'       => false,
                       '--enable-testmode'           => false,
                       '--recorders'                 => '1',
-                      '--recorder-max-payload-size' => '1');
-        self::executeLogImporter($logFile, $opts);
+                      '--recorder-max-payload-size' => $maxPayloadSize);
+        return implode("\n", self::executeLogImporter($logFile, $opts));
     }
 
     /**
@@ -226,8 +230,10 @@ class ManySitesImportedLogs extends Fixture
     /**
      * Logs a couple visit using log entries that are tracking requests to a piwik.php file.
      * Adds two visits to idSite=1 and two to non-existant sites.
+     *
+     * @param array $additonalOptions
      */
-    private function replayLogFile()
+    private function replayLogFile($additonalOptions = array())
     {
         $logFile = PIWIK_INCLUDE_PATH . '/tests/resources/access-logs/fake_logs_replay.log';
 
@@ -237,6 +243,8 @@ class ManySitesImportedLogs extends Fixture
                       '--recorder-max-payload-size' => '1',
                       '--replay-tracking'           => false);
 
+        $opts = array_merge($opts, $additonalOptions);
+
         self::executeLogImporter($logFile, $opts);
     }
 
diff --git a/tests/PHPUnit/Framework/TestingEnvironmentVariables.php b/tests/PHPUnit/Framework/TestingEnvironmentVariables.php
index 923ac3915224a3f1aea1618d2cc861dec3791ff1..4b33a7fe07932f5e85cb49a4cea51739e3592e3a 100644
--- a/tests/PHPUnit/Framework/TestingEnvironmentVariables.php
+++ b/tests/PHPUnit/Framework/TestingEnvironmentVariables.php
@@ -43,7 +43,9 @@ class TestingEnvironmentVariables
     {
         $includePath = __DIR__ . '/../../..';
 
-        @mkdir($includePath . '/tmp');
+        if(!file_exists($includePath . '/tmp')){
+            mkdir($includePath . '/tmp');
+        }
 
         $overridePath = $includePath . '/tmp/testingPathOverride.json';
         file_put_contents($overridePath, json_encode($this->behaviorOverrideProperties));
diff --git a/tests/PHPUnit/System/AutoSuggestAPITest.php b/tests/PHPUnit/System/AutoSuggestAPITest.php
index d08209b1d8878e4d895907dddacd6457b71cdf3d..c8035568760bd5baefdf28327ff579f3a1fcb80e 100644
--- a/tests/PHPUnit/System/AutoSuggestAPITest.php
+++ b/tests/PHPUnit/System/AutoSuggestAPITest.php
@@ -8,8 +8,11 @@
 namespace Piwik\Tests\System;
 
 use Piwik\API\Request;
+use Piwik\Application\Environment;
+use Piwik\Columns\Dimension;
 use Piwik\Common;
 use Piwik\Date;
+use Piwik\Plugins\CustomVariables\Model;
 use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\ManyVisitsWithGeoIP;
 use Piwik\Tests\Framework\Fixture;
@@ -45,15 +48,12 @@ class AutoSuggestAPITest extends SystemTestCase
 
     public function getApiForTesting()
     {
-        // we will test all segments from all plugins
-        Fixture::loadAllPlugins();
-
         $idSite = self::$fixture->idSite;
-        $apiForTesting = array();
+        $segments = self::getSegmentsMetadata();
 
-        $segments = \Piwik\Plugins\API\API::getInstance()->getSegmentsMetadata(self::$fixture->idSite);
+        $apiForTesting = array();
         foreach ($segments as $segment) {
-            $apiForTesting[] = $this->getApiForTestingForSegment($idSite, $segment['segment']);
+            $apiForTesting[] = $this->getApiForTestingForSegment($idSite, $segment);
         }
 
         if (self::isMysqli() || self::isTravisCI()) {
@@ -119,11 +119,11 @@ class AutoSuggestAPITest extends SystemTestCase
 
     public function getAnotherApiForTesting()
     {
-        $segments = self::getSegmentsMetadata(self::$fixture->idSite);
+        $segments = self::getSegmentsMetadata();
 
         $apiForTesting = array();
         foreach ($segments as $segment) {
-            if(self::isTravisCI() && $segment['segment'] == 'deviceType') {
+            if(self::isTravisCI() && $segment == 'deviceType') {
                 // test started failing after bc19503 and I cannot understand why
                 continue;
             }
@@ -131,8 +131,8 @@ class AutoSuggestAPITest extends SystemTestCase
                                      array('idSite'            => self::$fixture->idSite,
                                            'date'              => date("Y-m-d", strtotime(self::$fixture->dateTime)) . ',today',
                                            'period'            => 'range',
-                                           'testSuffix'        => '_' . $segment['segment'],
-                                           'segmentToComplete' => $segment['segment']));
+                                           'testSuffix'        => '_' . $segment,
+                                           'segmentToComplete' => $segment));
         }
         return $apiForTesting;
     }
@@ -153,15 +153,45 @@ class AutoSuggestAPITest extends SystemTestCase
         $this->assertGreaterThan($minimumSegmentsToTest, self::$processed, $message);
     }
 
-    public static function getSegmentsMetadata($idSite)
+    public static function getSegmentsMetadata()
     {
         // Refresh cache for CustomVariables\Model
         Cache::clearCacheGeneral();
 
-        \Piwik\Plugins\CustomVariables\Model::install();
+        $segments = array();
+
+        $environment = new Environment(null);
+
+        $exception = null;
+        try {
+            $environment->init();
+            $environment->getContainer()->get('Piwik\Plugin\Manager')->loadActivatedPlugins();
+
+            foreach (Dimension::getAllDimensions() as $dimension) {
+                foreach ($dimension->getSegments() as $segment) {
+                    $segments[] = $segment->getSegment();
+                }
+            }
+
+            // add CustomVariables manually since the data provider may not have access to the DB
+            for ($i = 1; $i != Model::DEFAULT_CUSTOM_VAR_COUNT + 1; ++$i) {
+                $segments[] = 'customVariableName' . $i;
+                $segments[] = 'customVariableValue' . $i;
+                $segments[] = 'customVariablePageName' . $i;
+                $segments[] = 'customVariablePageValue' . $i;
+            }
+        } catch (\Exception $ex) {
+            $exception = $ex;
+
+            echo $ex->getMessage()."\n".$ex->getTraceAsString()."\n";
+        }
+
+        $environment->destroy();
+
+        if (!empty($exception)) {
+            throw $exception;
+        }
 
-        // Segment matching NONE
-        $segments = \Piwik\Plugins\API\API::getInstance()->getSegmentsMetadata($idSite);
         return $segments;
     }
 }
diff --git a/tests/PHPUnit/System/ImportLogsTest.php b/tests/PHPUnit/System/ImportLogsTest.php
index 353ea6bc69548ad0ed94904a076ecb4853e77d1d..725b2fba1630cd1dd9ac1a0604d7e62e119b0a2b 100755
--- a/tests/PHPUnit/System/ImportLogsTest.php
+++ b/tests/PHPUnit/System/ImportLogsTest.php
@@ -8,11 +8,14 @@
 namespace Piwik\Tests\System;
 
 use Piwik\Access;
+use Piwik\Common;
 use Piwik\Plugins\SitesManager\API;
 use Piwik\Tests\Framework\Fixture;
 use Piwik\Tests\Framework\TestCase\SystemTestCase;
 use Piwik\Tests\Fixtures\ManySitesImportedLogs;
 use Piwik\Tests\Framework\TestingEnvironmentVariables;
+use Piwik\Tracker\Request;
+use Piwik\Tracker\RequestSet;
 
 /**
  * Tests the log importer.
@@ -86,16 +89,32 @@ class ImportLogsTest extends SystemTestCase
             'otherRequestParameters' => array(
                 'filter_limit' => 1000
         )));
+
+        // imported via --replay-tracking --idsite=3  should ignore idSite from logs and use fixed idSite instead
+        $apis[] = array($apiMethods, array(
+            'idSite'  => 3,
+            'date'    => '2012-08-09,2014-04-01',
+            'periods' => 'range',
+            'otherRequestParameters' => array(
+                'filter_limit' => 1000
+            ),
+            'testSuffix' => '_siteIdThree_TrackedUsingLogReplayWithFixedSiteId'));
+
         return $apis;
     }
 
     /**
      * NOTE: This test must be last since the new sites that get added are added in
      *       random order.
+     * NOTE: This test combines two tests in order to avoid executing the log importer another time.
+     *       If the log importer were refactored, the invalid requests test could be a unit test in
+     *       python.
      */
-    public function testDynamicResolverSitesCreated()
+    public function test_LogImporter_CreatesSitesWhenDynamicResolverUsed_AndReportsOnInvalidRequests()
     {
-        self::$fixture->logVisitsWithDynamicResolver();
+        $this->simulateInvalidTrackerRequest();
+
+        $output = self::$fixture->logVisitsWithDynamicResolver($maxPayloadSize = 3);
 
         // reload access so new sites are viewable
         Access::getInstance()->setSuperUserAccess(true);
@@ -109,6 +128,10 @@ class ImportLogsTest extends SystemTestCase
 
         $whateverDotCom = API::getInstance()->getSitesIdFromSiteUrl('http://whatever.com');
         $this->assertEquals(1, count($whateverDotCom));
+
+        // make sure invalid requests are reported correctly
+        $this->assertContains('The Piwik tracker identified 2 invalid requests on lines: 10, 11', $output);
+        $this->assertContains("The following lines were not tracked by Piwik, either due to a malformed tracker request or error in the tracker:\n\n10, 11", $output);
     }
 
     public function test_LogImporter_RetriesWhenServerFails()
@@ -152,23 +175,53 @@ class ImportLogsTest extends SystemTestCase
     {
         $testingEnvironment = new TestingEnvironmentVariables();
         $testingEnvironment->_triggerTrackerFailure = null;
+        $testingEnvironment->_triggerInvalidRequests = null;
         $testingEnvironment->save();
     }
 
+    private function simulateInvalidTrackerRequest()
+    {
+        $testEnvironment = new TestingEnvironmentVariables();
+        $testEnvironment->_triggerInvalidRequests = true;
+        $testEnvironment->save();
+    }
+
     public static function provideContainerConfigBeforeClass()
     {
         $result = array();
+        $observers = array();
 
         $testingEnvironment = new TestingEnvironmentVariables();
         if ($testingEnvironment->_triggerTrackerFailure) {
-            $result['observers.global'] = \DI\add(array(
-                array('Tracker.newHandler', function () {
-                    @http_response_code(500);
+            $observers[] = array('Tracker.newHandler', function () {
+                @http_response_code(500);
+
+                throw new \Exception("injected exception");
+            });
+        }
+
+        if ($testingEnvironment->_triggerInvalidRequests) {
+            // we trigger an invalid request by checking for triggerInvalid=1 in a request, and if found replacing the
+            // request w/ a request that has an nonexistent idsite
+            $observers[] = array('Tracker.initRequestSet', function (RequestSet $requestSet) {
+                $requests = $requestSet->getRequests();
+                foreach ($requests as $index => $request) {
+                    $url = $request->getParam('url');
+                    if (strpos($url, 'triggerInvalid=1') !== false) {
+                        $newParams = $request->getParams();
+                        $newParams['idsite'] = 1000;
+
+                        $requests[$index] = new Request($newParams);
+                    }
+                }
+                $requestSet->setRequests($requests);
+            });
+        }
 
-                    throw new \Exception("injected exception");
-                })
-            ));
+        if (!empty($observers)) {
+            $result['observers.global'] = \DI\add($observers);
         }
+
         return $result;
     }
 }
diff --git a/tests/PHPUnit/System/RawLogDaoTest.php b/tests/PHPUnit/System/RawLogDaoTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..e0210467e257c82f107901634183470dc3748035
--- /dev/null
+++ b/tests/PHPUnit/System/RawLogDaoTest.php
@@ -0,0 +1,68 @@
+<?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\System;
+
+use Piwik\DataAccess\RawLogDao;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
+
+/**
+ * @group Core
+ * @group RawLogDao
+ * @group RawLogDaoTest
+ */
+class RawLogDaoTest extends SystemTestCase
+{
+    /**
+     * @var RawLogDao
+     */
+    private $dao;
+
+    private $idSite = 1;
+
+    public function setUp()
+    {
+        parent::setUp();
+
+        if (!Fixture::siteCreated($this->idSite)) {
+            Fixture::createWebsite('2010-00-00 00:00:00');
+        }
+
+        $this->dao = new RawLogDao();
+    }
+
+    /**
+     * @dataProvider getVisitsInTimeFrameData
+     */
+    public function test_hasSiteVisitsInTimeframe_shouldDetectWhetherThereAreVisitsInCertainTimeframe($from, $to, $idSite, $expectedHasVisits)
+    {
+        Fixture::getTracker($this->idSite, '2015-01-25 05:35:27')->doTrackPageView('/test');
+
+        $hasVisits = $this->dao->hasSiteVisitsBetweenTimeframe($from, $to, $idSite);
+        $this->assertSame($expectedHasVisits, $hasVisits);
+    }
+
+    public function getVisitsInTimeFrameData()
+    {
+        return array(
+            array($from = '2015-01-25 05:35:26', $to = '2015-01-25 05:35:27', $this->idSite, $hasVisits = false), // there is no second "between" the timeframe so cannot have visits
+            array($from = '2015-01-25 05:35:27', $to = '2015-01-25 05:35:28', $this->idSite, $hasVisits = false), // there is no second "between" the timeframe so cannot have visits
+            array($from = '2015-01-25 05:35:26', $to = '2015-01-25 05:35:28', $this->idSite, $hasVisits = true), // only one sec difference between from and to
+            array($from = '2015-01-25 05:35:26', $to = '2015-01-26 05:35:27', $this->idSite, $hasVisits = true),
+            array($from = '2015-01-24 05:35:26', $to = '2015-01-26 05:35:27', $this->idSite, $hasVisits = true),
+            array($from = '2015-01-25 05:35:26', $to = '2015-01-25 05:35:27', $idSite = 2, $hasVisits = false),  // no because idSite does not match
+            array($from = '2015-01-24 05:35:26', $to = '2015-01-25 05:35:27', $idSite = 2, $hasVisits = false),  // ...
+            array($from = '2015-01-25 05:35:26', $to = '2015-01-26 05:35:27', $idSite = 2, $hasVisits = false),  // ...
+            array($from = '2015-01-24 05:35:26', $to = '2015-01-26 05:35:27', $idSite = 2, $hasVisits = false),  // ... no because not matching idsite
+            array($from = '2015-01-24 05:35:26', $to = '2015-01-25 05:35:26', $this->idSite, $hasVisits = false), // time of visit is later
+            array($from = '2015-01-25 05:35:28', $to = '2015-01-27 05:35:27', $this->idSite, $hasVisits = false),  // time of visit is earlier
+        );
+    }
+
+}
diff --git a/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentMatchNONETest.php b/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentMatchNONETest.php
index 4ab45a24fc2478caac73de468af8a0846c78c9aa..3667f7f65b1d4928207250520d083dca78665c45 100755
--- a/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentMatchNONETest.php
+++ b/tests/PHPUnit/System/TwoVisitsWithCustomVariablesSegmentMatchNONETest.php
@@ -48,7 +48,7 @@ class TwoVisitsWithCustomVariablesSegmentMatchNONETest extends SystemTestCase
 
     public function getSegmentToTest()
     {
-        $segments = AutoSuggestAPITest::getSegmentsMetadata(self::$fixture->idSite);
+        $segments = AutoSuggestAPITest::getSegmentsMetadata();
 
         $minimumExpectedSegmentsCount = 55; // as of Piwik 1.12
         $this->assertGreaterThan($minimumExpectedSegmentsCount, count($segments));
@@ -57,18 +57,18 @@ class TwoVisitsWithCustomVariablesSegmentMatchNONETest extends SystemTestCase
         $seenVisitorId = false;
         foreach ($segments as $segment) {
             $value = 'campaign';
-            if ($segment['segment'] == 'visitorId') {
+            if ($segment == 'visitorId') {
                 $seenVisitorId = true;
                 $value = '34c31e04394bdc63';
             }
-            if ($segment['segment'] == 'visitEcommerceStatus') {
+            if ($segment == 'visitEcommerceStatus') {
                 $value = 'none';
             }
-            $matchNone = $segment['segment'] . '!=' . $value;
+            $matchNone = $segment . '!=' . $value;
 
             // deviceType != campaign matches ALL visits, but we want to match None
-            if($segment['segment'] == 'deviceType') {
-                $matchNone = $segment['segment'] . '==car%20browser';
+            if($segment == 'deviceType') {
+                $matchNone = $segment . '==car%20browser';
             }
             $segmentExpression[] = $matchNone;
         }
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_archive_php_cron_output.txt b/tests/PHPUnit/System/expected/test_ArchiveCronTest_archive_php_cron_output.txt
index 527f8f1b8a3695a2135db26e003d168320dc191d..3f7a2765b87fa95e40f9893850325ac8ce6866bc 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_archive_php_cron_output.txt
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_archive_php_cron_output.txt
@@ -20,13 +20,13 @@ INFO CoreConsole[2015-03-02 06:14:01] - If you execute this script at least once
 INFO CoreConsole[2015-03-02 06:14:01]   See the doc at: http://piwik.org/docs/setup-auto-archiving/
 INFO CoreConsole[2015-03-02 06:14:01] - Reports for today will be processed at most every 150 seconds. You can change this value in Piwik UI > Settings > General Settings.
 INFO CoreConsole[2015-03-02 06:14:01] - Reports for the current week/month/year will be refreshed at most every 3600 seconds.
-INFO CoreConsole[2015-03-02 06:14:01] Will invalidate archived reports for 2012-08-09 for following siteIds: 1
-INFO CoreConsole[2015-03-02 06:14:02] Will invalidate archived reports for 2012-08-10 for following siteIds: 1
-INFO CoreConsole[2015-03-02 06:14:02] Will invalidate archived reports for 2012-08-11 for following siteIds: 1
-INFO CoreConsole[2015-03-02 06:14:02] Will invalidate archived reports for 2012-08-15 for following siteIds: 1,2
-INFO CoreConsole[2015-03-02 06:14:02] Will invalidate archived reports for 2012-09-30 for following siteIds: 1
-INFO CoreConsole[2015-03-02 06:14:02] Will invalidate archived reports for 2014-03-12 for following siteIds: 1
-INFO CoreConsole[2015-03-02 06:14:02] Will invalidate archived reports for 2014-03-13 for following siteIds: 1
+INFO CoreConsole[2015-03-02 06:14:01] Will invalidate archived reports for 2012-08-09 for following website ids: 1
+INFO CoreConsole[2015-03-02 06:14:02] Will invalidate archived reports for 2012-08-10 for following website ids: 1
+INFO CoreConsole[2015-03-02 06:14:02] Will invalidate archived reports for 2012-08-11 for following website ids: 1
+INFO CoreConsole[2015-03-02 06:14:02] Will invalidate archived reports for 2012-08-15 for following website ids: 1,2
+INFO CoreConsole[2015-03-02 06:14:02] Will invalidate archived reports for 2012-09-30 for following website ids: 1
+INFO CoreConsole[2015-03-02 06:14:02] Will invalidate archived reports for 2014-03-12 for following website ids: 1
+INFO CoreConsole[2015-03-02 06:14:02] Will invalidate archived reports for 2014-03-13 for following website ids: 1
 INFO CoreConsole[2015-03-02 06:14:02] - Will process 0 websites with new visits since 7 days 0 hours
 INFO CoreConsole[2015-03-02 06:14:02] - Will process 2 other websites because some old data reports have been invalidated (eg. using the Log Import script) , IDs: 1, 2
 INFO CoreConsole[2015-03-02 06:14:02] ---------------------------
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_noOptions__VisitsSummary.get_day.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_noOptions__VisitsSummary.get_day.xml
index 32434a44f62f209813e85e171ef0c9ce9b8ea9c9..209613d7560b9d2e1327718a728d16079f62f9a1 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_noOptions__VisitsSummary.get_day.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_noOptions__VisitsSummary.get_day.xml
@@ -14,4 +14,5 @@
 		<avg_time_on_site>0</avg_time_on_site>
 	</result>
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_noOptions__VisitsSummary.get_month.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_noOptions__VisitsSummary.get_month.xml
index 527a5d71773b499c791ec688aec21736cfe60a5b..6cc283b5552d9b464a65cd64d1467161095c08d8 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_noOptions__VisitsSummary.get_month.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_noOptions__VisitsSummary.get_month.xml
@@ -26,4 +26,17 @@
 		<nb_actions_per_visit>1</nb_actions_per_visit>
 		<avg_time_on_site>0</avg_time_on_site>
 	</result>
+	<result idSite="3">
+		<nb_uniq_visitors>2</nb_uniq_visitors>
+		<nb_users>0</nb_users>
+		<nb_visits>3</nb_visits>
+		<nb_actions>5</nb_actions>
+		<nb_visits_converted>0</nb_visits_converted>
+		<bounce_count>2</bounce_count>
+		<sum_visit_length>1</sum_visit_length>
+		<max_actions>3</max_actions>
+		<bounce_rate>67%</bounce_rate>
+		<nb_actions_per_visit>1.7</nb_actions_per_visit>
+		<avg_time_on_site>0</avg_time_on_site>
+	</result>
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_noOptions__VisitsSummary.get_week.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_noOptions__VisitsSummary.get_week.xml
index b83a03206fe46d17cad1f0f2b47f48cd97666542..16c4dae84fec0ffce87ca73423ec1133a91dae5f 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_noOptions__VisitsSummary.get_week.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_noOptions__VisitsSummary.get_week.xml
@@ -14,4 +14,5 @@
 		<avg_time_on_site>12</avg_time_on_site>
 	</result>
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_noOptions__VisitsSummary.get_year.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_noOptions__VisitsSummary.get_year.xml
index 46ff0006a894f6055470e45e44d510b330d8e282..19948ee71e667c51c00e388e56c1d679a3d2ffbb 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_noOptions__VisitsSummary.get_year.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_noOptions__VisitsSummary.get_year.xml
@@ -22,4 +22,15 @@
 		<nb_actions_per_visit>1</nb_actions_per_visit>
 		<avg_time_on_site>0</avg_time_on_site>
 	</result>
+	<result idSite="3">
+		<nb_visits>3</nb_visits>
+		<nb_actions>5</nb_actions>
+		<nb_visits_converted>0</nb_visits_converted>
+		<bounce_count>2</bounce_count>
+		<sum_visit_length>1</sum_visit_length>
+		<max_actions>3</max_actions>
+		<bounce_rate>67%</bounce_rate>
+		<nb_actions_per_visit>1.7</nb_actions_per_visit>
+		<avg_time_on_site>0</avg_time_on_site>
+	</result>
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_nonPreArchivedSegment_noOptions__VisitsSummary.get_day.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_nonPreArchivedSegment_noOptions__VisitsSummary.get_day.xml
index 1c7f2179e5ae80abb3710f64976aa31d817f256a..dd52dc4ff40444a272c35ecbb3f94665561db11a 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_nonPreArchivedSegment_noOptions__VisitsSummary.get_day.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_nonPreArchivedSegment_noOptions__VisitsSummary.get_day.xml
@@ -2,4 +2,5 @@
 <results>
 	<result idSite="1" />
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_nonPreArchivedSegment_noOptions__VisitsSummary.get_month.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_nonPreArchivedSegment_noOptions__VisitsSummary.get_month.xml
index 1c7f2179e5ae80abb3710f64976aa31d817f256a..dd52dc4ff40444a272c35ecbb3f94665561db11a 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_nonPreArchivedSegment_noOptions__VisitsSummary.get_month.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_nonPreArchivedSegment_noOptions__VisitsSummary.get_month.xml
@@ -2,4 +2,5 @@
 <results>
 	<result idSite="1" />
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_nonPreArchivedSegment_noOptions__VisitsSummary.get_week.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_nonPreArchivedSegment_noOptions__VisitsSummary.get_week.xml
index 1c7f2179e5ae80abb3710f64976aa31d817f256a..dd52dc4ff40444a272c35ecbb3f94665561db11a 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_nonPreArchivedSegment_noOptions__VisitsSummary.get_week.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_nonPreArchivedSegment_noOptions__VisitsSummary.get_week.xml
@@ -2,4 +2,5 @@
 <results>
 	<result idSite="1" />
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_nonPreArchivedSegment_noOptions__VisitsSummary.get_year.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_nonPreArchivedSegment_noOptions__VisitsSummary.get_year.xml
index 1c7f2179e5ae80abb3710f64976aa31d817f256a..dd52dc4ff40444a272c35ecbb3f94665561db11a 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_nonPreArchivedSegment_noOptions__VisitsSummary.get_year.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_nonPreArchivedSegment_noOptions__VisitsSummary.get_year.xml
@@ -2,4 +2,5 @@
 <results>
 	<result idSite="1" />
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml
index 84daa26e4f6e46acaf81bd2bd520df2a0d800c5d..9cade6e15565b2773faed4b81e6774a66d897e6b 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_preArchivedSegment_noOptions__Live.getLastVisitsDetails_year.xml
@@ -2,7 +2,7 @@
 <result>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>41</idVisit>
+		<idVisit>56</idVisit>
 		<visitIp>175.41.192.40</visitIp>
 		
 		<actionDetails>
@@ -12,7 +12,7 @@
 				<pageTitle />
 				<pageIdAction>1</pageIdAction>
 				
-				<pageId>48</pageId>
+				<pageId>69</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -30,7 +30,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>48</goalPageId>
+				<goalPageId>69</goalPageId>
 				
 				<url>http://piwik.net/blog/category/meta/</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -42,7 +42,7 @@
 				<pageTitle />
 				<pageIdAction>1</pageIdAction>
 				
-				<pageId>52</pageId>
+				<pageId>73</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -61,7 +61,7 @@
 				<pageTitle />
 				<pageIdAction>1</pageIdAction>
 				
-				<pageId>56</pageId>
+				<pageId>77</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -80,7 +80,7 @@
 				<pageTitle />
 				<pageIdAction>2</pageIdAction>
 				
-				<pageId>49</pageId>
+				<pageId>70</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -99,7 +99,7 @@
 				<pageTitle />
 				<pageIdAction>2</pageIdAction>
 				
-				<pageId>53</pageId>
+				<pageId>74</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -118,7 +118,7 @@
 				<pageTitle />
 				<pageIdAction>2</pageIdAction>
 				
-				<pageId>57</pageId>
+				<pageId>78</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -137,7 +137,7 @@
 				<pageTitle />
 				<pageIdAction>3</pageIdAction>
 				
-				<pageId>50</pageId>
+				<pageId>71</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -156,7 +156,7 @@
 				<pageTitle />
 				<pageIdAction>3</pageIdAction>
 				
-				<pageId>54</pageId>
+				<pageId>75</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -175,7 +175,7 @@
 				<pageTitle />
 				<pageIdAction>4</pageIdAction>
 				
-				<pageId>51</pageId>
+				<pageId>72</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -194,7 +194,7 @@
 				<pageTitle />
 				<pageIdAction>4</pageIdAction>
 				
-				<pageId>55</pageId>
+				<pageId>76</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentNoAutoArchive_noOptions__VisitsSummary.get_day.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentNoAutoArchive_noOptions__VisitsSummary.get_day.xml
index 1c7f2179e5ae80abb3710f64976aa31d817f256a..dd52dc4ff40444a272c35ecbb3f94665561db11a 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentNoAutoArchive_noOptions__VisitsSummary.get_day.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentNoAutoArchive_noOptions__VisitsSummary.get_day.xml
@@ -2,4 +2,5 @@
 <results>
 	<result idSite="1" />
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentNoAutoArchive_noOptions__VisitsSummary.get_month.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentNoAutoArchive_noOptions__VisitsSummary.get_month.xml
index 1c7f2179e5ae80abb3710f64976aa31d817f256a..dd52dc4ff40444a272c35ecbb3f94665561db11a 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentNoAutoArchive_noOptions__VisitsSummary.get_month.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentNoAutoArchive_noOptions__VisitsSummary.get_month.xml
@@ -2,4 +2,5 @@
 <results>
 	<result idSite="1" />
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentNoAutoArchive_noOptions__VisitsSummary.get_week.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentNoAutoArchive_noOptions__VisitsSummary.get_week.xml
index 1c7f2179e5ae80abb3710f64976aa31d817f256a..dd52dc4ff40444a272c35ecbb3f94665561db11a 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentNoAutoArchive_noOptions__VisitsSummary.get_week.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentNoAutoArchive_noOptions__VisitsSummary.get_week.xml
@@ -2,4 +2,5 @@
 <results>
 	<result idSite="1" />
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentNoAutoArchive_noOptions__VisitsSummary.get_year.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentNoAutoArchive_noOptions__VisitsSummary.get_year.xml
index 1c7f2179e5ae80abb3710f64976aa31d817f256a..dd52dc4ff40444a272c35ecbb3f94665561db11a 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentNoAutoArchive_noOptions__VisitsSummary.get_year.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentNoAutoArchive_noOptions__VisitsSummary.get_year.xml
@@ -2,4 +2,5 @@
 <results>
 	<result idSite="1" />
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentOnlyOneSite_noOptions__VisitsSummary.get_day.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentOnlyOneSite_noOptions__VisitsSummary.get_day.xml
index 89cd6273392c68181061c2eda26d01c61d7315e4..2f05440facac8906468304047a1f4adb81f6eefe 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentOnlyOneSite_noOptions__VisitsSummary.get_day.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentOnlyOneSite_noOptions__VisitsSummary.get_day.xml
@@ -14,4 +14,5 @@
 		<avg_time_on_site>0</avg_time_on_site>
 	</result>
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentOnlyOneSite_noOptions__VisitsSummary.get_month.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentOnlyOneSite_noOptions__VisitsSummary.get_month.xml
index dc70f24c00da91b00873fb529f84697a71731a13..69cfb8ea524d1e59f26da40fd37dfdaa0816e6b2 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentOnlyOneSite_noOptions__VisitsSummary.get_month.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentOnlyOneSite_noOptions__VisitsSummary.get_month.xml
@@ -14,4 +14,5 @@
 		<avg_time_on_site>0</avg_time_on_site>
 	</result>
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentOnlyOneSite_noOptions__VisitsSummary.get_week.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentOnlyOneSite_noOptions__VisitsSummary.get_week.xml
index 09a9dec19afa38e9ef0e3c425924587d1a0702b2..3b8ee5ce75023dd11319e5e1ac81344b81197616 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentOnlyOneSite_noOptions__VisitsSummary.get_week.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentOnlyOneSite_noOptions__VisitsSummary.get_week.xml
@@ -14,4 +14,5 @@
 		<avg_time_on_site>0</avg_time_on_site>
 	</result>
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentOnlyOneSite_noOptions__VisitsSummary.get_year.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentOnlyOneSite_noOptions__VisitsSummary.get_year.xml
index 5596008ffe31ae7a27a9f4ced70346f6dfbd4bf9..127cfeba900b3fa95b8ff36a9b22b19e5ddee0d9 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentOnlyOneSite_noOptions__VisitsSummary.get_year.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentOnlyOneSite_noOptions__VisitsSummary.get_year.xml
@@ -12,4 +12,5 @@
 		<avg_time_on_site>0</avg_time_on_site>
 	</result>
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchivedWithUrlEncoding_noOptions__VisitsSummary.get_day.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchivedWithUrlEncoding_noOptions__VisitsSummary.get_day.xml
index 32434a44f62f209813e85e171ef0c9ce9b8ea9c9..209613d7560b9d2e1327718a728d16079f62f9a1 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchivedWithUrlEncoding_noOptions__VisitsSummary.get_day.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchivedWithUrlEncoding_noOptions__VisitsSummary.get_day.xml
@@ -14,4 +14,5 @@
 		<avg_time_on_site>0</avg_time_on_site>
 	</result>
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchivedWithUrlEncoding_noOptions__VisitsSummary.get_month.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchivedWithUrlEncoding_noOptions__VisitsSummary.get_month.xml
index 0f88508621728523f715592036c04785083f7af6..22528b0939bcc2956db4d5cf0a4643a9fd45e2c5 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchivedWithUrlEncoding_noOptions__VisitsSummary.get_month.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchivedWithUrlEncoding_noOptions__VisitsSummary.get_month.xml
@@ -14,4 +14,5 @@
 		<avg_time_on_site>12</avg_time_on_site>
 	</result>
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchivedWithUrlEncoding_noOptions__VisitsSummary.get_week.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchivedWithUrlEncoding_noOptions__VisitsSummary.get_week.xml
index b83a03206fe46d17cad1f0f2b47f48cd97666542..16c4dae84fec0ffce87ca73423ec1133a91dae5f 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchivedWithUrlEncoding_noOptions__VisitsSummary.get_week.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchivedWithUrlEncoding_noOptions__VisitsSummary.get_week.xml
@@ -14,4 +14,5 @@
 		<avg_time_on_site>12</avg_time_on_site>
 	</result>
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchivedWithUrlEncoding_noOptions__VisitsSummary.get_year.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchivedWithUrlEncoding_noOptions__VisitsSummary.get_year.xml
index c89ec107eccf94d5687d4f7d7f0d98c54c99271f..e0409a2e7a25a6fbb10e2499490b0985da5913ba 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchivedWithUrlEncoding_noOptions__VisitsSummary.get_year.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchivedWithUrlEncoding_noOptions__VisitsSummary.get_year.xml
@@ -12,4 +12,5 @@
 		<avg_time_on_site>13</avg_time_on_site>
 	</result>
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchived_noOptions__VisitsSummary.get_day.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchived_noOptions__VisitsSummary.get_day.xml
index 32434a44f62f209813e85e171ef0c9ce9b8ea9c9..209613d7560b9d2e1327718a728d16079f62f9a1 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchived_noOptions__VisitsSummary.get_day.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchived_noOptions__VisitsSummary.get_day.xml
@@ -14,4 +14,5 @@
 		<avg_time_on_site>0</avg_time_on_site>
 	</result>
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchived_noOptions__VisitsSummary.get_month.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchived_noOptions__VisitsSummary.get_month.xml
index 0f88508621728523f715592036c04785083f7af6..22528b0939bcc2956db4d5cf0a4643a9fd45e2c5 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchived_noOptions__VisitsSummary.get_month.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchived_noOptions__VisitsSummary.get_month.xml
@@ -14,4 +14,5 @@
 		<avg_time_on_site>12</avg_time_on_site>
 	</result>
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchived_noOptions__VisitsSummary.get_week.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchived_noOptions__VisitsSummary.get_week.xml
index b83a03206fe46d17cad1f0f2b47f48cd97666542..16c4dae84fec0ffce87ca73423ec1133a91dae5f 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchived_noOptions__VisitsSummary.get_week.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchived_noOptions__VisitsSummary.get_week.xml
@@ -14,4 +14,5 @@
 		<avg_time_on_site>12</avg_time_on_site>
 	</result>
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchived_noOptions__VisitsSummary.get_year.xml b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchived_noOptions__VisitsSummary.get_year.xml
index c89ec107eccf94d5687d4f7d7f0d98c54c99271f..e0409a2e7a25a6fbb10e2499490b0985da5913ba 100644
--- a/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchived_noOptions__VisitsSummary.get_year.xml
+++ b/tests/PHPUnit/System/expected/test_ArchiveCronTest_segmentPreArchived_noOptions__VisitsSummary.get_year.xml
@@ -12,4 +12,5 @@
 		<avg_time_on_site>13</avg_time_on_site>
 	</result>
 	<result idSite="2" />
+	<result idSite="3" />
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml
index 00e485e699bcdb6b2302001c959ed0fb555f5870..15d5d4a7ff75d814edb4f65397edb44fd554e2bf 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__Live.getLastVisitsDetails_range.xml
@@ -2,7 +2,7 @@
 <result>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>40</idVisit>
+		<idVisit>41</idVisit>
 		<visitIp>174.97.139.63</visitIp>
 		
 		<actionDetails>
@@ -11,7 +11,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>47</goalPageId>
+				<goalPageId>48</goalPageId>
 				
 				<url>http://piwik.org/</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -21,9 +21,9 @@
 				<type>action</type>
 				<url>http://piwik.org/</url>
 				<pageTitle>Liberate Web Analytics - Analytics - Piwik</pageTitle>
-				<pageIdAction>34</pageIdAction>
+				<pageIdAction>35</pageIdAction>
 				
-				<pageId>47</pageId>
+				<pageId>48</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -131,7 +131,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>33</idVisit>
+		<idVisit>34</idVisit>
 		<visitIp>206.190.75.8</visitIp>
 		
 		<actionDetails>
@@ -139,9 +139,9 @@
 				<type>action</type>
 				<url>http://piwik.org/changelog/</url>
 				<pageTitle>Changelog Archive - Analytics - Piwik</pageTitle>
-				<pageIdAction>43</pageIdAction>
+				<pageIdAction>44</pageIdAction>
 				
-				<pageId>38</pageId>
+				<pageId>39</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -158,7 +158,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>38</goalPageId>
+				<goalPageId>39</goalPageId>
 				
 				<url>http://piwik.org/changelog/</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -168,9 +168,9 @@
 				<type>action</type>
 				<url>http://piwik.org/contact/</url>
 				<pageTitle>Contact the Piwik team - Analytics - Piwik</pageTitle>
-				<pageIdAction>54</pageIdAction>
+				<pageIdAction>55</pageIdAction>
 				
-				<pageId>46</pageId>
+				<pageId>47</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -264,7 +264,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>39</idVisit>
+		<idVisit>40</idVisit>
 		<visitIp>193.159.20.129</visitIp>
 		
 		<actionDetails>
@@ -273,7 +273,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>45</goalPageId>
+				<goalPageId>46</goalPageId>
 				
 				<url>http://demo.piwik.org/index.php?module=CoreHome&amp;action=index&amp;date=yesterday&amp;period=day&amp;idSite=7</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -283,9 +283,9 @@
 				<type>action</type>
 				<url>http://demo.piwik.org/index.php?module=CoreHome&amp;action=index&amp;date=yesterday&amp;period=day&amp;idSite=7</url>
 				<pageTitle>demo.piwik.org/Piwik Forums - Piwik › Web Analytics Reports</pageTitle>
-				<pageIdAction>52</pageIdAction>
+				<pageIdAction>53</pageIdAction>
 				
-				<pageId>45</pageId>
+				<pageId>46</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -405,7 +405,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>37</idVisit>
+		<idVisit>38</idVisit>
 		<visitIp>50.244.17.130</visitIp>
 		
 		<actionDetails>
@@ -413,9 +413,9 @@
 				<type>action</type>
 				<url>http://piwik.org/</url>
 				<pageTitle>Liberate Web Analytics - Analytics - Piwik</pageTitle>
-				<pageIdAction>34</pageIdAction>
+				<pageIdAction>35</pageIdAction>
 				
-				<pageId>42</pageId>
+				<pageId>43</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -432,7 +432,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>42</goalPageId>
+				<goalPageId>43</goalPageId>
 				
 				<url>http://piwik.org/</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -442,9 +442,9 @@
 				<type>action</type>
 				<url>http://piwik.org/what-is-piwisk/</url>
 				<pageTitle>What is Piwik? - Analytics - Piwik</pageTitle>
-				<pageIdAction>50</pageIdAction>
+				<pageIdAction>51</pageIdAction>
 				
-				<pageId>44</pageId>
+				<pageId>45</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -555,7 +555,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>38</idVisit>
+		<idVisit>39</idVisit>
 		<visitIp>84.194.72.21</visitIp>
 		
 		<actionDetails>
@@ -563,9 +563,9 @@
 				<type>outlink</type>
 				<url>http://demo.piwik.org/</url>
 				<pageTitle />
-				<pageIdAction>48</pageIdAction>
+				<pageIdAction>49</pageIdAction>
 				
-				<pageId>43</pageId>
+				<pageId>44</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -676,7 +676,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>36</idVisit>
+		<idVisit>37</idVisit>
 		<visitIp>108.211.181.12</visitIp>
 		
 		<actionDetails>
@@ -685,7 +685,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>41</goalPageId>
+				<goalPageId>42</goalPageId>
 				
 				<url>http://piwik.org/blog/2012/10/integrate-piwik-into-your-rails-application/</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -695,9 +695,9 @@
 				<type>action</type>
 				<url>http://piwik.org/blog/2012/10/integrate-piwik-into-your-rails-application/</url>
 				<pageTitle>Integrate Piwik into your Rails Application - Analytics - Piwik</pageTitle>
-				<pageIdAction>47</pageIdAction>
+				<pageIdAction>48</pageIdAction>
 				
-				<pageId>41</pageId>
+				<pageId>42</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -817,7 +817,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>35</idVisit>
+		<idVisit>36</idVisit>
 		<visitIp>219.101.46.222</visitIp>
 		
 		<actionDetails>
@@ -826,7 +826,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>40</goalPageId>
+				<goalPageId>41</goalPageId>
 				
 				<url>https://piwik.org/log-analytics/</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -836,9 +836,9 @@
 				<type>action</type>
 				<url>http://piwik.org/log-analytics/</url>
 				<pageTitle>Log Analytics - Analytics - Piwik</pageTitle>
-				<pageIdAction>41</pageIdAction>
+				<pageIdAction>42</pageIdAction>
 				
-				<pageId>40</pageId>
+				<pageId>41</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -945,7 +945,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>34</idVisit>
+		<idVisit>35</idVisit>
 		<visitIp>80.136.160.65</visitIp>
 		
 		<actionDetails>
@@ -954,7 +954,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>39</goalPageId>
+				<goalPageId>40</goalPageId>
 				
 				<url>http://piwik.org/blog/2014/03/piwik-2-1-massive-performance-reliability-improvements/</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -964,9 +964,9 @@
 				<type>action</type>
 				<url>http://piwik.org/blog/2014/03/piwik-2-1-massive-performance-reliability-improvements/</url>
 				<pageTitle>Piwik 2.1 — Massive Performance and Reliability Improvements - Analytics - Piwik</pageTitle>
-				<pageIdAction>45</pageIdAction>
+				<pageIdAction>46</pageIdAction>
 				
-				<pageId>39</pageId>
+				<pageId>40</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -1066,7 +1066,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>32</idVisit>
+		<idVisit>33</idVisit>
 		<visitIp>188.107.238.9</visitIp>
 		
 		<actionDetails>
@@ -1075,7 +1075,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>37</goalPageId>
+				<goalPageId>38</goalPageId>
 				
 				<url>http://piwik.org/log-analytics/</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -1085,9 +1085,9 @@
 				<type>action</type>
 				<url>http://piwik.org/log-analytics/</url>
 				<pageTitle>Log Analytics - Analytics - Piwik</pageTitle>
-				<pageIdAction>41</pageIdAction>
+				<pageIdAction>42</pageIdAction>
 				
-				<pageId>37</pageId>
+				<pageId>38</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -1207,7 +1207,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>30</idVisit>
+		<idVisit>31</idVisit>
 		<visitIp>93.80.130.163</visitIp>
 		
 		<actionDetails>
@@ -1215,9 +1215,9 @@
 				<type>action</type>
 				<url>http://piwik.org/</url>
 				<pageTitle>Liberate Web Analytics - Analytics - Piwik</pageTitle>
-				<pageIdAction>34</pageIdAction>
+				<pageIdAction>35</pageIdAction>
 				
-				<pageId>33</pageId>
+				<pageId>34</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -1235,7 +1235,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>33</goalPageId>
+				<goalPageId>34</goalPageId>
 				
 				<url>http://piwik.org/</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -1245,9 +1245,9 @@
 				<type>action</type>
 				<url>http://piwik.org/download/</url>
 				<pageTitle>Download - Analytics - Piwik</pageTitle>
-				<pageIdAction>38</pageIdAction>
+				<pageIdAction>39</pageIdAction>
 				
-				<pageId>35</pageId>
+				<pageId>36</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -1264,9 +1264,9 @@
 				<type>download</type>
 				<url>http://builds.piwik.org/latest.zip</url>
 				<pageTitle />
-				<pageIdAction>39</pageIdAction>
+				<pageIdAction>40</pageIdAction>
 				
-				<pageId>36</pageId>
+				<pageId>37</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -1369,7 +1369,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>31</idVisit>
+		<idVisit>32</idVisit>
 		<visitIp>176.41.226.154</visitIp>
 		
 		<actionDetails>
@@ -1378,7 +1378,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>34</goalPageId>
+				<goalPageId>35</goalPageId>
 				
 				<url>http://piwik.org/docs/installation/</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -1388,9 +1388,9 @@
 				<type>action</type>
 				<url>http://piwik.org/docs/installation/</url>
 				<pageTitle>Hello Installing Piwik - Analytics - Piwik</pageTitle>
-				<pageIdAction>36</pageIdAction>
+				<pageIdAction>37</pageIdAction>
 				
-				<pageId>34</pageId>
+				<pageId>35</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -1502,7 +1502,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>29</idVisit>
+		<idVisit>30</idVisit>
 		<visitIp>84.194.72.21</visitIp>
 		
 		<actionDetails>
@@ -1511,7 +1511,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>32</goalPageId>
+				<goalPageId>33</goalPageId>
 				
 				<url>http://piwik.org/</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -1521,9 +1521,9 @@
 				<type>action</type>
 				<url>http://piwik.org/</url>
 				<pageTitle>Liberate Web Analytics - Analytics - Piwik</pageTitle>
-				<pageIdAction>34</pageIdAction>
+				<pageIdAction>35</pageIdAction>
 				
-				<pageId>32</pageId>
+				<pageId>33</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -1635,7 +1635,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>41</idVisit>
+		<idVisit>56</idVisit>
 		<visitIp>175.41.192.40</visitIp>
 		
 		<actionDetails>
@@ -1645,7 +1645,7 @@
 				<pageTitle />
 				<pageIdAction>1</pageIdAction>
 				
-				<pageId>48</pageId>
+				<pageId>69</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -1663,7 +1663,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>48</goalPageId>
+				<goalPageId>69</goalPageId>
 				
 				<url>http://piwik.net/blog/category/meta/</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -1675,7 +1675,7 @@
 				<pageTitle />
 				<pageIdAction>1</pageIdAction>
 				
-				<pageId>52</pageId>
+				<pageId>73</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -1694,7 +1694,7 @@
 				<pageTitle />
 				<pageIdAction>1</pageIdAction>
 				
-				<pageId>56</pageId>
+				<pageId>77</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -1713,7 +1713,7 @@
 				<pageTitle />
 				<pageIdAction>2</pageIdAction>
 				
-				<pageId>49</pageId>
+				<pageId>70</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -1732,7 +1732,7 @@
 				<pageTitle />
 				<pageIdAction>2</pageIdAction>
 				
-				<pageId>53</pageId>
+				<pageId>74</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -1751,7 +1751,7 @@
 				<pageTitle />
 				<pageIdAction>2</pageIdAction>
 				
-				<pageId>57</pageId>
+				<pageId>78</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -1770,7 +1770,7 @@
 				<pageTitle />
 				<pageIdAction>3</pageIdAction>
 				
-				<pageId>50</pageId>
+				<pageId>71</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -1789,7 +1789,7 @@
 				<pageTitle />
 				<pageIdAction>3</pageIdAction>
 				
-				<pageId>54</pageId>
+				<pageId>75</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -1808,7 +1808,7 @@
 				<pageTitle />
 				<pageIdAction>4</pageIdAction>
 				
-				<pageId>51</pageId>
+				<pageId>72</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -1827,7 +1827,7 @@
 				<pageTitle />
 				<pageIdAction>4</pageIdAction>
 				
-				<pageId>55</pageId>
+				<pageId>76</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -1918,7 +1918,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>46</idVisit>
+		<idVisit>61</idVisit>
 		<visitIp>192.0.2.10</visitIp>
 		
 		<actionDetails>
@@ -1927,7 +1927,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>64</goalPageId>
+				<goalPageId>85</goalPageId>
 				
 				<url>http://piwik.net/view/my/file.html</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -1937,9 +1937,9 @@
 				<type>action</type>
 				<url>http://piwik.net/view/my/file.html</url>
 				<pageTitle />
-				<pageIdAction>64</pageIdAction>
+				<pageIdAction>65</pageIdAction>
 				
-				<pageId>64</pageId>
+				<pageId>85</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -2030,7 +2030,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>45</idVisit>
+		<idVisit>60</idVisit>
 		<visitIp>172.20.1.0</visitIp>
 		
 		<actionDetails>
@@ -2038,9 +2038,9 @@
 				<type>action</type>
 				<url>http://piwik.net/Citrix/XenApp/Wan/auth/login.jsp</url>
 				<pageTitle>302/URL = http%3A%2F%2Fpiwik.net%2FCitrix%2FXenApp%2FWan%2Fauth%2Flogin.jsp</pageTitle>
-				<pageIdAction>62</pageIdAction>
+				<pageIdAction>63</pageIdAction>
 				
-				<pageId>62</pageId>
+				<pageId>83</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -2057,7 +2057,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>62</goalPageId>
+				<goalPageId>83</goalPageId>
 				
 				<url>http://piwik.net/Citrix/XenApp/Wan/auth/login.jsp</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -2067,9 +2067,9 @@
 				<type>action</type>
 				<url>http://piwik.net/Citrix/XenApp/Wan/auth/silentDetection.jsp</url>
 				<pageTitle />
-				<pageIdAction>63</pageIdAction>
+				<pageIdAction>64</pageIdAction>
 				
-				<pageId>63</pageId>
+				<pageId>84</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -2159,7 +2159,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>51</idVisit>
+		<idVisit>66</idVisit>
 		<visitIp>173.5.0.0</visitIp>
 		
 		<actionDetails>
@@ -2168,7 +2168,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>71</goalPageId>
+				<goalPageId>92</goalPageId>
 				
 				<url>http://hello.example.com/hello/from/another/world/6,681965</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -2178,9 +2178,9 @@
 				<type>action</type>
 				<url>http://hello.example.com/hello/from/another/world/6,681965</url>
 				<pageTitle />
-				<pageIdAction>60</pageIdAction>
+				<pageIdAction>61</pageIdAction>
 				
-				<pageId>71</pageId>
+				<pageId>92</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>Generation Time</customVariablePageName1>
@@ -2283,7 +2283,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>42</idVisit>
+		<idVisit>57</idVisit>
 		<visitIp>70.95.0.0</visitIp>
 		
 		<actionDetails>
@@ -2291,9 +2291,9 @@
 				<type>action</type>
 				<url>http://xzy.example.com/Products/theProduct</url>
 				<pageTitle />
-				<pageIdAction>55</pageIdAction>
+				<pageIdAction>56</pageIdAction>
 				
-				<pageId>58</pageId>
+				<pageId>79</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -2311,7 +2311,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>58</goalPageId>
+				<goalPageId>79</goalPageId>
 				
 				<url>http://xzy.example.com/Products/theProduct</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -2321,9 +2321,9 @@
 				<type>action</type>
 				<url>http://example.hello.com/Topic/hw43061</url>
 				<pageTitle>301/URL = http%3A%2F%2Fexample.hello.com%2FTopic%2Fhw43061</pageTitle>
-				<pageIdAction>57</pageIdAction>
+				<pageIdAction>58</pageIdAction>
 				
-				<pageId>59</pageId>
+				<pageId>80</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -2339,9 +2339,9 @@
 				<type>action</type>
 				<url>http://xzy.example.com/Products/theProduct</url>
 				<pageTitle />
-				<pageIdAction>55</pageIdAction>
+				<pageIdAction>56</pageIdAction>
 				
-				<pageId>68</pageId>
+				<pageId>89</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>Generation Time</customVariablePageName1>
@@ -2444,7 +2444,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>43</idVisit>
+		<idVisit>58</idVisit>
 		<visitIp>173.5.0.0</visitIp>
 		
 		<actionDetails>
@@ -2453,7 +2453,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>60</goalPageId>
+				<goalPageId>81</goalPageId>
 				
 				<url>http://hello.example.com/hello/world/6,681965</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -2463,9 +2463,9 @@
 				<type>action</type>
 				<url>http://hello.example.com/hello/world/6,681965</url>
 				<pageTitle>404/URL = http%3A%2F%2Fhello.example.com%2Fhello%2Fworld%2F6%2C681965</pageTitle>
-				<pageIdAction>59</pageIdAction>
+				<pageIdAction>60</pageIdAction>
 				
-				<pageId>60</pageId>
+				<pageId>81</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -2556,7 +2556,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>44</idVisit>
+		<idVisit>59</idVisit>
 		<visitIp>173.5.0.0</visitIp>
 		
 		<actionDetails>
@@ -2564,9 +2564,9 @@
 				<type>action</type>
 				<url>http://hello.example.com/hello/world/6,681965</url>
 				<pageTitle>404/URL = http%3A%2F%2Fhello.example.com%2Fhello%2Fworld%2F6%2C681965</pageTitle>
-				<pageIdAction>59</pageIdAction>
+				<pageIdAction>60</pageIdAction>
 				
-				<pageId>70</pageId>
+				<pageId>91</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>Generation Time</customVariablePageName1>
@@ -2592,7 +2592,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>61</goalPageId>
+				<goalPageId>82</goalPageId>
 				
 				<url>http://hello.example.com/hello/from/another/world/6,681965</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -2602,9 +2602,9 @@
 				<type>action</type>
 				<url>http://hello.example.com/hello/from/another/world/6,681965</url>
 				<pageTitle />
-				<pageIdAction>60</pageIdAction>
+				<pageIdAction>61</pageIdAction>
 				
-				<pageId>61</pageId>
+				<pageId>82</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -2695,7 +2695,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>50</idVisit>
+		<idVisit>65</idVisit>
 		<visitIp>70.95.32.0</visitIp>
 		
 		<actionDetails>
@@ -2704,7 +2704,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>69</goalPageId>
+				<goalPageId>90</goalPageId>
 				
 				<url>http://example.hello.com/Topic/hw43061</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -2714,9 +2714,9 @@
 				<type>action</type>
 				<url>http://example.hello.com/Topic/hw43061</url>
 				<pageTitle>301/URL = http%3A%2F%2Fexample.hello.com%2FTopic%2Fhw43061</pageTitle>
-				<pageIdAction>57</pageIdAction>
+				<pageIdAction>58</pageIdAction>
 				
-				<pageId>69</pageId>
+				<pageId>90</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>Generation Time</customVariablePageName1>
@@ -3090,7 +3090,7 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>49</idVisit>
+		<idVisit>64</idVisit>
 		<visitIp>72.45.67.32</visitIp>
 		
 		<actionDetails>
@@ -3099,7 +3099,7 @@
 				<goalName>all</goalName>
 				<goalId>1</goalId>
 				<revenue>5</revenue>
-				<goalPageId>67</goalPageId>
+				<goalPageId>88</goalPageId>
 				
 				<url>http://piwik.net/</url>
 				<icon>plugins/Morpheus/images/goal.png</icon>
@@ -3111,7 +3111,7 @@
 				<pageTitle />
 				<pageIdAction>5</pageIdAction>
 				
-				<pageId>67</pageId>
+				<pageId>88</pageId>
 				<customVariables>
 					<row>
 						<customVariablePageName1>HTTP-code</customVariablePageName1>
@@ -3202,16 +3202,16 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>48</idVisit>
+		<idVisit>63</idVisit>
 		<visitIp>192.0.2.222</visitIp>
 		
 		<actionDetails>
 			<row>
 				<type>event</type>
 				<url>http://piwik.net/shqshne4jdp4b6.cloudfront.net/cfx/st​?key=value</url>
-				<pageIdAction>65</pageIdAction>
+				<pageIdAction>66</pageIdAction>
 				
-				<pageId>66</pageId>
+				<pageId>87</pageId>
 				<eventCategory>cloudfront_rtmp</eventCategory>
 				<eventAction>play</eventAction>
 				<customVariables>
@@ -3304,16 +3304,16 @@
 	</row>
 	<row>
 		<idSite>1</idSite>
-		<idVisit>47</idVisit>
+		<idVisit>62</idVisit>
 		<visitIp>192.0.2.147</visitIp>
 		
 		<actionDetails>
 			<row>
 				<type>event</type>
 				<url>http://piwik.net/shqshne4jdp4b6.cloudfront.net/cfx/st​?key=value</url>
-				<pageIdAction>65</pageIdAction>
+				<pageIdAction>66</pageIdAction>
 				
-				<pageId>65</pageId>
+				<pageId>86</pageId>
 				<eventCategory>cloudfront_rtmp</eventCategory>
 				<eventAction>connect</eventAction>
 				<customVariables>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getAll_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getAll_month.xml
index 5f6148c689d9c89a89e30f85a39b00c09fb0df6d..071b803478da23946164f6b441db3240fe758de6 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getAll_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__MultiSites.getAll_month.xml
@@ -14,6 +14,20 @@
 		<group />
 		<main_url>http://piwik.net</main_url>
 	</row>
+	<row>
+		<label>Piwik test three</label>
+		<nb_visits>3</nb_visits>
+		<nb_actions>5</nb_actions>
+		<nb_pageviews>5</nb_pageviews>
+		<revenue>0</revenue>
+		<visits_evolution>100%</visits_evolution>
+		<actions_evolution>100%</actions_evolution>
+		<pageviews_evolution>100%</pageviews_evolution>
+		<revenue_evolution>0%</revenue_evolution>
+		<idsite>3</idsite>
+		<group />
+		<main_url>http://example-site-three.com</main_url>
+	</row>
 	<row>
 		<label>Piwik test two</label>
 		<nb_visits>1</nb_visits>
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getDownload_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getDownload_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getDownload_range.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result />
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getDownloads_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getDownloads_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a78a95e97b3bccceadf6ff6f0013313db99c3e10
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getDownloads_range.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+	<row>
+		<label>builds.piwik.org</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<exit_nb_visits>1</exit_nb_visits>
+		<subtable>
+			<row>
+				<label>/latest.zip</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<exit_nb_visits>1</exit_nb_visits>
+				<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+				<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+				<url>http://builds.piwik.org/latest.zip</url>
+			</row>
+		</subtable>
+	</row>
+</result>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getEntryPageTitles_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getEntryPageTitles_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..701633ee713a509c6bde7dbfa45743172a2a0e3e
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getEntryPageTitles_range.xml
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+	<row>
+		<label> Liberate Web Analytics - Analytics - Piwik</label>
+		<nb_visits>4</nb_visits>
+		<nb_hits>4</nb_hits>
+		<sum_time_spent>34</sum_time_spent>
+		<nb_hits_with_time_generation>3</nb_hits_with_time_generation>
+		<min_time_generation>0.058</min_time_generation>
+		<max_time_generation>0.292</max_time_generation>
+		<entry_nb_visits>4</entry_nb_visits>
+		<entry_nb_actions>7</entry_nb_actions>
+		<entry_sum_visit_length>43</entry_sum_visit_length>
+		<entry_bounce_count>2</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>4</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>4</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>2</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>9</avg_time_on_page>
+		<bounce_rate>50%</bounce_rate>
+		<exit_rate>50%</exit_rate>
+		<avg_time_generation>0.177</avg_time_generation>
+	</row>
+	<row>
+		<label> Log Analytics - Analytics - Piwik</label>
+		<nb_visits>2</nb_visits>
+		<nb_hits>2</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.145</min_time_generation>
+		<max_time_generation>0.145</max_time_generation>
+		<entry_nb_visits>2</entry_nb_visits>
+		<entry_nb_actions>2</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>2</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>2</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>2</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.145</avg_time_generation>
+	</row>
+	<row>
+		<label> Changelog Archive - Analytics - Piwik</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>79</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>2</entry_nb_actions>
+		<entry_sum_visit_length>80</entry_sum_visit_length>
+		<entry_bounce_count>0</entry_bounce_count>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<avg_time_on_page>79</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>0%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+	</row>
+	<row>
+		<label>demo.piwik.org</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.413</min_time_generation>
+		<max_time_generation>0.413</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.413</avg_time_generation>
+		<subtable>
+			<row>
+				<label> Piwik Forums - Piwik › Web Analytics Reports</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+				<min_time_generation>0.413</min_time_generation>
+				<max_time_generation>0.413</max_time_generation>
+				<entry_nb_visits>1</entry_nb_visits>
+				<entry_nb_actions>1</entry_nb_actions>
+				<entry_sum_visit_length>0</entry_sum_visit_length>
+				<entry_bounce_count>1</entry_bounce_count>
+				<exit_nb_visits>1</exit_nb_visits>
+				<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+				<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+				<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>100%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<avg_time_generation>0.413</avg_time_generation>
+			</row>
+		</subtable>
+	</row>
+	<row>
+		<label> Hello Installing Piwik - Analytics - Piwik</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.134</min_time_generation>
+		<max_time_generation>0.134</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.134</avg_time_generation>
+	</row>
+	<row>
+		<label> incredible title!</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+	</row>
+	<row>
+		<label> Integrate Piwik into your Rails Application - Analytics - Piwik</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.391</min_time_generation>
+		<max_time_generation>0.391</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.391</avg_time_generation>
+	</row>
+	<row>
+		<label> Looking at Electronics &amp; Cameras page with a page level custom variable</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>2</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>3</entry_nb_actions>
+		<entry_sum_visit_length>1</entry_sum_visit_length>
+		<entry_bounce_count>0</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+	</row>
+	<row>
+		<label> Piwik 2.1 — Massive Performance and Reliability Improvements - Analytics - Piwik</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.119</min_time_generation>
+		<max_time_generation>0.119</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.119</avg_time_generation>
+	</row>
+	<row>
+		<label> Piwik Forums</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+	</row>
+</result>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getEntryPageUrls_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getEntryPageUrls_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1e49db6795cdf17bfe497f7650d87a674fc18b74
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getEntryPageUrls_range.xml
@@ -0,0 +1,418 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+	<row>
+		<label>/index</label>
+		<nb_visits>4</nb_visits>
+		<nb_hits>4</nb_hits>
+		<sum_time_spent>34</sum_time_spent>
+		<nb_hits_with_time_generation>3</nb_hits_with_time_generation>
+		<min_time_generation>0.058</min_time_generation>
+		<max_time_generation>0.292</max_time_generation>
+		<entry_nb_visits>4</entry_nb_visits>
+		<entry_nb_actions>7</entry_nb_actions>
+		<entry_sum_visit_length>43</entry_sum_visit_length>
+		<entry_bounce_count>2</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>4</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>4</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>2</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>9</avg_time_on_page>
+		<bounce_rate>50%</bounce_rate>
+		<exit_rate>50%</exit_rate>
+		<avg_time_generation>0.177</avg_time_generation>
+		<url>http://piwik.org/</url>
+		<segment>entryPageUrl==http%3A%2F%2Fpiwik.org%2F</segment>
+	</row>
+	<row>
+		<label>/index.htm</label>
+		<nb_visits>2</nb_visits>
+		<nb_hits>4</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<entry_nb_visits>2</entry_nb_visits>
+		<entry_nb_actions>4</entry_nb_actions>
+		<entry_sum_visit_length>1</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>50%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+		<url>http://example.org/index.htm</url>
+		<segment>entryPageUrl==http%3A%2F%2Fexample.org%2Findex.htm</segment>
+	</row>
+	<row>
+		<label>blog</label>
+		<nb_visits>2</nb_visits>
+		<nb_hits>2</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>2</nb_hits_with_time_generation>
+		<min_time_generation>0.119</min_time_generation>
+		<max_time_generation>0.391</max_time_generation>
+		<entry_nb_visits>2</entry_nb_visits>
+		<entry_nb_actions>2</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>2</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.255</avg_time_generation>
+		<subtable>
+			<row>
+				<label>2012</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+				<min_time_generation>0.391</min_time_generation>
+				<max_time_generation>0.391</max_time_generation>
+				<entry_nb_visits>1</entry_nb_visits>
+				<entry_nb_actions>1</entry_nb_actions>
+				<entry_sum_visit_length>0</entry_sum_visit_length>
+				<entry_bounce_count>1</entry_bounce_count>
+				<exit_nb_visits>1</exit_nb_visits>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>100%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<avg_time_generation>0.391</avg_time_generation>
+				<subtable>
+					<row>
+						<label>10</label>
+						<nb_visits>1</nb_visits>
+						<nb_hits>1</nb_hits>
+						<sum_time_spent>0</sum_time_spent>
+						<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+						<min_time_generation>0.391</min_time_generation>
+						<max_time_generation>0.391</max_time_generation>
+						<entry_nb_visits>1</entry_nb_visits>
+						<entry_nb_actions>1</entry_nb_actions>
+						<entry_sum_visit_length>0</entry_sum_visit_length>
+						<entry_bounce_count>1</entry_bounce_count>
+						<exit_nb_visits>1</exit_nb_visits>
+						<avg_time_on_page>0</avg_time_on_page>
+						<bounce_rate>100%</bounce_rate>
+						<exit_rate>100%</exit_rate>
+						<avg_time_generation>0.391</avg_time_generation>
+						<subtable>
+							<row>
+								<label>integrate-piwik-into-your-rails-application</label>
+								<nb_visits>1</nb_visits>
+								<nb_hits>1</nb_hits>
+								<sum_time_spent>0</sum_time_spent>
+								<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+								<min_time_generation>0.391</min_time_generation>
+								<max_time_generation>0.391</max_time_generation>
+								<entry_nb_visits>1</entry_nb_visits>
+								<entry_nb_actions>1</entry_nb_actions>
+								<entry_sum_visit_length>0</entry_sum_visit_length>
+								<entry_bounce_count>1</entry_bounce_count>
+								<exit_nb_visits>1</exit_nb_visits>
+								<avg_time_on_page>0</avg_time_on_page>
+								<bounce_rate>100%</bounce_rate>
+								<exit_rate>100%</exit_rate>
+								<avg_time_generation>0.391</avg_time_generation>
+								<subtable>
+									<row>
+										<label>/index</label>
+										<nb_visits>1</nb_visits>
+										<nb_hits>1</nb_hits>
+										<sum_time_spent>0</sum_time_spent>
+										<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+										<min_time_generation>0.391</min_time_generation>
+										<max_time_generation>0.391</max_time_generation>
+										<entry_nb_visits>1</entry_nb_visits>
+										<entry_nb_actions>1</entry_nb_actions>
+										<entry_sum_visit_length>0</entry_sum_visit_length>
+										<entry_bounce_count>1</entry_bounce_count>
+										<exit_nb_visits>1</exit_nb_visits>
+										<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+										<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+										<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+										<avg_time_on_page>0</avg_time_on_page>
+										<bounce_rate>100%</bounce_rate>
+										<exit_rate>100%</exit_rate>
+										<avg_time_generation>0.391</avg_time_generation>
+										<url>http://piwik.org/blog/2012/10/integrate-piwik-into-your-rails-application/</url>
+									</row>
+								</subtable>
+							</row>
+						</subtable>
+					</row>
+				</subtable>
+			</row>
+			<row>
+				<label>2014</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+				<min_time_generation>0.119</min_time_generation>
+				<max_time_generation>0.119</max_time_generation>
+				<entry_nb_visits>1</entry_nb_visits>
+				<entry_nb_actions>1</entry_nb_actions>
+				<entry_sum_visit_length>0</entry_sum_visit_length>
+				<entry_bounce_count>1</entry_bounce_count>
+				<exit_nb_visits>1</exit_nb_visits>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>100%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<avg_time_generation>0.119</avg_time_generation>
+				<subtable>
+					<row>
+						<label>03</label>
+						<nb_visits>1</nb_visits>
+						<nb_hits>1</nb_hits>
+						<sum_time_spent>0</sum_time_spent>
+						<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+						<min_time_generation>0.119</min_time_generation>
+						<max_time_generation>0.119</max_time_generation>
+						<entry_nb_visits>1</entry_nb_visits>
+						<entry_nb_actions>1</entry_nb_actions>
+						<entry_sum_visit_length>0</entry_sum_visit_length>
+						<entry_bounce_count>1</entry_bounce_count>
+						<exit_nb_visits>1</exit_nb_visits>
+						<avg_time_on_page>0</avg_time_on_page>
+						<bounce_rate>100%</bounce_rate>
+						<exit_rate>100%</exit_rate>
+						<avg_time_generation>0.119</avg_time_generation>
+						<subtable>
+							<row>
+								<label>piwik-2-1-massive-performance-reliability-improvements</label>
+								<nb_visits>1</nb_visits>
+								<nb_hits>1</nb_hits>
+								<sum_time_spent>0</sum_time_spent>
+								<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+								<min_time_generation>0.119</min_time_generation>
+								<max_time_generation>0.119</max_time_generation>
+								<entry_nb_visits>1</entry_nb_visits>
+								<entry_nb_actions>1</entry_nb_actions>
+								<entry_sum_visit_length>0</entry_sum_visit_length>
+								<entry_bounce_count>1</entry_bounce_count>
+								<exit_nb_visits>1</exit_nb_visits>
+								<avg_time_on_page>0</avg_time_on_page>
+								<bounce_rate>100%</bounce_rate>
+								<exit_rate>100%</exit_rate>
+								<avg_time_generation>0.119</avg_time_generation>
+								<subtable>
+									<row>
+										<label>/index</label>
+										<nb_visits>1</nb_visits>
+										<nb_hits>1</nb_hits>
+										<sum_time_spent>0</sum_time_spent>
+										<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+										<min_time_generation>0.119</min_time_generation>
+										<max_time_generation>0.119</max_time_generation>
+										<entry_nb_visits>1</entry_nb_visits>
+										<entry_nb_actions>1</entry_nb_actions>
+										<entry_sum_visit_length>0</entry_sum_visit_length>
+										<entry_bounce_count>1</entry_bounce_count>
+										<exit_nb_visits>1</exit_nb_visits>
+										<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+										<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+										<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+										<avg_time_on_page>0</avg_time_on_page>
+										<bounce_rate>100%</bounce_rate>
+										<exit_rate>100%</exit_rate>
+										<avg_time_generation>0.119</avg_time_generation>
+										<url>http://piwik.org/blog/2014/03/piwik-2-1-massive-performance-reliability-improvements/</url>
+									</row>
+								</subtable>
+							</row>
+						</subtable>
+					</row>
+				</subtable>
+			</row>
+		</subtable>
+	</row>
+	<row>
+		<label>log-analytics</label>
+		<nb_visits>2</nb_visits>
+		<nb_hits>2</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.145</min_time_generation>
+		<max_time_generation>0.145</max_time_generation>
+		<entry_nb_visits>2</entry_nb_visits>
+		<entry_nb_actions>2</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>2</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.145</avg_time_generation>
+		<subtable>
+			<row>
+				<label>/index</label>
+				<nb_visits>2</nb_visits>
+				<nb_hits>2</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+				<min_time_generation>0.145</min_time_generation>
+				<max_time_generation>0.145</max_time_generation>
+				<entry_nb_visits>2</entry_nb_visits>
+				<entry_nb_actions>2</entry_nb_actions>
+				<entry_sum_visit_length>0</entry_sum_visit_length>
+				<entry_bounce_count>2</entry_bounce_count>
+				<exit_nb_visits>2</exit_nb_visits>
+				<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
+				<sum_daily_entry_nb_uniq_visitors>2</sum_daily_entry_nb_uniq_visitors>
+				<sum_daily_exit_nb_uniq_visitors>2</sum_daily_exit_nb_uniq_visitors>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>100%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<avg_time_generation>0.145</avg_time_generation>
+				<url>http://piwik.org/log-analytics/</url>
+			</row>
+		</subtable>
+	</row>
+	<row>
+		<label>/index.php?module=CoreHome&amp;action=index&amp;date=yesterday&amp;period=day&amp;idSite=7</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.413</min_time_generation>
+		<max_time_generation>0.413</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.413</avg_time_generation>
+		<url>http://demo.piwik.org/index.php?module=CoreHome&amp;action=index&amp;date=yesterday&amp;period=day&amp;idSite=7</url>
+		<segment>entryPageUrl==http%3A%2F%2Fdemo.piwik.org%2Findex.php%3Fmodule%3DCoreHome%26action%3Dindex%26date%3Dyesterday%26period%3Dday%26idSite%3D7</segment>
+	</row>
+	<row>
+		<label>/register.php?0,approve=9a94a02145599</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+		<url>http://forum.piwik.org/register.php?0,approve=9a94a02145599</url>
+		<segment>entryPageUrl==http%3A%2F%2Fforum.piwik.org%2Fregister.php%3F0%2Capprove%3D9a94a02145599</segment>
+	</row>
+	<row>
+		<label>changelog</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>79</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation>0</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>2</entry_nb_actions>
+		<entry_sum_visit_length>80</entry_sum_visit_length>
+		<entry_bounce_count>0</entry_bounce_count>
+		<avg_time_on_page>79</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>0%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+		<subtable>
+			<row>
+				<label>/index</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>79</sum_time_spent>
+				<entry_nb_visits>1</entry_nb_visits>
+				<entry_nb_actions>2</entry_nb_actions>
+				<entry_sum_visit_length>80</entry_sum_visit_length>
+				<entry_bounce_count>0</entry_bounce_count>
+				<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+				<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+				<avg_time_on_page>79</avg_time_on_page>
+				<bounce_rate>0%</bounce_rate>
+				<exit_rate>0%</exit_rate>
+				<url>http://piwik.org/changelog/</url>
+			</row>
+		</subtable>
+	</row>
+	<row>
+		<label>docs</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.134</min_time_generation>
+		<max_time_generation>0.134</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.134</avg_time_generation>
+		<subtable>
+			<row>
+				<label>installation</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+				<min_time_generation>0.134</min_time_generation>
+				<max_time_generation>0.134</max_time_generation>
+				<entry_nb_visits>1</entry_nb_visits>
+				<entry_nb_actions>1</entry_nb_actions>
+				<entry_sum_visit_length>0</entry_sum_visit_length>
+				<entry_bounce_count>1</entry_bounce_count>
+				<exit_nb_visits>1</exit_nb_visits>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>100%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<avg_time_generation>0.134</avg_time_generation>
+				<subtable>
+					<row>
+						<label>/index</label>
+						<nb_visits>1</nb_visits>
+						<nb_hits>1</nb_hits>
+						<sum_time_spent>0</sum_time_spent>
+						<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+						<min_time_generation>0.134</min_time_generation>
+						<max_time_generation>0.134</max_time_generation>
+						<entry_nb_visits>1</entry_nb_visits>
+						<entry_nb_actions>1</entry_nb_actions>
+						<entry_sum_visit_length>0</entry_sum_visit_length>
+						<entry_bounce_count>1</entry_bounce_count>
+						<exit_nb_visits>1</exit_nb_visits>
+						<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+						<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+						<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+						<avg_time_on_page>0</avg_time_on_page>
+						<bounce_rate>100%</bounce_rate>
+						<exit_rate>100%</exit_rate>
+						<avg_time_generation>0.134</avg_time_generation>
+						<url>http://piwik.org/docs/installation/</url>
+					</row>
+				</subtable>
+			</row>
+		</subtable>
+	</row>
+</result>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getExitPageTitles_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getExitPageTitles_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cb5e27024c7512ff9bc5773761607925df379232
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getExitPageTitles_range.xml
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+	<row>
+		<label> Liberate Web Analytics - Analytics - Piwik</label>
+		<nb_visits>4</nb_visits>
+		<nb_hits>4</nb_hits>
+		<sum_time_spent>34</sum_time_spent>
+		<nb_hits_with_time_generation>3</nb_hits_with_time_generation>
+		<min_time_generation>0.058</min_time_generation>
+		<max_time_generation>0.292</max_time_generation>
+		<entry_nb_visits>4</entry_nb_visits>
+		<entry_nb_actions>7</entry_nb_actions>
+		<entry_sum_visit_length>43</entry_sum_visit_length>
+		<entry_bounce_count>2</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>4</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>4</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>2</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>9</avg_time_on_page>
+		<bounce_rate>50%</bounce_rate>
+		<exit_rate>50%</exit_rate>
+		<avg_time_generation>0.177</avg_time_generation>
+	</row>
+	<row>
+		<label> Log Analytics - Analytics - Piwik</label>
+		<nb_visits>2</nb_visits>
+		<nb_hits>2</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.145</min_time_generation>
+		<max_time_generation>0.145</max_time_generation>
+		<entry_nb_visits>2</entry_nb_visits>
+		<entry_nb_actions>2</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>2</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>2</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>2</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.145</avg_time_generation>
+	</row>
+	<row>
+		<label> Contact the Piwik team - Analytics - Piwik</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+	</row>
+	<row>
+		<label>demo.piwik.org</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.413</min_time_generation>
+		<max_time_generation>0.413</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.413</avg_time_generation>
+		<subtable>
+			<row>
+				<label> Piwik Forums - Piwik › Web Analytics Reports</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+				<min_time_generation>0.413</min_time_generation>
+				<max_time_generation>0.413</max_time_generation>
+				<entry_nb_visits>1</entry_nb_visits>
+				<entry_nb_actions>1</entry_nb_actions>
+				<entry_sum_visit_length>0</entry_sum_visit_length>
+				<entry_bounce_count>1</entry_bounce_count>
+				<exit_nb_visits>1</exit_nb_visits>
+				<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+				<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+				<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>100%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<avg_time_generation>0.413</avg_time_generation>
+			</row>
+		</subtable>
+	</row>
+	<row>
+		<label> Download - Analytics - Piwik</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>7</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.113</min_time_generation>
+		<max_time_generation>0.113</max_time_generation>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>7</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.113</avg_time_generation>
+	</row>
+	<row>
+		<label> Hello Installing Piwik - Analytics - Piwik</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.134</min_time_generation>
+		<max_time_generation>0.134</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.134</avg_time_generation>
+	</row>
+	<row>
+		<label> incredible title!</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+	</row>
+	<row>
+		<label> Integrate Piwik into your Rails Application - Analytics - Piwik</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.391</min_time_generation>
+		<max_time_generation>0.391</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.391</avg_time_generation>
+	</row>
+	<row>
+		<label> Looking at Electronics &amp; Cameras page with a page level custom variable</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>2</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>3</entry_nb_actions>
+		<entry_sum_visit_length>1</entry_sum_visit_length>
+		<entry_bounce_count>0</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+	</row>
+	<row>
+		<label> Piwik 2.1 — Massive Performance and Reliability Improvements - Analytics - Piwik</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.119</min_time_generation>
+		<max_time_generation>0.119</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.119</avg_time_generation>
+	</row>
+	<row>
+		<label> Piwik Forums</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+	</row>
+	<row>
+		<label> What is Piwik? - Analytics - Piwik</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+	</row>
+</result>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getExitPageUrls_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getExitPageUrls_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2b3103a1a23059c06452d925e640c2b7c3f2ab65
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getExitPageUrls_range.xml
@@ -0,0 +1,441 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+	<row>
+		<label>/index</label>
+		<nb_visits>4</nb_visits>
+		<nb_hits>4</nb_hits>
+		<sum_time_spent>34</sum_time_spent>
+		<nb_hits_with_time_generation>3</nb_hits_with_time_generation>
+		<min_time_generation>0.058</min_time_generation>
+		<max_time_generation>0.292</max_time_generation>
+		<entry_nb_visits>4</entry_nb_visits>
+		<entry_nb_actions>7</entry_nb_actions>
+		<entry_sum_visit_length>43</entry_sum_visit_length>
+		<entry_bounce_count>2</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>4</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>4</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>2</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>9</avg_time_on_page>
+		<bounce_rate>50%</bounce_rate>
+		<exit_rate>50%</exit_rate>
+		<avg_time_generation>0.177</avg_time_generation>
+		<url>http://piwik.org/</url>
+		<segment>exitPageUrl==http%3A%2F%2Fpiwik.org%2F</segment>
+	</row>
+	<row>
+		<label>/index.htm</label>
+		<nb_visits>2</nb_visits>
+		<nb_hits>4</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<entry_nb_visits>2</entry_nb_visits>
+		<entry_nb_actions>4</entry_nb_actions>
+		<entry_sum_visit_length>1</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>50%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+		<url>http://example.org/index.htm</url>
+		<segment>exitPageUrl==http%3A%2F%2Fexample.org%2Findex.htm</segment>
+	</row>
+	<row>
+		<label>blog</label>
+		<nb_visits>2</nb_visits>
+		<nb_hits>2</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>2</nb_hits_with_time_generation>
+		<min_time_generation>0.119</min_time_generation>
+		<max_time_generation>0.391</max_time_generation>
+		<entry_nb_visits>2</entry_nb_visits>
+		<entry_nb_actions>2</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>2</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.255</avg_time_generation>
+		<subtable>
+			<row>
+				<label>2012</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+				<min_time_generation>0.391</min_time_generation>
+				<max_time_generation>0.391</max_time_generation>
+				<entry_nb_visits>1</entry_nb_visits>
+				<entry_nb_actions>1</entry_nb_actions>
+				<entry_sum_visit_length>0</entry_sum_visit_length>
+				<entry_bounce_count>1</entry_bounce_count>
+				<exit_nb_visits>1</exit_nb_visits>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>100%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<avg_time_generation>0.391</avg_time_generation>
+				<subtable>
+					<row>
+						<label>10</label>
+						<nb_visits>1</nb_visits>
+						<nb_hits>1</nb_hits>
+						<sum_time_spent>0</sum_time_spent>
+						<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+						<min_time_generation>0.391</min_time_generation>
+						<max_time_generation>0.391</max_time_generation>
+						<entry_nb_visits>1</entry_nb_visits>
+						<entry_nb_actions>1</entry_nb_actions>
+						<entry_sum_visit_length>0</entry_sum_visit_length>
+						<entry_bounce_count>1</entry_bounce_count>
+						<exit_nb_visits>1</exit_nb_visits>
+						<avg_time_on_page>0</avg_time_on_page>
+						<bounce_rate>100%</bounce_rate>
+						<exit_rate>100%</exit_rate>
+						<avg_time_generation>0.391</avg_time_generation>
+						<subtable>
+							<row>
+								<label>integrate-piwik-into-your-rails-application</label>
+								<nb_visits>1</nb_visits>
+								<nb_hits>1</nb_hits>
+								<sum_time_spent>0</sum_time_spent>
+								<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+								<min_time_generation>0.391</min_time_generation>
+								<max_time_generation>0.391</max_time_generation>
+								<entry_nb_visits>1</entry_nb_visits>
+								<entry_nb_actions>1</entry_nb_actions>
+								<entry_sum_visit_length>0</entry_sum_visit_length>
+								<entry_bounce_count>1</entry_bounce_count>
+								<exit_nb_visits>1</exit_nb_visits>
+								<avg_time_on_page>0</avg_time_on_page>
+								<bounce_rate>100%</bounce_rate>
+								<exit_rate>100%</exit_rate>
+								<avg_time_generation>0.391</avg_time_generation>
+								<subtable>
+									<row>
+										<label>/index</label>
+										<nb_visits>1</nb_visits>
+										<nb_hits>1</nb_hits>
+										<sum_time_spent>0</sum_time_spent>
+										<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+										<min_time_generation>0.391</min_time_generation>
+										<max_time_generation>0.391</max_time_generation>
+										<entry_nb_visits>1</entry_nb_visits>
+										<entry_nb_actions>1</entry_nb_actions>
+										<entry_sum_visit_length>0</entry_sum_visit_length>
+										<entry_bounce_count>1</entry_bounce_count>
+										<exit_nb_visits>1</exit_nb_visits>
+										<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+										<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+										<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+										<avg_time_on_page>0</avg_time_on_page>
+										<bounce_rate>100%</bounce_rate>
+										<exit_rate>100%</exit_rate>
+										<avg_time_generation>0.391</avg_time_generation>
+										<url>http://piwik.org/blog/2012/10/integrate-piwik-into-your-rails-application/</url>
+									</row>
+								</subtable>
+							</row>
+						</subtable>
+					</row>
+				</subtable>
+			</row>
+			<row>
+				<label>2014</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+				<min_time_generation>0.119</min_time_generation>
+				<max_time_generation>0.119</max_time_generation>
+				<entry_nb_visits>1</entry_nb_visits>
+				<entry_nb_actions>1</entry_nb_actions>
+				<entry_sum_visit_length>0</entry_sum_visit_length>
+				<entry_bounce_count>1</entry_bounce_count>
+				<exit_nb_visits>1</exit_nb_visits>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>100%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<avg_time_generation>0.119</avg_time_generation>
+				<subtable>
+					<row>
+						<label>03</label>
+						<nb_visits>1</nb_visits>
+						<nb_hits>1</nb_hits>
+						<sum_time_spent>0</sum_time_spent>
+						<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+						<min_time_generation>0.119</min_time_generation>
+						<max_time_generation>0.119</max_time_generation>
+						<entry_nb_visits>1</entry_nb_visits>
+						<entry_nb_actions>1</entry_nb_actions>
+						<entry_sum_visit_length>0</entry_sum_visit_length>
+						<entry_bounce_count>1</entry_bounce_count>
+						<exit_nb_visits>1</exit_nb_visits>
+						<avg_time_on_page>0</avg_time_on_page>
+						<bounce_rate>100%</bounce_rate>
+						<exit_rate>100%</exit_rate>
+						<avg_time_generation>0.119</avg_time_generation>
+						<subtable>
+							<row>
+								<label>piwik-2-1-massive-performance-reliability-improvements</label>
+								<nb_visits>1</nb_visits>
+								<nb_hits>1</nb_hits>
+								<sum_time_spent>0</sum_time_spent>
+								<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+								<min_time_generation>0.119</min_time_generation>
+								<max_time_generation>0.119</max_time_generation>
+								<entry_nb_visits>1</entry_nb_visits>
+								<entry_nb_actions>1</entry_nb_actions>
+								<entry_sum_visit_length>0</entry_sum_visit_length>
+								<entry_bounce_count>1</entry_bounce_count>
+								<exit_nb_visits>1</exit_nb_visits>
+								<avg_time_on_page>0</avg_time_on_page>
+								<bounce_rate>100%</bounce_rate>
+								<exit_rate>100%</exit_rate>
+								<avg_time_generation>0.119</avg_time_generation>
+								<subtable>
+									<row>
+										<label>/index</label>
+										<nb_visits>1</nb_visits>
+										<nb_hits>1</nb_hits>
+										<sum_time_spent>0</sum_time_spent>
+										<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+										<min_time_generation>0.119</min_time_generation>
+										<max_time_generation>0.119</max_time_generation>
+										<entry_nb_visits>1</entry_nb_visits>
+										<entry_nb_actions>1</entry_nb_actions>
+										<entry_sum_visit_length>0</entry_sum_visit_length>
+										<entry_bounce_count>1</entry_bounce_count>
+										<exit_nb_visits>1</exit_nb_visits>
+										<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+										<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+										<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+										<avg_time_on_page>0</avg_time_on_page>
+										<bounce_rate>100%</bounce_rate>
+										<exit_rate>100%</exit_rate>
+										<avg_time_generation>0.119</avg_time_generation>
+										<url>http://piwik.org/blog/2014/03/piwik-2-1-massive-performance-reliability-improvements/</url>
+									</row>
+								</subtable>
+							</row>
+						</subtable>
+					</row>
+				</subtable>
+			</row>
+		</subtable>
+	</row>
+	<row>
+		<label>log-analytics</label>
+		<nb_visits>2</nb_visits>
+		<nb_hits>2</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.145</min_time_generation>
+		<max_time_generation>0.145</max_time_generation>
+		<entry_nb_visits>2</entry_nb_visits>
+		<entry_nb_actions>2</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>2</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.145</avg_time_generation>
+		<subtable>
+			<row>
+				<label>/index</label>
+				<nb_visits>2</nb_visits>
+				<nb_hits>2</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+				<min_time_generation>0.145</min_time_generation>
+				<max_time_generation>0.145</max_time_generation>
+				<entry_nb_visits>2</entry_nb_visits>
+				<entry_nb_actions>2</entry_nb_actions>
+				<entry_sum_visit_length>0</entry_sum_visit_length>
+				<entry_bounce_count>2</entry_bounce_count>
+				<exit_nb_visits>2</exit_nb_visits>
+				<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
+				<sum_daily_entry_nb_uniq_visitors>2</sum_daily_entry_nb_uniq_visitors>
+				<sum_daily_exit_nb_uniq_visitors>2</sum_daily_exit_nb_uniq_visitors>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>100%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<avg_time_generation>0.145</avg_time_generation>
+				<url>http://piwik.org/log-analytics/</url>
+			</row>
+		</subtable>
+	</row>
+	<row>
+		<label>/index.php?module=CoreHome&amp;action=index&amp;date=yesterday&amp;period=day&amp;idSite=7</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.413</min_time_generation>
+		<max_time_generation>0.413</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.413</avg_time_generation>
+		<url>http://demo.piwik.org/index.php?module=CoreHome&amp;action=index&amp;date=yesterday&amp;period=day&amp;idSite=7</url>
+		<segment>exitPageUrl==http%3A%2F%2Fdemo.piwik.org%2Findex.php%3Fmodule%3DCoreHome%26action%3Dindex%26date%3Dyesterday%26period%3Dday%26idSite%3D7</segment>
+	</row>
+	<row>
+		<label>/register.php?0,approve=9a94a02145599</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+		<url>http://forum.piwik.org/register.php?0,approve=9a94a02145599</url>
+		<segment>exitPageUrl==http%3A%2F%2Fforum.piwik.org%2Fregister.php%3F0%2Capprove%3D9a94a02145599</segment>
+	</row>
+	<row>
+		<label>contact</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation>0</max_time_generation>
+		<exit_nb_visits>1</exit_nb_visits>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+		<subtable>
+			<row>
+				<label>/index</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<exit_nb_visits>1</exit_nb_visits>
+				<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+				<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>0%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<url>http://piwik.org/contact/</url>
+			</row>
+		</subtable>
+	</row>
+	<row>
+		<label>docs</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.134</min_time_generation>
+		<max_time_generation>0.134</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.134</avg_time_generation>
+		<subtable>
+			<row>
+				<label>installation</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+				<min_time_generation>0.134</min_time_generation>
+				<max_time_generation>0.134</max_time_generation>
+				<entry_nb_visits>1</entry_nb_visits>
+				<entry_nb_actions>1</entry_nb_actions>
+				<entry_sum_visit_length>0</entry_sum_visit_length>
+				<entry_bounce_count>1</entry_bounce_count>
+				<exit_nb_visits>1</exit_nb_visits>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>100%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<avg_time_generation>0.134</avg_time_generation>
+				<subtable>
+					<row>
+						<label>/index</label>
+						<nb_visits>1</nb_visits>
+						<nb_hits>1</nb_hits>
+						<sum_time_spent>0</sum_time_spent>
+						<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+						<min_time_generation>0.134</min_time_generation>
+						<max_time_generation>0.134</max_time_generation>
+						<entry_nb_visits>1</entry_nb_visits>
+						<entry_nb_actions>1</entry_nb_actions>
+						<entry_sum_visit_length>0</entry_sum_visit_length>
+						<entry_bounce_count>1</entry_bounce_count>
+						<exit_nb_visits>1</exit_nb_visits>
+						<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+						<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+						<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+						<avg_time_on_page>0</avg_time_on_page>
+						<bounce_rate>100%</bounce_rate>
+						<exit_rate>100%</exit_rate>
+						<avg_time_generation>0.134</avg_time_generation>
+						<url>http://piwik.org/docs/installation/</url>
+					</row>
+				</subtable>
+			</row>
+		</subtable>
+	</row>
+	<row>
+		<label>what-is-piwisk</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation>0</max_time_generation>
+		<exit_nb_visits>1</exit_nb_visits>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+		<subtable>
+			<row>
+				<label>/index</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<exit_nb_visits>1</exit_nb_visits>
+				<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+				<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>0%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<url>http://piwik.org/what-is-piwisk/</url>
+			</row>
+		</subtable>
+	</row>
+</result>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getOutlink_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getOutlink_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getOutlink_range.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result />
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getOutlinks_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getOutlinks_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d03b4e81bb3acc9de1d2d6fc68884275ea851933
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getOutlinks_range.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+	<row>
+		<label>demo.piwik.org</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<subtable>
+			<row>
+				<label>/</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<entry_nb_visits>1</entry_nb_visits>
+				<entry_nb_actions>1</entry_nb_actions>
+				<entry_sum_visit_length>0</entry_sum_visit_length>
+				<entry_bounce_count>1</entry_bounce_count>
+				<exit_nb_visits>1</exit_nb_visits>
+				<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+				<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+				<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+				<url>http://demo.piwik.org/</url>
+			</row>
+		</subtable>
+	</row>
+</result>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageTitle_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageTitle_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageTitle_range.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result />
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageTitlesFollowingSiteSearch_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageTitlesFollowingSiteSearch_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageTitlesFollowingSiteSearch_range.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result />
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageTitles_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageTitles_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7d4f318e5ea45b3d23b5f8ed3616639efa10a7da
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageTitles_range.xml
@@ -0,0 +1,293 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+	<row>
+		<label> Liberate Web Analytics - Analytics - Piwik</label>
+		<nb_visits>4</nb_visits>
+		<nb_hits>4</nb_hits>
+		<sum_time_spent>34</sum_time_spent>
+		<nb_hits_with_time_generation>3</nb_hits_with_time_generation>
+		<min_time_generation>0.058</min_time_generation>
+		<max_time_generation>0.292</max_time_generation>
+		<entry_nb_visits>4</entry_nb_visits>
+		<entry_nb_actions>7</entry_nb_actions>
+		<entry_sum_visit_length>43</entry_sum_visit_length>
+		<entry_bounce_count>2</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>4</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>4</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>2</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>9</avg_time_on_page>
+		<bounce_rate>50%</bounce_rate>
+		<exit_rate>50%</exit_rate>
+		<avg_time_generation>0.177</avg_time_generation>
+	</row>
+	<row>
+		<label> Log Analytics - Analytics - Piwik</label>
+		<nb_visits>2</nb_visits>
+		<nb_hits>2</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.145</min_time_generation>
+		<max_time_generation>0.145</max_time_generation>
+		<entry_nb_visits>2</entry_nb_visits>
+		<entry_nb_actions>2</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>2</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>2</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>2</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.145</avg_time_generation>
+	</row>
+	<row>
+		<label> Another Product page with no category</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>0%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+	</row>
+	<row>
+		<label> Changelog Archive - Analytics - Piwik</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>79</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>2</entry_nb_actions>
+		<entry_sum_visit_length>80</entry_sum_visit_length>
+		<entry_bounce_count>0</entry_bounce_count>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<avg_time_on_page>79</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>0%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+	</row>
+	<row>
+		<label> Contact the Piwik team - Analytics - Piwik</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+	</row>
+	<row>
+		<label>demo.piwik.org</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.413</min_time_generation>
+		<max_time_generation>0.413</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.413</avg_time_generation>
+		<subtable>
+			<row>
+				<label> Piwik Forums - Piwik › Web Analytics Reports</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+				<min_time_generation>0.413</min_time_generation>
+				<max_time_generation>0.413</max_time_generation>
+				<entry_nb_visits>1</entry_nb_visits>
+				<entry_nb_actions>1</entry_nb_actions>
+				<entry_sum_visit_length>0</entry_sum_visit_length>
+				<entry_bounce_count>1</entry_bounce_count>
+				<exit_nb_visits>1</exit_nb_visits>
+				<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+				<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+				<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>100%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<avg_time_generation>0.413</avg_time_generation>
+			</row>
+		</subtable>
+	</row>
+	<row>
+		<label> Download - Analytics - Piwik</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>7</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.113</min_time_generation>
+		<max_time_generation>0.113</max_time_generation>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>7</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.113</avg_time_generation>
+	</row>
+	<row>
+		<label> Hello Installing Piwik - Analytics - Piwik</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.134</min_time_generation>
+		<max_time_generation>0.134</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.134</avg_time_generation>
+	</row>
+	<row>
+		<label> incredible title!</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+	</row>
+	<row>
+		<label> Integrate Piwik into your Rails Application - Analytics - Piwik</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.391</min_time_generation>
+		<max_time_generation>0.391</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.391</avg_time_generation>
+	</row>
+	<row>
+		<label> Looking at Electronics &amp; Cameras page with a page level custom variable</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>2</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>3</entry_nb_actions>
+		<entry_sum_visit_length>1</entry_sum_visit_length>
+		<entry_bounce_count>0</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+	</row>
+	<row>
+		<label> Piwik 2.1 — Massive Performance and Reliability Improvements - Analytics - Piwik</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.119</min_time_generation>
+		<max_time_generation>0.119</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.119</avg_time_generation>
+	</row>
+	<row>
+		<label> Piwik Forums</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+	</row>
+	<row>
+		<label> What is Piwik? - Analytics - Piwik</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+	</row>
+</result>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageUrl_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageUrl_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b25b53ebb54eacfa02dd9e10550d9feab66db15e
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageUrl_range.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+	<row>
+		<label>/index.htm</label>
+		<nb_visits>2</nb_visits>
+		<nb_hits>4</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<entry_nb_visits>2</entry_nb_visits>
+		<entry_nb_actions>4</entry_nb_actions>
+		<entry_sum_visit_length>1</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>50%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<url>http://example.org/index.htm</url>
+	</row>
+</result>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageUrlsFollowingSiteSearch_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageUrlsFollowingSiteSearch_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageUrlsFollowingSiteSearch_range.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result />
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageUrls_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageUrls_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..33738e28ff12ee2e74340680f477c6b6431b11bf
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getPageUrls_range.xml
@@ -0,0 +1,506 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+	<row>
+		<label>/index</label>
+		<nb_visits>4</nb_visits>
+		<nb_hits>4</nb_hits>
+		<sum_time_spent>34</sum_time_spent>
+		<nb_hits_with_time_generation>3</nb_hits_with_time_generation>
+		<min_time_generation>0.058</min_time_generation>
+		<max_time_generation>0.292</max_time_generation>
+		<entry_nb_visits>4</entry_nb_visits>
+		<entry_nb_actions>7</entry_nb_actions>
+		<entry_sum_visit_length>43</entry_sum_visit_length>
+		<entry_bounce_count>2</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>4</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>4</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>2</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>9</avg_time_on_page>
+		<bounce_rate>50%</bounce_rate>
+		<exit_rate>50%</exit_rate>
+		<avg_time_generation>0.177</avg_time_generation>
+		<url>http://piwik.org/</url>
+		<segment>pageUrl==http%3A%2F%2Fpiwik.org%2F</segment>
+	</row>
+	<row>
+		<label>/index.htm</label>
+		<nb_visits>2</nb_visits>
+		<nb_hits>4</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<entry_nb_visits>2</entry_nb_visits>
+		<entry_nb_actions>4</entry_nb_actions>
+		<entry_sum_visit_length>1</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>50%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+		<url>http://example.org/index.htm</url>
+		<segment>pageUrl==http%3A%2F%2Fexample.org%2Findex.htm</segment>
+	</row>
+	<row>
+		<label>blog</label>
+		<nb_visits>2</nb_visits>
+		<nb_hits>2</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>2</nb_hits_with_time_generation>
+		<min_time_generation>0.119</min_time_generation>
+		<max_time_generation>0.391</max_time_generation>
+		<entry_nb_visits>2</entry_nb_visits>
+		<entry_nb_actions>2</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>2</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.255</avg_time_generation>
+		<subtable>
+			<row>
+				<label>2012</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+				<min_time_generation>0.391</min_time_generation>
+				<max_time_generation>0.391</max_time_generation>
+				<entry_nb_visits>1</entry_nb_visits>
+				<entry_nb_actions>1</entry_nb_actions>
+				<entry_sum_visit_length>0</entry_sum_visit_length>
+				<entry_bounce_count>1</entry_bounce_count>
+				<exit_nb_visits>1</exit_nb_visits>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>100%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<avg_time_generation>0.391</avg_time_generation>
+				<subtable>
+					<row>
+						<label>10</label>
+						<nb_visits>1</nb_visits>
+						<nb_hits>1</nb_hits>
+						<sum_time_spent>0</sum_time_spent>
+						<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+						<min_time_generation>0.391</min_time_generation>
+						<max_time_generation>0.391</max_time_generation>
+						<entry_nb_visits>1</entry_nb_visits>
+						<entry_nb_actions>1</entry_nb_actions>
+						<entry_sum_visit_length>0</entry_sum_visit_length>
+						<entry_bounce_count>1</entry_bounce_count>
+						<exit_nb_visits>1</exit_nb_visits>
+						<avg_time_on_page>0</avg_time_on_page>
+						<bounce_rate>100%</bounce_rate>
+						<exit_rate>100%</exit_rate>
+						<avg_time_generation>0.391</avg_time_generation>
+						<subtable>
+							<row>
+								<label>integrate-piwik-into-your-rails-application</label>
+								<nb_visits>1</nb_visits>
+								<nb_hits>1</nb_hits>
+								<sum_time_spent>0</sum_time_spent>
+								<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+								<min_time_generation>0.391</min_time_generation>
+								<max_time_generation>0.391</max_time_generation>
+								<entry_nb_visits>1</entry_nb_visits>
+								<entry_nb_actions>1</entry_nb_actions>
+								<entry_sum_visit_length>0</entry_sum_visit_length>
+								<entry_bounce_count>1</entry_bounce_count>
+								<exit_nb_visits>1</exit_nb_visits>
+								<avg_time_on_page>0</avg_time_on_page>
+								<bounce_rate>100%</bounce_rate>
+								<exit_rate>100%</exit_rate>
+								<avg_time_generation>0.391</avg_time_generation>
+								<subtable>
+									<row>
+										<label>/index</label>
+										<nb_visits>1</nb_visits>
+										<nb_hits>1</nb_hits>
+										<sum_time_spent>0</sum_time_spent>
+										<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+										<min_time_generation>0.391</min_time_generation>
+										<max_time_generation>0.391</max_time_generation>
+										<entry_nb_visits>1</entry_nb_visits>
+										<entry_nb_actions>1</entry_nb_actions>
+										<entry_sum_visit_length>0</entry_sum_visit_length>
+										<entry_bounce_count>1</entry_bounce_count>
+										<exit_nb_visits>1</exit_nb_visits>
+										<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+										<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+										<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+										<avg_time_on_page>0</avg_time_on_page>
+										<bounce_rate>100%</bounce_rate>
+										<exit_rate>100%</exit_rate>
+										<avg_time_generation>0.391</avg_time_generation>
+										<url>http://piwik.org/blog/2012/10/integrate-piwik-into-your-rails-application/</url>
+									</row>
+								</subtable>
+							</row>
+						</subtable>
+					</row>
+				</subtable>
+			</row>
+			<row>
+				<label>2014</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+				<min_time_generation>0.119</min_time_generation>
+				<max_time_generation>0.119</max_time_generation>
+				<entry_nb_visits>1</entry_nb_visits>
+				<entry_nb_actions>1</entry_nb_actions>
+				<entry_sum_visit_length>0</entry_sum_visit_length>
+				<entry_bounce_count>1</entry_bounce_count>
+				<exit_nb_visits>1</exit_nb_visits>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>100%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<avg_time_generation>0.119</avg_time_generation>
+				<subtable>
+					<row>
+						<label>03</label>
+						<nb_visits>1</nb_visits>
+						<nb_hits>1</nb_hits>
+						<sum_time_spent>0</sum_time_spent>
+						<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+						<min_time_generation>0.119</min_time_generation>
+						<max_time_generation>0.119</max_time_generation>
+						<entry_nb_visits>1</entry_nb_visits>
+						<entry_nb_actions>1</entry_nb_actions>
+						<entry_sum_visit_length>0</entry_sum_visit_length>
+						<entry_bounce_count>1</entry_bounce_count>
+						<exit_nb_visits>1</exit_nb_visits>
+						<avg_time_on_page>0</avg_time_on_page>
+						<bounce_rate>100%</bounce_rate>
+						<exit_rate>100%</exit_rate>
+						<avg_time_generation>0.119</avg_time_generation>
+						<subtable>
+							<row>
+								<label>piwik-2-1-massive-performance-reliability-improvements</label>
+								<nb_visits>1</nb_visits>
+								<nb_hits>1</nb_hits>
+								<sum_time_spent>0</sum_time_spent>
+								<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+								<min_time_generation>0.119</min_time_generation>
+								<max_time_generation>0.119</max_time_generation>
+								<entry_nb_visits>1</entry_nb_visits>
+								<entry_nb_actions>1</entry_nb_actions>
+								<entry_sum_visit_length>0</entry_sum_visit_length>
+								<entry_bounce_count>1</entry_bounce_count>
+								<exit_nb_visits>1</exit_nb_visits>
+								<avg_time_on_page>0</avg_time_on_page>
+								<bounce_rate>100%</bounce_rate>
+								<exit_rate>100%</exit_rate>
+								<avg_time_generation>0.119</avg_time_generation>
+								<subtable>
+									<row>
+										<label>/index</label>
+										<nb_visits>1</nb_visits>
+										<nb_hits>1</nb_hits>
+										<sum_time_spent>0</sum_time_spent>
+										<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+										<min_time_generation>0.119</min_time_generation>
+										<max_time_generation>0.119</max_time_generation>
+										<entry_nb_visits>1</entry_nb_visits>
+										<entry_nb_actions>1</entry_nb_actions>
+										<entry_sum_visit_length>0</entry_sum_visit_length>
+										<entry_bounce_count>1</entry_bounce_count>
+										<exit_nb_visits>1</exit_nb_visits>
+										<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+										<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+										<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+										<avg_time_on_page>0</avg_time_on_page>
+										<bounce_rate>100%</bounce_rate>
+										<exit_rate>100%</exit_rate>
+										<avg_time_generation>0.119</avg_time_generation>
+										<url>http://piwik.org/blog/2014/03/piwik-2-1-massive-performance-reliability-improvements/</url>
+									</row>
+								</subtable>
+							</row>
+						</subtable>
+					</row>
+				</subtable>
+			</row>
+		</subtable>
+	</row>
+	<row>
+		<label>log-analytics</label>
+		<nb_visits>2</nb_visits>
+		<nb_hits>2</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.145</min_time_generation>
+		<max_time_generation>0.145</max_time_generation>
+		<entry_nb_visits>2</entry_nb_visits>
+		<entry_nb_actions>2</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>2</entry_bounce_count>
+		<exit_nb_visits>2</exit_nb_visits>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.145</avg_time_generation>
+		<subtable>
+			<row>
+				<label>/index</label>
+				<nb_visits>2</nb_visits>
+				<nb_hits>2</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+				<min_time_generation>0.145</min_time_generation>
+				<max_time_generation>0.145</max_time_generation>
+				<entry_nb_visits>2</entry_nb_visits>
+				<entry_nb_actions>2</entry_nb_actions>
+				<entry_sum_visit_length>0</entry_sum_visit_length>
+				<entry_bounce_count>2</entry_bounce_count>
+				<exit_nb_visits>2</exit_nb_visits>
+				<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
+				<sum_daily_entry_nb_uniq_visitors>2</sum_daily_entry_nb_uniq_visitors>
+				<sum_daily_exit_nb_uniq_visitors>2</sum_daily_exit_nb_uniq_visitors>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>100%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<avg_time_generation>0.145</avg_time_generation>
+				<url>http://piwik.org/log-analytics/</url>
+			</row>
+		</subtable>
+	</row>
+	<row>
+		<label>/index.php?module=CoreHome&amp;action=index&amp;date=yesterday&amp;period=day&amp;idSite=7</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.413</min_time_generation>
+		<max_time_generation>0.413</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.413</avg_time_generation>
+		<url>http://demo.piwik.org/index.php?module=CoreHome&amp;action=index&amp;date=yesterday&amp;period=day&amp;idSite=7</url>
+		<segment>pageUrl==http%3A%2F%2Fdemo.piwik.org%2Findex.php%3Fmodule%3DCoreHome%26action%3Dindex%26date%3Dyesterday%26period%3Dday%26idSite%3D7</segment>
+	</row>
+	<row>
+		<label>/register.php?0,approve=9a94a02145599</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation />
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+		<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+		<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+		<url>http://forum.piwik.org/register.php?0,approve=9a94a02145599</url>
+		<segment>pageUrl==http%3A%2F%2Fforum.piwik.org%2Fregister.php%3F0%2Capprove%3D9a94a02145599</segment>
+	</row>
+	<row>
+		<label>changelog</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>79</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation>0</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>2</entry_nb_actions>
+		<entry_sum_visit_length>80</entry_sum_visit_length>
+		<entry_bounce_count>0</entry_bounce_count>
+		<avg_time_on_page>79</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>0%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+		<subtable>
+			<row>
+				<label>/index</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>79</sum_time_spent>
+				<entry_nb_visits>1</entry_nb_visits>
+				<entry_nb_actions>2</entry_nb_actions>
+				<entry_sum_visit_length>80</entry_sum_visit_length>
+				<entry_bounce_count>0</entry_bounce_count>
+				<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+				<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+				<avg_time_on_page>79</avg_time_on_page>
+				<bounce_rate>0%</bounce_rate>
+				<exit_rate>0%</exit_rate>
+				<url>http://piwik.org/changelog/</url>
+			</row>
+		</subtable>
+	</row>
+	<row>
+		<label>contact</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation>0</max_time_generation>
+		<exit_nb_visits>1</exit_nb_visits>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+		<subtable>
+			<row>
+				<label>/index</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<exit_nb_visits>1</exit_nb_visits>
+				<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+				<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>0%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<url>http://piwik.org/contact/</url>
+			</row>
+		</subtable>
+	</row>
+	<row>
+		<label>docs</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.134</min_time_generation>
+		<max_time_generation>0.134</max_time_generation>
+		<entry_nb_visits>1</entry_nb_visits>
+		<entry_nb_actions>1</entry_nb_actions>
+		<entry_sum_visit_length>0</entry_sum_visit_length>
+		<entry_bounce_count>1</entry_bounce_count>
+		<exit_nb_visits>1</exit_nb_visits>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>100%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0.134</avg_time_generation>
+		<subtable>
+			<row>
+				<label>installation</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+				<min_time_generation>0.134</min_time_generation>
+				<max_time_generation>0.134</max_time_generation>
+				<entry_nb_visits>1</entry_nb_visits>
+				<entry_nb_actions>1</entry_nb_actions>
+				<entry_sum_visit_length>0</entry_sum_visit_length>
+				<entry_bounce_count>1</entry_bounce_count>
+				<exit_nb_visits>1</exit_nb_visits>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>100%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<avg_time_generation>0.134</avg_time_generation>
+				<subtable>
+					<row>
+						<label>/index</label>
+						<nb_visits>1</nb_visits>
+						<nb_hits>1</nb_hits>
+						<sum_time_spent>0</sum_time_spent>
+						<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+						<min_time_generation>0.134</min_time_generation>
+						<max_time_generation>0.134</max_time_generation>
+						<entry_nb_visits>1</entry_nb_visits>
+						<entry_nb_actions>1</entry_nb_actions>
+						<entry_sum_visit_length>0</entry_sum_visit_length>
+						<entry_bounce_count>1</entry_bounce_count>
+						<exit_nb_visits>1</exit_nb_visits>
+						<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+						<sum_daily_entry_nb_uniq_visitors>1</sum_daily_entry_nb_uniq_visitors>
+						<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+						<avg_time_on_page>0</avg_time_on_page>
+						<bounce_rate>100%</bounce_rate>
+						<exit_rate>100%</exit_rate>
+						<avg_time_generation>0.134</avg_time_generation>
+						<url>http://piwik.org/docs/installation/</url>
+					</row>
+				</subtable>
+			</row>
+		</subtable>
+	</row>
+	<row>
+		<label>download</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>7</sum_time_spent>
+		<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+		<min_time_generation>0.113</min_time_generation>
+		<max_time_generation>0.113</max_time_generation>
+		<avg_time_on_page>7</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>0%</exit_rate>
+		<avg_time_generation>0.113</avg_time_generation>
+		<subtable>
+			<row>
+				<label>/index</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>7</sum_time_spent>
+				<nb_hits_with_time_generation>1</nb_hits_with_time_generation>
+				<min_time_generation>0.113</min_time_generation>
+				<max_time_generation>0.113</max_time_generation>
+				<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+				<avg_time_on_page>7</avg_time_on_page>
+				<bounce_rate>0%</bounce_rate>
+				<exit_rate>0%</exit_rate>
+				<avg_time_generation>0.113</avg_time_generation>
+				<url>http://piwik.org/download/</url>
+			</row>
+		</subtable>
+	</row>
+	<row>
+		<label>what-is-piwisk</label>
+		<nb_visits>1</nb_visits>
+		<nb_hits>1</nb_hits>
+		<sum_time_spent>0</sum_time_spent>
+		<nb_hits_with_time_generation>0</nb_hits_with_time_generation>
+		<min_time_generation />
+		<max_time_generation>0</max_time_generation>
+		<exit_nb_visits>1</exit_nb_visits>
+		<avg_time_on_page>0</avg_time_on_page>
+		<bounce_rate>0%</bounce_rate>
+		<exit_rate>100%</exit_rate>
+		<avg_time_generation>0</avg_time_generation>
+		<subtable>
+			<row>
+				<label>/index</label>
+				<nb_visits>1</nb_visits>
+				<nb_hits>1</nb_hits>
+				<sum_time_spent>0</sum_time_spent>
+				<exit_nb_visits>1</exit_nb_visits>
+				<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
+				<sum_daily_exit_nb_uniq_visitors>1</sum_daily_exit_nb_uniq_visitors>
+				<avg_time_on_page>0</avg_time_on_page>
+				<bounce_rate>0%</bounce_rate>
+				<exit_rate>100%</exit_rate>
+				<url>http://piwik.org/what-is-piwisk/</url>
+			</row>
+		</subtable>
+	</row>
+</result>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getSiteSearchCategories_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getSiteSearchCategories_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getSiteSearchCategories_range.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result />
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getSiteSearchKeywords_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getSiteSearchKeywords_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getSiteSearchKeywords_range.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result />
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getSiteSearchNoResultKeywords_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getSiteSearchNoResultKeywords_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c234bed59e963e268d7a9bc05348d941758c4aa9
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.getSiteSearchNoResultKeywords_range.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result />
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.get_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.get_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..45fd92e7cdb8f708eee9dfb759e123b7353966c5
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Actions.get_range.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+	<nb_pageviews>19</nb_pageviews>
+	<nb_uniq_pageviews>17</nb_uniq_pageviews>
+	<nb_downloads>1</nb_downloads>
+	<nb_uniq_downloads>1</nb_uniq_downloads>
+	<nb_outlinks>1</nb_outlinks>
+	<nb_uniq_outlinks>1</nb_uniq_outlinks>
+	<nb_searches>0</nb_searches>
+	<nb_keywords>0</nb_keywords>
+	<avg_time_generation>0.206</avg_time_generation>
+</result>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..91e14487964502e49595dc623d63acc4d6858527
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__Live.getLastVisitsDetails_range.xml
@@ -0,0 +1,1918 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+	<row>
+		<idSite>3</idSite>
+		<idVisit>55</idVisit>
+		<visitIp>174.97.139.63</visitIp>
+		
+		<actionDetails>
+			<row>
+				<type>action</type>
+				<url>http://piwik.org/</url>
+				<pageTitle>Liberate Web Analytics - Analytics - Piwik</pageTitle>
+				<pageIdAction>35</pageIdAction>
+				
+				<pageId>68</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName1>HTTP-code</customVariablePageName1>
+						<customVariablePageValue1>200</customVariablePageValue1>
+					</row>
+				</customVariables>
+				<generationTime>0.29s</generationTime>
+				<icon />
+				
+			</row>
+		</actionDetails>
+		<goalConversions>0</goalConversions>
+		<siteCurrency>USD</siteCurrency>
+		<siteCurrencySymbol>$</siteCurrencySymbol>
+		
+		
+		
+		
+		<userId />
+		<visitorType>returning</visitorType>
+		<visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+		<visitConverted>0</visitConverted>
+		<visitConvertedIcon />
+		<visitCount>77</visitCount>
+		
+		<visitEcommerceStatus>none</visitEcommerceStatus>
+		<visitEcommerceStatusIcon />
+		<daysSinceFirstVisit>0</daysSinceFirstVisit>
+		<daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder>
+		<visitDuration>0</visitDuration>
+		<visitDurationPretty>0s</visitDurationPretty>
+		<searches>0</searches>
+		<actions>1</actions>
+		<referrerType>website</referrerType>
+		<referrerTypeName>Websites</referrerTypeName>
+		<referrerName>blog.comperiosearch.com</referrerName>
+		<referrerKeyword />
+		<referrerKeywordPosition />
+		<referrerUrl>http://blog.comperiosearch.com/blog/2014/02/05/dynamic-search-ranking-using-elasticsearch-neo4j-and-piwik/</referrerUrl>
+		<referrerSearchEngineUrl />
+		<referrerSearchEngineIcon />
+		<languageCode />
+		<language>Unknown</language>
+		<deviceType>Desktop</deviceType>
+		<deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.gif</deviceTypeIcon>
+		<deviceBrand>Unknown</deviceBrand>
+		<deviceModel />
+		<operatingSystem>Windows 8.1</operatingSystem>
+		<operatingSystemName>Windows</operatingSystemName>
+		<operatingSystemIcon>plugins/DevicesDetection/images/os/WIN.gif</operatingSystemIcon>
+		<operatingSystemCode>WIN</operatingSystemCode>
+		<operatingSystemVersion>8.1</operatingSystemVersion>
+		<browserFamily>Blink</browserFamily>
+		<browserFamilyDescription>Blink (Chrome, Opera)</browserFamilyDescription>
+		<browser>Chrome 33.0</browser>
+		<browserName>Chrome</browserName>
+		<browserIcon>plugins/DevicesDetection/images/browsers/CH.gif</browserIcon>
+		<browserCode>CH</browserCode>
+		<browserVersion>33.0</browserVersion>
+		<events>0</events>
+		<continent>North America</continent>
+		<continentCode>amn</continentCode>
+		<country>United States</country>
+		<countryCode>us</countryCode>
+		<countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+		<region>North Carolina</region>
+		<regionCode>NC</regionCode>
+		<city>Raleigh</city>
+		<location>Raleigh, North Carolina, United States</location>
+		<latitude>35.771999</latitude>
+		<longitude>-78.639000</longitude>
+		<visitLocalTime>20:34:49</visitLocalTime>
+		<visitLocalHour>20</visitLocalHour>
+		<daysSinceLastVisit>0</daysSinceLastVisit>
+		<provider>Unknown</provider>
+		<providerName>Unknown</providerName>
+		<providerUrl />
+		<customVariables>
+			<row>
+				<customVariableName1>Domain landed</customVariableName1>
+				<customVariableValue1>piwik.org</customVariableValue1>
+			</row>
+		</customVariables>
+		<resolution>1366x768</resolution>
+		<plugins>pdf, flash, java</plugins>
+		<pluginsIcons>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/pdf.gif</pluginIcon>
+				<pluginName>pdf</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/flash.gif</pluginIcon>
+				<pluginName>flash</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/java.gif</pluginIcon>
+				<pluginName>java</pluginName>
+			</row>
+		</pluginsIcons>
+		
+		
+		
+		
+		
+	</row>
+	<row>
+		<idSite>3</idSite>
+		<idVisit>48</idVisit>
+		<visitIp>206.190.75.8</visitIp>
+		
+		<actionDetails>
+			<row>
+				<type>action</type>
+				<url>http://piwik.org/changelog/</url>
+				<pageTitle>Changelog Archive - Analytics - Piwik</pageTitle>
+				<pageIdAction>44</pageIdAction>
+				
+				<pageId>59</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName1>HTTP-code</customVariablePageName1>
+						<customVariablePageValue1>200</customVariablePageValue1>
+					</row>
+				</customVariables>
+				<timeSpent>79</timeSpent>
+				<timeSpentPretty>1 min 19s</timeSpentPretty>
+				<icon />
+				
+			</row>
+			<row>
+				<type>action</type>
+				<url>http://piwik.org/contact/</url>
+				<pageTitle>Contact the Piwik team - Analytics - Piwik</pageTitle>
+				<pageIdAction>55</pageIdAction>
+				
+				<pageId>67</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName1>HTTP-code</customVariablePageName1>
+						<customVariablePageValue1>200</customVariablePageValue1>
+					</row>
+				</customVariables>
+				<icon />
+				
+			</row>
+		</actionDetails>
+		<goalConversions>0</goalConversions>
+		<siteCurrency>USD</siteCurrency>
+		<siteCurrencySymbol>$</siteCurrencySymbol>
+		
+		
+		
+		
+		<userId />
+		<visitorType>returning</visitorType>
+		<visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+		<visitConverted>0</visitConverted>
+		<visitConvertedIcon />
+		<visitCount>2</visitCount>
+		
+		<visitEcommerceStatus>none</visitEcommerceStatus>
+		<visitEcommerceStatusIcon />
+		<daysSinceFirstVisit>181</daysSinceFirstVisit>
+		<daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder>
+		<visitDuration>80</visitDuration>
+		<visitDurationPretty>1 min 20s</visitDurationPretty>
+		<searches>0</searches>
+		<actions>2</actions>
+		<referrerType>direct</referrerType>
+		<referrerTypeName>Direct Entry</referrerTypeName>
+		<referrerName />
+		<referrerKeyword />
+		<referrerKeywordPosition />
+		<referrerUrl>http://piwik.org/what-is-piwik/</referrerUrl>
+		<referrerSearchEngineUrl />
+		<referrerSearchEngineIcon />
+		<languageCode />
+		<language>Unknown</language>
+		<deviceType>Desktop</deviceType>
+		<deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.gif</deviceTypeIcon>
+		<deviceBrand>Unknown</deviceBrand>
+		<deviceModel />
+		<operatingSystem>Windows 7</operatingSystem>
+		<operatingSystemName>Windows</operatingSystemName>
+		<operatingSystemIcon>plugins/DevicesDetection/images/os/WIN.gif</operatingSystemIcon>
+		<operatingSystemCode>WIN</operatingSystemCode>
+		<operatingSystemVersion>7</operatingSystemVersion>
+		<browserFamily>Trident</browserFamily>
+		<browserFamilyDescription>Trident (IE)</browserFamilyDescription>
+		<browser>Internet Explorer 8.0</browser>
+		<browserName>Internet Explorer</browserName>
+		<browserIcon>plugins/DevicesDetection/images/browsers/IE.gif</browserIcon>
+		<browserCode>IE</browserCode>
+		<browserVersion>8.0</browserVersion>
+		<events>0</events>
+		<continent>North America</continent>
+		<continentCode>amn</continentCode>
+		<country>United States</country>
+		<countryCode>us</countryCode>
+		<countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+		<region>California</region>
+		<regionCode>CA</regionCode>
+		<city>Lake Forest</city>
+		<location>Lake Forest, California, United States</location>
+		<latitude>33.645000</latitude>
+		<longitude>-117.679001</longitude>
+		<visitLocalTime>17:33:27</visitLocalTime>
+		<visitLocalHour>17</visitLocalHour>
+		<daysSinceLastVisit>181</daysSinceLastVisit>
+		<provider>Unknown</provider>
+		<providerName>Unknown</providerName>
+		<providerUrl />
+		<customVariables>
+			<row>
+				<customVariableName1>Domain landed</customVariableName1>
+				<customVariableValue1>piwik.org</customVariableValue1>
+			</row>
+		</customVariables>
+		<resolution>1536x864</resolution>
+		<plugins />
+		<pluginsIcons />
+		
+		
+		
+		
+		
+	</row>
+	<row>
+		<idSite>3</idSite>
+		<idVisit>54</idVisit>
+		<visitIp>193.159.20.129</visitIp>
+		
+		<actionDetails>
+			<row>
+				<type>action</type>
+				<url>http://demo.piwik.org/index.php?module=CoreHome&amp;action=index&amp;date=yesterday&amp;period=day&amp;idSite=7</url>
+				<pageTitle>demo.piwik.org/Piwik Forums - Piwik › Web Analytics Reports</pageTitle>
+				<pageIdAction>53</pageIdAction>
+				
+				<pageId>66</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName1>HTTP-code</customVariablePageName1>
+						<customVariablePageValue1>200</customVariablePageValue1>
+					</row>
+				</customVariables>
+				<generationTime>0.41s</generationTime>
+				<icon />
+				
+			</row>
+		</actionDetails>
+		<goalConversions>0</goalConversions>
+		<siteCurrency>USD</siteCurrency>
+		<siteCurrencySymbol>$</siteCurrencySymbol>
+		
+		
+		
+		
+		<userId />
+		<visitorType>returning</visitorType>
+		<visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+		<visitConverted>0</visitConverted>
+		<visitConvertedIcon />
+		<visitCount>1</visitCount>
+		
+		<visitEcommerceStatus>none</visitEcommerceStatus>
+		<visitEcommerceStatusIcon />
+		<daysSinceFirstVisit>0</daysSinceFirstVisit>
+		<daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder>
+		<visitDuration>0</visitDuration>
+		<visitDurationPretty>0s</visitDurationPretty>
+		<searches>0</searches>
+		<actions>1</actions>
+		<referrerType>direct</referrerType>
+		<referrerTypeName>Direct Entry</referrerTypeName>
+		<referrerName />
+		<referrerKeyword />
+		<referrerKeywordPosition />
+		<referrerUrl>http://demo.piwik.org/index.php?module=MultiSites&amp;action=index&amp;date=yesterday&amp;period=day&amp;idSite=32</referrerUrl>
+		<referrerSearchEngineUrl />
+		<referrerSearchEngineIcon />
+		<languageCode />
+		<language>Unknown</language>
+		<deviceType>Desktop</deviceType>
+		<deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.gif</deviceTypeIcon>
+		<deviceBrand>Unknown</deviceBrand>
+		<deviceModel />
+		<operatingSystem>Windows 7</operatingSystem>
+		<operatingSystemName>Windows</operatingSystemName>
+		<operatingSystemIcon>plugins/DevicesDetection/images/os/WIN.gif</operatingSystemIcon>
+		<operatingSystemCode>WIN</operatingSystemCode>
+		<operatingSystemVersion>7</operatingSystemVersion>
+		<browserFamily>Blink</browserFamily>
+		<browserFamilyDescription>Blink (Chrome, Opera)</browserFamilyDescription>
+		<browser>Chrome 34.0</browser>
+		<browserName>Chrome</browserName>
+		<browserIcon>plugins/DevicesDetection/images/browsers/CH.gif</browserIcon>
+		<browserCode>CH</browserCode>
+		<browserVersion>34.0</browserVersion>
+		<events>0</events>
+		<continent>Europe</continent>
+		<continentCode>eur</continentCode>
+		<country>Germany</country>
+		<countryCode>de</countryCode>
+		<countryFlag>plugins/UserCountry/images/flags/de.png</countryFlag>
+		<region />
+		<regionCode />
+		<city />
+		<location>Germany</location>
+		<latitude>51</latitude>
+		<longitude>9</longitude>
+		<visitLocalTime>01:34:37</visitLocalTime>
+		<visitLocalHour>1</visitLocalHour>
+		<daysSinceLastVisit>4</daysSinceLastVisit>
+		<provider>Unknown</provider>
+		<providerName>Unknown</providerName>
+		<providerUrl />
+		<customVariables>
+			<row>
+				<customVariableName1>Domain landed</customVariableName1>
+				<customVariableValue1>piwik.org</customVariableValue1>
+			</row>
+			<row>
+				<customVariableName2>Demo language</customVariableName2>
+				<customVariableValue2>English</customVariableValue2>
+			</row>
+		</customVariables>
+		<resolution>1920x1200</resolution>
+		<plugins>pdf, flash, java, quicktime, silverlight</plugins>
+		<pluginsIcons>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/pdf.gif</pluginIcon>
+				<pluginName>pdf</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/flash.gif</pluginIcon>
+				<pluginName>flash</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/java.gif</pluginIcon>
+				<pluginName>java</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/quicktime.gif</pluginIcon>
+				<pluginName>quicktime</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/silverlight.gif</pluginIcon>
+				<pluginName>silverlight</pluginName>
+			</row>
+		</pluginsIcons>
+		
+		
+		
+		
+		
+	</row>
+	<row>
+		<idSite>3</idSite>
+		<idVisit>52</idVisit>
+		<visitIp>50.244.17.130</visitIp>
+		
+		<actionDetails>
+			<row>
+				<type>action</type>
+				<url>http://piwik.org/</url>
+				<pageTitle>Liberate Web Analytics - Analytics - Piwik</pageTitle>
+				<pageIdAction>35</pageIdAction>
+				
+				<pageId>63</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName1>HTTP-code</customVariablePageName1>
+						<customVariablePageValue1>200</customVariablePageValue1>
+					</row>
+				</customVariables>
+				<timeSpent>32</timeSpent>
+				<timeSpentPretty>32s</timeSpentPretty>
+				<icon />
+				
+			</row>
+			<row>
+				<type>action</type>
+				<url>http://piwik.org/what-is-piwisk/</url>
+				<pageTitle>What is Piwik? - Analytics - Piwik</pageTitle>
+				<pageIdAction>51</pageIdAction>
+				
+				<pageId>65</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName1>HTTP-code</customVariablePageName1>
+						<customVariablePageValue1>501</customVariablePageValue1>
+					</row>
+				</customVariables>
+				<icon />
+				
+			</row>
+		</actionDetails>
+		<goalConversions>0</goalConversions>
+		<siteCurrency>USD</siteCurrency>
+		<siteCurrencySymbol>$</siteCurrencySymbol>
+		
+		
+		
+		
+		<userId />
+		<visitorType>returning</visitorType>
+		<visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+		<visitConverted>0</visitConverted>
+		<visitConvertedIcon />
+		<visitCount>7</visitCount>
+		
+		<visitEcommerceStatus>none</visitEcommerceStatus>
+		<visitEcommerceStatusIcon />
+		<daysSinceFirstVisit>17</daysSinceFirstVisit>
+		<daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder>
+		<visitDuration>33</visitDuration>
+		<visitDurationPretty>33s</visitDurationPretty>
+		<searches>0</searches>
+		<actions>2</actions>
+		<referrerType>search</referrerType>
+		<referrerTypeName>Search Engines</referrerTypeName>
+		<referrerName>Google</referrerName>
+		<referrerKeyword>Keyword not defined</referrerKeyword>
+		<referrerKeywordPosition>1</referrerKeywordPosition>
+		<referrerUrl>http://piwik.org/faq/general/#faq_144</referrerUrl>
+		<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
+		<referrerSearchEngineIcon>plugins/Referrers/images/searchEngines/google.com.png</referrerSearchEngineIcon>
+		<languageCode />
+		<language>Unknown</language>
+		<deviceType>Desktop</deviceType>
+		<deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.gif</deviceTypeIcon>
+		<deviceBrand>Unknown</deviceBrand>
+		<deviceModel />
+		<operatingSystem>Mac 10.9</operatingSystem>
+		<operatingSystemName>Mac</operatingSystemName>
+		<operatingSystemIcon>plugins/DevicesDetection/images/os/MAC.gif</operatingSystemIcon>
+		<operatingSystemCode>MAC</operatingSystemCode>
+		<operatingSystemVersion>10.9</operatingSystemVersion>
+		<browserFamily>WebKit</browserFamily>
+		<browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+		<browser>Safari 7.0</browser>
+		<browserName>Safari</browserName>
+		<browserIcon>plugins/DevicesDetection/images/browsers/SF.gif</browserIcon>
+		<browserCode>SF</browserCode>
+		<browserVersion>7.0</browserVersion>
+		<events>0</events>
+		<continent>North America</continent>
+		<continentCode>amn</continentCode>
+		<country>United States</country>
+		<countryCode>us</countryCode>
+		<countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+		<region />
+		<regionCode />
+		<city />
+		<location>United States</location>
+		<latitude>38</latitude>
+		<longitude>-97</longitude>
+		<visitLocalTime>19:34:01</visitLocalTime>
+		<visitLocalHour>19</visitLocalHour>
+		<daysSinceLastVisit>6</daysSinceLastVisit>
+		<provider>Unknown</provider>
+		<providerName>Unknown</providerName>
+		<providerUrl />
+		<customVariables>
+			<row>
+				<customVariableName1>Domain landed</customVariableName1>
+				<customVariableValue1>piwik.org</customVariableValue1>
+			</row>
+		</customVariables>
+		<resolution>2880x1800</resolution>
+		<plugins>pdf, flash, java, quicktime</plugins>
+		<pluginsIcons>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/pdf.gif</pluginIcon>
+				<pluginName>pdf</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/flash.gif</pluginIcon>
+				<pluginName>flash</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/java.gif</pluginIcon>
+				<pluginName>java</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/quicktime.gif</pluginIcon>
+				<pluginName>quicktime</pluginName>
+			</row>
+		</pluginsIcons>
+		
+		
+		
+		
+		
+	</row>
+	<row>
+		<idSite>3</idSite>
+		<idVisit>53</idVisit>
+		<visitIp>84.194.72.21</visitIp>
+		
+		<actionDetails>
+			<row>
+				<type>outlink</type>
+				<url>http://demo.piwik.org/</url>
+				<pageTitle />
+				<pageIdAction>49</pageIdAction>
+				
+				<pageId>64</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName1>HTTP-code</customVariablePageName1>
+						<customVariablePageValue1>200</customVariablePageValue1>
+					</row>
+				</customVariables>
+				<icon>plugins/Morpheus/images/link.gif</icon>
+				
+			</row>
+		</actionDetails>
+		<goalConversions>0</goalConversions>
+		<siteCurrency>USD</siteCurrency>
+		<siteCurrencySymbol>$</siteCurrencySymbol>
+		
+		
+		
+		
+		<userId />
+		<visitorType>returning</visitorType>
+		<visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+		<visitConverted>0</visitConverted>
+		<visitConvertedIcon />
+		<visitCount>1</visitCount>
+		
+		<visitEcommerceStatus>none</visitEcommerceStatus>
+		<visitEcommerceStatusIcon />
+		<daysSinceFirstVisit>0</daysSinceFirstVisit>
+		<daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder>
+		<visitDuration>0</visitDuration>
+		<visitDurationPretty>0s</visitDurationPretty>
+		<searches>0</searches>
+		<actions>1</actions>
+		<referrerType>website</referrerType>
+		<referrerTypeName>Websites</referrerTypeName>
+		<referrerName>musicforeveryoneradio.be</referrerName>
+		<referrerKeyword />
+		<referrerKeywordPosition />
+		<referrerUrl>http://musicforeveryoneradio.be:2222/CMD_PLUGINS/installatron/index.raw</referrerUrl>
+		<referrerSearchEngineUrl />
+		<referrerSearchEngineIcon />
+		<languageCode />
+		<language>Unknown</language>
+		<deviceType>Desktop</deviceType>
+		<deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.gif</deviceTypeIcon>
+		<deviceBrand>Unknown</deviceBrand>
+		<deviceModel />
+		<operatingSystem>Windows 7</operatingSystem>
+		<operatingSystemName>Windows</operatingSystemName>
+		<operatingSystemIcon>plugins/DevicesDetection/images/os/WIN.gif</operatingSystemIcon>
+		<operatingSystemCode>WIN</operatingSystemCode>
+		<operatingSystemVersion>7</operatingSystemVersion>
+		<browserFamily>Blink</browserFamily>
+		<browserFamilyDescription>Blink (Chrome, Opera)</browserFamilyDescription>
+		<browser>Chrome 33.0</browser>
+		<browserName>Chrome</browserName>
+		<browserIcon>plugins/DevicesDetection/images/browsers/CH.gif</browserIcon>
+		<browserCode>CH</browserCode>
+		<browserVersion>33.0</browserVersion>
+		<events>0</events>
+		<continent>Europe</continent>
+		<continentCode>eur</continentCode>
+		<country>Belgium</country>
+		<countryCode>be</countryCode>
+		<countryFlag>plugins/UserCountry/images/flags/be.png</countryFlag>
+		<region>Limburg</region>
+		<regionCode>05</regionCode>
+		<city>Maaseik</city>
+		<location>Maaseik, Limburg, Belgium</location>
+		<latitude>51.099998</latitude>
+		<longitude>5.800000</longitude>
+		<visitLocalTime>01:34:24</visitLocalTime>
+		<visitLocalHour>1</visitLocalHour>
+		<daysSinceLastVisit>0</daysSinceLastVisit>
+		<provider>Unknown</provider>
+		<providerName>Unknown</providerName>
+		<providerUrl />
+		<customVariables>
+			<row>
+				<customVariableName1>Domain landed</customVariableName1>
+				<customVariableValue1>piwik.org</customVariableValue1>
+			</row>
+		</customVariables>
+		<resolution>1920x1080</resolution>
+		<plugins>pdf, flash, java, silverlight</plugins>
+		<pluginsIcons>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/pdf.gif</pluginIcon>
+				<pluginName>pdf</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/flash.gif</pluginIcon>
+				<pluginName>flash</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/java.gif</pluginIcon>
+				<pluginName>java</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/silverlight.gif</pluginIcon>
+				<pluginName>silverlight</pluginName>
+			</row>
+		</pluginsIcons>
+		
+		
+		
+		
+		
+	</row>
+	<row>
+		<idSite>3</idSite>
+		<idVisit>51</idVisit>
+		<visitIp>108.211.181.12</visitIp>
+		
+		<actionDetails>
+			<row>
+				<type>action</type>
+				<url>http://piwik.org/blog/2012/10/integrate-piwik-into-your-rails-application/</url>
+				<pageTitle>Integrate Piwik into your Rails Application - Analytics - Piwik</pageTitle>
+				<pageIdAction>48</pageIdAction>
+				
+				<pageId>62</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName1>HTTP-code</customVariablePageName1>
+						<customVariablePageValue1>200</customVariablePageValue1>
+					</row>
+				</customVariables>
+				<generationTime>0.39s</generationTime>
+				<icon />
+				
+			</row>
+		</actionDetails>
+		<goalConversions>0</goalConversions>
+		<siteCurrency>USD</siteCurrency>
+		<siteCurrencySymbol>$</siteCurrencySymbol>
+		
+		
+		
+		
+		<userId />
+		<visitorType>new</visitorType>
+		<visitorTypeIcon />
+		<visitConverted>0</visitConverted>
+		<visitConvertedIcon />
+		<visitCount>1</visitCount>
+		
+		<visitEcommerceStatus>none</visitEcommerceStatus>
+		<visitEcommerceStatusIcon />
+		<daysSinceFirstVisit>0</daysSinceFirstVisit>
+		<daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder>
+		<visitDuration>0</visitDuration>
+		<visitDurationPretty>0s</visitDurationPretty>
+		<searches>0</searches>
+		<actions>1</actions>
+		<referrerType>search</referrerType>
+		<referrerTypeName>Search Engines</referrerTypeName>
+		<referrerName>Google</referrerName>
+		<referrerKeyword>Keyword not defined</referrerKeyword>
+		<referrerKeywordPosition />
+		<referrerUrl>http://piwik.org/faq/general/#faq_144</referrerUrl>
+		<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
+		<referrerSearchEngineIcon>plugins/Referrers/images/searchEngines/google.com.png</referrerSearchEngineIcon>
+		<languageCode />
+		<language>Unknown</language>
+		<deviceType>Desktop</deviceType>
+		<deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.gif</deviceTypeIcon>
+		<deviceBrand>Unknown</deviceBrand>
+		<deviceModel />
+		<operatingSystem>Mac 10.9</operatingSystem>
+		<operatingSystemName>Mac</operatingSystemName>
+		<operatingSystemIcon>plugins/DevicesDetection/images/os/MAC.gif</operatingSystemIcon>
+		<operatingSystemCode>MAC</operatingSystemCode>
+		<operatingSystemVersion>10.9</operatingSystemVersion>
+		<browserFamily>Blink</browserFamily>
+		<browserFamilyDescription>Blink (Chrome, Opera)</browserFamilyDescription>
+		<browser>Chrome 33.0</browser>
+		<browserName>Chrome</browserName>
+		<browserIcon>plugins/DevicesDetection/images/browsers/CH.gif</browserIcon>
+		<browserCode>CH</browserCode>
+		<browserVersion>33.0</browserVersion>
+		<events>0</events>
+		<continent>North America</continent>
+		<continentCode>amn</continentCode>
+		<country>United States</country>
+		<countryCode>us</countryCode>
+		<countryFlag>plugins/UserCountry/images/flags/us.png</countryFlag>
+		<region>California</region>
+		<regionCode>CA</regionCode>
+		<city>San Francisco</city>
+		<location>San Francisco, California, United States</location>
+		<latitude>37.792000</latitude>
+		<longitude>-122.408997</longitude>
+		<visitLocalTime>17:33:58</visitLocalTime>
+		<visitLocalHour>17</visitLocalHour>
+		<daysSinceLastVisit>0</daysSinceLastVisit>
+		<provider>Unknown</provider>
+		<providerName>Unknown</providerName>
+		<providerUrl />
+		<customVariables>
+			<row>
+				<customVariableName1>Domain landed</customVariableName1>
+				<customVariableValue1>piwik.org</customVariableValue1>
+			</row>
+		</customVariables>
+		<resolution>1360x768</resolution>
+		<plugins>pdf, flash, java, quicktime, windowsmedia, silverlight</plugins>
+		<pluginsIcons>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/pdf.gif</pluginIcon>
+				<pluginName>pdf</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/flash.gif</pluginIcon>
+				<pluginName>flash</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/java.gif</pluginIcon>
+				<pluginName>java</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/quicktime.gif</pluginIcon>
+				<pluginName>quicktime</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/windowsmedia.gif</pluginIcon>
+				<pluginName>windowsmedia</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/silverlight.gif</pluginIcon>
+				<pluginName>silverlight</pluginName>
+			</row>
+		</pluginsIcons>
+		
+		
+		
+		
+		
+	</row>
+	<row>
+		<idSite>3</idSite>
+		<idVisit>50</idVisit>
+		<visitIp>219.101.46.222</visitIp>
+		
+		<actionDetails>
+			<row>
+				<type>action</type>
+				<url>http://piwik.org/log-analytics/</url>
+				<pageTitle>Log Analytics - Analytics - Piwik</pageTitle>
+				<pageIdAction>42</pageIdAction>
+				
+				<pageId>61</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName1>HTTP-code</customVariablePageName1>
+						<customVariablePageValue1>404</customVariablePageValue1>
+					</row>
+				</customVariables>
+				<icon />
+				
+			</row>
+		</actionDetails>
+		<goalConversions>0</goalConversions>
+		<siteCurrency>USD</siteCurrency>
+		<siteCurrencySymbol>$</siteCurrencySymbol>
+		
+		
+		
+		
+		<userId />
+		<visitorType>returning</visitorType>
+		<visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+		<visitConverted>0</visitConverted>
+		<visitConvertedIcon />
+		<visitCount>4</visitCount>
+		
+		<visitEcommerceStatus>none</visitEcommerceStatus>
+		<visitEcommerceStatusIcon />
+		<daysSinceFirstVisit>3</daysSinceFirstVisit>
+		<daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder>
+		<visitDuration>0</visitDuration>
+		<visitDurationPretty>0s</visitDurationPretty>
+		<searches>0</searches>
+		<actions>1</actions>
+		<referrerType>search</referrerType>
+		<referrerTypeName>Search Engines</referrerTypeName>
+		<referrerName>Google</referrerName>
+		<referrerKeyword>Keyword not defined</referrerKeyword>
+		<referrerKeywordPosition>2</referrerKeywordPosition>
+		<referrerUrl>http://piwik.org/faq/general/#faq_144</referrerUrl>
+		<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
+		<referrerSearchEngineIcon>plugins/Referrers/images/searchEngines/google.com.png</referrerSearchEngineIcon>
+		<languageCode />
+		<language>Unknown</language>
+		<deviceType>Desktop</deviceType>
+		<deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.gif</deviceTypeIcon>
+		<deviceBrand>Unknown</deviceBrand>
+		<deviceModel />
+		<operatingSystem>Mac 10.9</operatingSystem>
+		<operatingSystemName>Mac</operatingSystemName>
+		<operatingSystemIcon>plugins/DevicesDetection/images/os/MAC.gif</operatingSystemIcon>
+		<operatingSystemCode>MAC</operatingSystemCode>
+		<operatingSystemVersion>10.9</operatingSystemVersion>
+		<browserFamily>WebKit</browserFamily>
+		<browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+		<browser>Safari 7.0</browser>
+		<browserName>Safari</browserName>
+		<browserIcon>plugins/DevicesDetection/images/browsers/SF.gif</browserIcon>
+		<browserCode>SF</browserCode>
+		<browserVersion>7.0</browserVersion>
+		<events>0</events>
+		<continent>Asia</continent>
+		<continentCode>asi</continentCode>
+		<country>Japan</country>
+		<countryCode>jp</countryCode>
+		<countryFlag>plugins/UserCountry/images/flags/jp.png</countryFlag>
+		<region>Kanagawa</region>
+		<regionCode>19</regionCode>
+		<city>Nihon'odori</city>
+		<location>Nihon'odori, Kanagawa, Japan</location>
+		<latitude>35.450001</latitude>
+		<longitude>139.649994</longitude>
+		<visitLocalTime>09:33:50</visitLocalTime>
+		<visitLocalHour>9</visitLocalHour>
+		<daysSinceLastVisit>1</daysSinceLastVisit>
+		<provider>Unknown</provider>
+		<providerName>Unknown</providerName>
+		<providerUrl />
+		<customVariables>
+			<row>
+				<customVariableName1>Domain landed</customVariableName1>
+				<customVariableValue1>piwik.org</customVariableValue1>
+			</row>
+		</customVariables>
+		<resolution>2560x1440</resolution>
+		<plugins>pdf, java, quicktime</plugins>
+		<pluginsIcons>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/pdf.gif</pluginIcon>
+				<pluginName>pdf</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/java.gif</pluginIcon>
+				<pluginName>java</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/quicktime.gif</pluginIcon>
+				<pluginName>quicktime</pluginName>
+			</row>
+		</pluginsIcons>
+		
+		
+		
+		
+		
+	</row>
+	<row>
+		<idSite>3</idSite>
+		<idVisit>49</idVisit>
+		<visitIp>80.136.160.65</visitIp>
+		
+		<actionDetails>
+			<row>
+				<type>action</type>
+				<url>http://piwik.org/blog/2014/03/piwik-2-1-massive-performance-reliability-improvements/</url>
+				<pageTitle>Piwik 2.1 — Massive Performance and Reliability Improvements - Analytics - Piwik</pageTitle>
+				<pageIdAction>46</pageIdAction>
+				
+				<pageId>60</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName1>HTTP-code</customVariablePageName1>
+						<customVariablePageValue1>200</customVariablePageValue1>
+					</row>
+				</customVariables>
+				<generationTime>0.12s</generationTime>
+				<icon />
+				
+			</row>
+		</actionDetails>
+		<goalConversions>0</goalConversions>
+		<siteCurrency>USD</siteCurrency>
+		<siteCurrencySymbol>$</siteCurrencySymbol>
+		
+		
+		
+		
+		<userId />
+		<visitorType>returning</visitorType>
+		<visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+		<visitConverted>0</visitConverted>
+		<visitConvertedIcon />
+		<visitCount>2</visitCount>
+		
+		<visitEcommerceStatus>none</visitEcommerceStatus>
+		<visitEcommerceStatusIcon />
+		<daysSinceFirstVisit>0</daysSinceFirstVisit>
+		<daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder>
+		<visitDuration>0</visitDuration>
+		<visitDurationPretty>0s</visitDurationPretty>
+		<searches>0</searches>
+		<actions>1</actions>
+		<referrerType>website</referrerType>
+		<referrerTypeName>Websites</referrerTypeName>
+		<referrerName>berndjung.com</referrerName>
+		<referrerKeyword />
+		<referrerKeywordPosition />
+		<referrerUrl>http://berndjung.com/piwik/index.php?module=CoreHome&amp;action=index&amp;idSite=1&amp;period=day&amp;date=today</referrerUrl>
+		<referrerSearchEngineUrl />
+		<referrerSearchEngineIcon />
+		<languageCode />
+		<language>Unknown</language>
+		<deviceType>Smartphone</deviceType>
+		<deviceTypeIcon>plugins/DevicesDetection/images/screens/smartphone.png</deviceTypeIcon>
+		<deviceBrand>Unknown</deviceBrand>
+		<deviceModel />
+		<operatingSystem>Android</operatingSystem>
+		<operatingSystemName>Android</operatingSystemName>
+		<operatingSystemIcon>plugins/DevicesDetection/images/os/AND.gif</operatingSystemIcon>
+		<operatingSystemCode>AND</operatingSystemCode>
+		<operatingSystemVersion />
+		<browserFamily>Gecko</browserFamily>
+		<browserFamilyDescription>Gecko (Firefox)</browserFamilyDescription>
+		<browser>Firefox 27.0</browser>
+		<browserName>Firefox</browserName>
+		<browserIcon>plugins/DevicesDetection/images/browsers/FF.gif</browserIcon>
+		<browserCode>FF</browserCode>
+		<browserVersion>27.0</browserVersion>
+		<events>0</events>
+		<continent>Europe</continent>
+		<continentCode>eur</continentCode>
+		<country>Germany</country>
+		<countryCode>de</countryCode>
+		<countryFlag>plugins/UserCountry/images/flags/de.png</countryFlag>
+		<region>Nordrhein-Westfalen</region>
+		<regionCode>07</regionCode>
+		<city>Weilerswist</city>
+		<location>Weilerswist, Nordrhein-Westfalen, Germany</location>
+		<latitude>50.766998</latitude>
+		<longitude>6.833000</longitude>
+		<visitLocalTime>01:33:31</visitLocalTime>
+		<visitLocalHour>1</visitLocalHour>
+		<daysSinceLastVisit>0</daysSinceLastVisit>
+		<provider>Unknown</provider>
+		<providerName>Unknown</providerName>
+		<providerUrl />
+		<customVariables>
+			<row>
+				<customVariableName1>Domain landed</customVariableName1>
+				<customVariableValue1>piwik.org</customVariableValue1>
+			</row>
+		</customVariables>
+		<resolution>360x640</resolution>
+		<plugins>flash</plugins>
+		<pluginsIcons>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/flash.gif</pluginIcon>
+				<pluginName>flash</pluginName>
+			</row>
+		</pluginsIcons>
+		
+		
+		
+		
+		
+	</row>
+	<row>
+		<idSite>3</idSite>
+		<idVisit>47</idVisit>
+		<visitIp>188.107.238.9</visitIp>
+		
+		<actionDetails>
+			<row>
+				<type>action</type>
+				<url>http://piwik.org/log-analytics/</url>
+				<pageTitle>Log Analytics - Analytics - Piwik</pageTitle>
+				<pageIdAction>42</pageIdAction>
+				
+				<pageId>58</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName1>HTTP-code</customVariablePageName1>
+						<customVariablePageValue1>200</customVariablePageValue1>
+					</row>
+				</customVariables>
+				<generationTime>0.15s</generationTime>
+				<icon />
+				
+			</row>
+		</actionDetails>
+		<goalConversions>0</goalConversions>
+		<siteCurrency>USD</siteCurrency>
+		<siteCurrencySymbol>$</siteCurrencySymbol>
+		
+		
+		
+		
+		<userId />
+		<visitorType>returning</visitorType>
+		<visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+		<visitConverted>0</visitConverted>
+		<visitConvertedIcon />
+		<visitCount>5</visitCount>
+		
+		<visitEcommerceStatus>none</visitEcommerceStatus>
+		<visitEcommerceStatusIcon />
+		<daysSinceFirstVisit>1</daysSinceFirstVisit>
+		<daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder>
+		<visitDuration>0</visitDuration>
+		<visitDurationPretty>0s</visitDurationPretty>
+		<searches>0</searches>
+		<actions>1</actions>
+		<referrerType>website</referrerType>
+		<referrerTypeName>Websites</referrerTypeName>
+		<referrerName>forum.golem.de</referrerName>
+		<referrerKeyword />
+		<referrerKeywordPosition />
+		<referrerUrl>http://forum.golem.de/kommentare/security/urteil-zu-tracking-nutzer-muessen-piwik-analyse-widersprechen-koennen/piwik-log-analytics/80715,3669355,3669355,read.html</referrerUrl>
+		<referrerSearchEngineUrl />
+		<referrerSearchEngineIcon />
+		<languageCode />
+		<language>Unknown</language>
+		<deviceType>Desktop</deviceType>
+		<deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.gif</deviceTypeIcon>
+		<deviceBrand>Unknown</deviceBrand>
+		<deviceModel />
+		<operatingSystem>Windows 7</operatingSystem>
+		<operatingSystemName>Windows</operatingSystemName>
+		<operatingSystemIcon>plugins/DevicesDetection/images/os/WIN.gif</operatingSystemIcon>
+		<operatingSystemCode>WIN</operatingSystemCode>
+		<operatingSystemVersion>7</operatingSystemVersion>
+		<browserFamily>Gecko</browserFamily>
+		<browserFamilyDescription>Gecko (Firefox)</browserFamilyDescription>
+		<browser>Firefox 27.0</browser>
+		<browserName>Firefox</browserName>
+		<browserIcon>plugins/DevicesDetection/images/browsers/FF.gif</browserIcon>
+		<browserCode>FF</browserCode>
+		<browserVersion>27.0</browserVersion>
+		<events>0</events>
+		<continent>Europe</continent>
+		<continentCode>eur</continentCode>
+		<country>Germany</country>
+		<countryCode>de</countryCode>
+		<countryFlag>plugins/UserCountry/images/flags/de.png</countryFlag>
+		<region>Rheinland-Pfalz</region>
+		<regionCode>08</regionCode>
+		<city>Mainz</city>
+		<location>Mainz, Rheinland-Pfalz, Germany</location>
+		<latitude>50</latitude>
+		<longitude>8.271000</longitude>
+		<visitLocalTime>01:33:13</visitLocalTime>
+		<visitLocalHour>1</visitLocalHour>
+		<daysSinceLastVisit>3</daysSinceLastVisit>
+		<provider>Unknown</provider>
+		<providerName>Unknown</providerName>
+		<providerUrl />
+		<customVariables>
+			<row>
+				<customVariableName1>Domain landed</customVariableName1>
+				<customVariableValue1>piwik.org</customVariableValue1>
+			</row>
+		</customVariables>
+		<resolution>2560x1440</resolution>
+		<plugins>pdf, flash, java, quicktime, windowsmedia, silverlight</plugins>
+		<pluginsIcons>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/pdf.gif</pluginIcon>
+				<pluginName>pdf</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/flash.gif</pluginIcon>
+				<pluginName>flash</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/java.gif</pluginIcon>
+				<pluginName>java</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/quicktime.gif</pluginIcon>
+				<pluginName>quicktime</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/windowsmedia.gif</pluginIcon>
+				<pluginName>windowsmedia</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/silverlight.gif</pluginIcon>
+				<pluginName>silverlight</pluginName>
+			</row>
+		</pluginsIcons>
+		
+		
+		
+		
+		
+	</row>
+	<row>
+		<idSite>3</idSite>
+		<idVisit>45</idVisit>
+		<visitIp>93.80.130.163</visitIp>
+		
+		<actionDetails>
+			<row>
+				<type>action</type>
+				<url>http://piwik.org/</url>
+				<pageTitle>Liberate Web Analytics - Analytics - Piwik</pageTitle>
+				<pageIdAction>35</pageIdAction>
+				
+				<pageId>54</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName1>HTTP-code</customVariablePageName1>
+						<customVariablePageValue1>403</customVariablePageValue1>
+					</row>
+				</customVariables>
+				<generationTime>0.18s</generationTime>
+				<timeSpent>2</timeSpent>
+				<timeSpentPretty>2s</timeSpentPretty>
+				<icon />
+				
+			</row>
+			<row>
+				<type>action</type>
+				<url>http://piwik.org/download/</url>
+				<pageTitle>Download - Analytics - Piwik</pageTitle>
+				<pageIdAction>39</pageIdAction>
+				
+				<pageId>56</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName1>HTTP-code</customVariablePageName1>
+						<customVariablePageValue1>500</customVariablePageValue1>
+					</row>
+				</customVariables>
+				<generationTime>0.11s</generationTime>
+				<timeSpent>7</timeSpent>
+				<timeSpentPretty>7s</timeSpentPretty>
+				<icon />
+				
+			</row>
+			<row>
+				<type>download</type>
+				<url>http://builds.piwik.org/latest.zip</url>
+				<pageTitle />
+				<pageIdAction>40</pageIdAction>
+				
+				<pageId>57</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName1>HTTP-code</customVariablePageName1>
+						<customVariablePageValue1>200</customVariablePageValue1>
+					</row>
+				</customVariables>
+				<icon>plugins/Morpheus/images/download.png</icon>
+				
+			</row>
+		</actionDetails>
+		<goalConversions>0</goalConversions>
+		<siteCurrency>USD</siteCurrency>
+		<siteCurrencySymbol>$</siteCurrencySymbol>
+		
+		
+		
+		
+		<userId />
+		<visitorType>new</visitorType>
+		<visitorTypeIcon />
+		<visitConverted>0</visitConverted>
+		<visitConvertedIcon />
+		<visitCount>1</visitCount>
+		
+		<visitEcommerceStatus>none</visitEcommerceStatus>
+		<visitEcommerceStatusIcon />
+		<daysSinceFirstVisit>0</daysSinceFirstVisit>
+		<daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder>
+		<visitDuration>10</visitDuration>
+		<visitDurationPretty>10s</visitDurationPretty>
+		<searches>0</searches>
+		<actions>3</actions>
+		<referrerType>search</referrerType>
+		<referrerTypeName>Search Engines</referrerTypeName>
+		<referrerName>Google</referrerName>
+		<referrerKeyword>Keyword not defined</referrerKeyword>
+		<referrerKeywordPosition>1</referrerKeywordPosition>
+		<referrerUrl>http://piwik.org/faq/general/#faq_144</referrerUrl>
+		<referrerSearchEngineUrl>http://google.com</referrerSearchEngineUrl>
+		<referrerSearchEngineIcon>plugins/Referrers/images/searchEngines/google.com.png</referrerSearchEngineIcon>
+		<languageCode />
+		<language>Unknown</language>
+		<deviceType>Desktop</deviceType>
+		<deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.gif</deviceTypeIcon>
+		<deviceBrand>Unknown</deviceBrand>
+		<deviceModel />
+		<operatingSystem>Windows 8</operatingSystem>
+		<operatingSystemName>Windows</operatingSystemName>
+		<operatingSystemIcon>plugins/DevicesDetection/images/os/WIN.gif</operatingSystemIcon>
+		<operatingSystemCode>WIN</operatingSystemCode>
+		<operatingSystemVersion>8</operatingSystemVersion>
+		<browserFamily>Gecko</browserFamily>
+		<browserFamilyDescription>Gecko (Firefox)</browserFamilyDescription>
+		<browser>Firefox 27.0</browser>
+		<browserName>Firefox</browserName>
+		<browserIcon>plugins/DevicesDetection/images/browsers/FF.gif</browserIcon>
+		<browserCode>FF</browserCode>
+		<browserVersion>27.0</browserVersion>
+		<events>0</events>
+		<continent>Europe</continent>
+		<continentCode>eur</continentCode>
+		<country>Russia</country>
+		<countryCode>ru</countryCode>
+		<countryFlag>plugins/UserCountry/images/flags/ru.png</countryFlag>
+		<region>Moscow City</region>
+		<regionCode>48</regionCode>
+		<city>Moscow</city>
+		<location>Moscow, Moscow City, Russia</location>
+		<latitude>55.751999</latitude>
+		<longitude>37.616001</longitude>
+		<visitLocalTime>04:28:18</visitLocalTime>
+		<visitLocalHour>4</visitLocalHour>
+		<daysSinceLastVisit>0</daysSinceLastVisit>
+		<provider>Unknown</provider>
+		<providerName>Unknown</providerName>
+		<providerUrl />
+		<customVariables>
+			<row>
+				<customVariableName1>Domain landed</customVariableName1>
+				<customVariableValue1>piwik.org</customVariableValue1>
+			</row>
+		</customVariables>
+		<resolution>1920x1080</resolution>
+		<plugins>flash, java</plugins>
+		<pluginsIcons>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/flash.gif</pluginIcon>
+				<pluginName>flash</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/java.gif</pluginIcon>
+				<pluginName>java</pluginName>
+			</row>
+		</pluginsIcons>
+		
+		
+		
+		
+		
+	</row>
+	<row>
+		<idSite>3</idSite>
+		<idVisit>46</idVisit>
+		<visitIp>176.41.226.154</visitIp>
+		
+		<actionDetails>
+			<row>
+				<type>action</type>
+				<url>http://piwik.org/docs/installation/</url>
+				<pageTitle>Hello Installing Piwik - Analytics - Piwik</pageTitle>
+				<pageIdAction>37</pageIdAction>
+				
+				<pageId>55</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName1>HTTP-code</customVariablePageName1>
+						<customVariablePageValue1>200</customVariablePageValue1>
+					</row>
+				</customVariables>
+				<generationTime>0.13s</generationTime>
+				<icon />
+				
+			</row>
+		</actionDetails>
+		<goalConversions>0</goalConversions>
+		<siteCurrency>USD</siteCurrency>
+		<siteCurrencySymbol>$</siteCurrencySymbol>
+		
+		
+		
+		
+		<userId />
+		<visitorType>returning</visitorType>
+		<visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+		<visitConverted>0</visitConverted>
+		<visitConvertedIcon />
+		<visitCount>5</visitCount>
+		
+		<visitEcommerceStatus>none</visitEcommerceStatus>
+		<visitEcommerceStatusIcon />
+		<daysSinceFirstVisit>30</daysSinceFirstVisit>
+		<daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder>
+		<visitDuration>0</visitDuration>
+		<visitDurationPretty>0s</visitDurationPretty>
+		<searches>0</searches>
+		<actions>1</actions>
+		<referrerType>direct</referrerType>
+		<referrerTypeName>Direct Entry</referrerTypeName>
+		<referrerName />
+		<referrerKeyword />
+		<referrerKeywordPosition />
+		<referrerUrl>http://piwik.org/docs/installation/</referrerUrl>
+		<referrerSearchEngineUrl />
+		<referrerSearchEngineIcon />
+		<languageCode />
+		<language>Unknown</language>
+		<deviceType>Desktop</deviceType>
+		<deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.gif</deviceTypeIcon>
+		<deviceBrand>Unknown</deviceBrand>
+		<deviceModel />
+		<operatingSystem>Windows 7</operatingSystem>
+		<operatingSystemName>Windows</operatingSystemName>
+		<operatingSystemIcon>plugins/DevicesDetection/images/os/WIN.gif</operatingSystemIcon>
+		<operatingSystemCode>WIN</operatingSystemCode>
+		<operatingSystemVersion>7</operatingSystemVersion>
+		<browserFamily>Blink</browserFamily>
+		<browserFamilyDescription>Blink (Chrome, Opera)</browserFamilyDescription>
+		<browser>Chrome 33.0</browser>
+		<browserName>Chrome</browserName>
+		<browserIcon>plugins/DevicesDetection/images/browsers/CH.gif</browserIcon>
+		<browserCode>CH</browserCode>
+		<browserVersion>33.0</browserVersion>
+		<events>0</events>
+		<continent>Europe</continent>
+		<continentCode>eur</continentCode>
+		<country>Turkey</country>
+		<countryCode>tr</countryCode>
+		<countryFlag>plugins/UserCountry/images/flags/tr.png</countryFlag>
+		<region>Rize</region>
+		<regionCode>53</regionCode>
+		<city>Esentepe</city>
+		<location>Esentepe, Rize, Turkey</location>
+		<latitude>40.979000</latitude>
+		<longitude>40.415001</longitude>
+		<visitLocalTime>02:32:21</visitLocalTime>
+		<visitLocalHour>2</visitLocalHour>
+		<daysSinceLastVisit>8</daysSinceLastVisit>
+		<provider>Unknown</provider>
+		<providerName>Unknown</providerName>
+		<providerUrl />
+		<customVariables>
+			<row>
+				<customVariableName1>Domain landed</customVariableName1>
+				<customVariableValue1>piwik.org</customVariableValue1>
+			</row>
+		</customVariables>
+		<resolution>1366x768</resolution>
+		<plugins>pdf, flash, java, silverlight</plugins>
+		<pluginsIcons>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/pdf.gif</pluginIcon>
+				<pluginName>pdf</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/flash.gif</pluginIcon>
+				<pluginName>flash</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/java.gif</pluginIcon>
+				<pluginName>java</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/silverlight.gif</pluginIcon>
+				<pluginName>silverlight</pluginName>
+			</row>
+		</pluginsIcons>
+		
+		
+		
+		
+		
+	</row>
+	<row>
+		<idSite>3</idSite>
+		<idVisit>44</idVisit>
+		<visitIp>84.194.72.21</visitIp>
+		
+		<actionDetails>
+			<row>
+				<type>action</type>
+				<url>http://piwik.org/</url>
+				<pageTitle>Liberate Web Analytics - Analytics - Piwik</pageTitle>
+				<pageIdAction>35</pageIdAction>
+				
+				<pageId>53</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName1>HTTP-code</customVariablePageName1>
+						<customVariablePageValue1>200</customVariablePageValue1>
+					</row>
+				</customVariables>
+				<generationTime>0.06s</generationTime>
+				<icon />
+				
+			</row>
+		</actionDetails>
+		<goalConversions>0</goalConversions>
+		<siteCurrency>USD</siteCurrency>
+		<siteCurrencySymbol>$</siteCurrencySymbol>
+		
+		
+		
+		
+		<userId />
+		<visitorType>new</visitorType>
+		<visitorTypeIcon />
+		<visitConverted>0</visitConverted>
+		<visitConvertedIcon />
+		<visitCount>1</visitCount>
+		
+		<visitEcommerceStatus>none</visitEcommerceStatus>
+		<visitEcommerceStatusIcon />
+		<daysSinceFirstVisit>0</daysSinceFirstVisit>
+		<daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder>
+		<visitDuration>0</visitDuration>
+		<visitDurationPretty>0s</visitDurationPretty>
+		<searches>0</searches>
+		<actions>1</actions>
+		<referrerType>website</referrerType>
+		<referrerTypeName>Websites</referrerTypeName>
+		<referrerName>musicforeveryoneradio.be</referrerName>
+		<referrerKeyword />
+		<referrerKeywordPosition />
+		<referrerUrl>http://musicforeveryoneradio.be:2222/CMD_PLUGINS/installatron/index.raw</referrerUrl>
+		<referrerSearchEngineUrl />
+		<referrerSearchEngineIcon />
+		<languageCode />
+		<language>Unknown</language>
+		<deviceType>Desktop</deviceType>
+		<deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.gif</deviceTypeIcon>
+		<deviceBrand>Unknown</deviceBrand>
+		<deviceModel />
+		<operatingSystem>Windows 7</operatingSystem>
+		<operatingSystemName>Windows</operatingSystemName>
+		<operatingSystemIcon>plugins/DevicesDetection/images/os/WIN.gif</operatingSystemIcon>
+		<operatingSystemCode>WIN</operatingSystemCode>
+		<operatingSystemVersion>7</operatingSystemVersion>
+		<browserFamily>Blink</browserFamily>
+		<browserFamilyDescription>Blink (Chrome, Opera)</browserFamilyDescription>
+		<browser>Chrome 33.0</browser>
+		<browserName>Chrome</browserName>
+		<browserIcon>plugins/DevicesDetection/images/browsers/CH.gif</browserIcon>
+		<browserCode>CH</browserCode>
+		<browserVersion>33.0</browserVersion>
+		<events>0</events>
+		<continent>Europe</continent>
+		<continentCode>eur</continentCode>
+		<country>Belgium</country>
+		<countryCode>be</countryCode>
+		<countryFlag>plugins/UserCountry/images/flags/be.png</countryFlag>
+		<region>Limburg</region>
+		<regionCode>05</regionCode>
+		<city>Maaseik</city>
+		<location>Maaseik, Limburg, Belgium</location>
+		<latitude>51.099998</latitude>
+		<longitude>5.800000</longitude>
+		<visitLocalTime>01:34:18</visitLocalTime>
+		<visitLocalHour>1</visitLocalHour>
+		<daysSinceLastVisit>0</daysSinceLastVisit>
+		<provider>Unknown</provider>
+		<providerName>Unknown</providerName>
+		<providerUrl />
+		<customVariables>
+			<row>
+				<customVariableName1>Domain landed</customVariableName1>
+				<customVariableValue1>piwik.org</customVariableValue1>
+			</row>
+		</customVariables>
+		<resolution>1920x1080</resolution>
+		<plugins>pdf, flash, java, silverlight</plugins>
+		<pluginsIcons>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/pdf.gif</pluginIcon>
+				<pluginName>pdf</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/flash.gif</pluginIcon>
+				<pluginName>flash</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/java.gif</pluginIcon>
+				<pluginName>java</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/silverlight.gif</pluginIcon>
+				<pluginName>silverlight</pluginName>
+			</row>
+		</pluginsIcons>
+		
+		
+		
+		
+		
+	</row>
+	<row>
+		<idSite>3</idSite>
+		<idVisit>42</idVisit>
+		<visitIp>0.0.0.0</visitIp>
+		
+		<actionDetails>
+			<row>
+				<type>action</type>
+				<url>http://example.org/index.htm</url>
+				<pageTitle>incredible title!</pageTitle>
+				<pageIdAction>29</pageIdAction>
+				
+				<pageId>49</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName3>_pks</customVariablePageName3>
+						<customVariablePageValue3>SKU2</customVariablePageValue3>
+					</row>
+					<row>
+						<customVariablePageName4>_pkn</customVariablePageName4>
+						<customVariablePageValue4>PRODUCT name</customVariablePageValue4>
+					</row>
+					<row>
+						<customVariablePageName5>_pkc</customVariablePageName5>
+						<customVariablePageValue5>Electronics &amp; Cameras</customVariablePageValue5>
+					</row>
+				</customVariables>
+				<icon />
+				
+			</row>
+		</actionDetails>
+		<goalConversions>0</goalConversions>
+		<siteCurrency>USD</siteCurrency>
+		<siteCurrencySymbol>$</siteCurrencySymbol>
+		
+		
+		
+		
+		<userId />
+		<visitorType>new</visitorType>
+		<visitorTypeIcon />
+		<visitConverted>0</visitConverted>
+		<visitConvertedIcon />
+		<visitCount>1</visitCount>
+		
+		<visitEcommerceStatus>none</visitEcommerceStatus>
+		<visitEcommerceStatusIcon />
+		<daysSinceFirstVisit>0</daysSinceFirstVisit>
+		<daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder>
+		<visitDuration>0</visitDuration>
+		<visitDurationPretty>0s</visitDurationPretty>
+		<searches>0</searches>
+		<actions>1</actions>
+		<referrerType>website</referrerType>
+		<referrerTypeName>Websites</referrerTypeName>
+		<referrerName>piwik.org</referrerName>
+		<referrerKeyword />
+		<referrerKeywordPosition />
+		<referrerUrl>http://piwik.org/contribute%</referrerUrl>
+		<referrerSearchEngineUrl />
+		<referrerSearchEngineIcon />
+		<languageCode />
+		<language>Unknown</language>
+		<deviceType>Desktop</deviceType>
+		<deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.gif</deviceTypeIcon>
+		<deviceBrand>Unknown</deviceBrand>
+		<deviceModel />
+		<operatingSystem>Windows XP</operatingSystem>
+		<operatingSystemName>Windows</operatingSystemName>
+		<operatingSystemIcon>plugins/DevicesDetection/images/os/WIN.gif</operatingSystemIcon>
+		<operatingSystemCode>WIN</operatingSystemCode>
+		<operatingSystemVersion>XP</operatingSystemVersion>
+		<browserFamily>Trident</browserFamily>
+		<browserFamilyDescription>Trident (IE)</browserFamilyDescription>
+		<browser>Internet Explorer 6.0</browser>
+		<browserName>Internet Explorer</browserName>
+		<browserIcon>plugins/DevicesDetection/images/browsers/IE.gif</browserIcon>
+		<browserCode>IE</browserCode>
+		<browserVersion>6.0</browserVersion>
+		<events>0</events>
+		<continent>Unknown</continent>
+		<continentCode>unk</continentCode>
+		<country>Unknown</country>
+		<countryCode>xx</countryCode>
+		<countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+		<region />
+		<regionCode />
+		<city />
+		<location>Unknown</location>
+		<latitude />
+		<longitude />
+		<visitLocalTime>12:34:06</visitLocalTime>
+		<visitLocalHour>12</visitLocalHour>
+		<daysSinceLastVisit>0</daysSinceLastVisit>
+		<provider>Unknown</provider>
+		<providerName>Unknown</providerName>
+		<providerUrl />
+		<customVariables>
+			<row>
+				<customVariableName5>VisitorType</customVariableName5>
+				<customVariableValue5>NewLoggedOut</customVariableValue5>
+			</row>
+		</customVariables>
+		<resolution>1024x768</resolution>
+		<plugins>flash, java</plugins>
+		<pluginsIcons>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/flash.gif</pluginIcon>
+				<pluginName>flash</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/java.gif</pluginIcon>
+				<pluginName>java</pluginName>
+			</row>
+		</pluginsIcons>
+		
+		
+		
+		
+		
+	</row>
+	<row>
+		<idSite>3</idSite>
+		<idVisit>43</idVisit>
+		<visitIp>0.0.0.0</visitIp>
+		
+		<actionDetails>
+			<row>
+				<type>action</type>
+				<url>http://forum.piwik.org/register.php?0,approve=9a94a02145599</url>
+				<pageTitle>Piwik Forums</pageTitle>
+				<pageIdAction>31</pageIdAction>
+				
+				<pageId>50</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName1>HTTP-code</customVariablePageName1>
+						<customVariablePageValue1>200</customVariablePageValue1>
+					</row>
+				</customVariables>
+				<icon />
+				
+			</row>
+		</actionDetails>
+		<goalConversions>0</goalConversions>
+		<siteCurrency>USD</siteCurrency>
+		<siteCurrencySymbol>$</siteCurrencySymbol>
+		
+		
+		
+		
+		<userId />
+		<visitorType>returning</visitorType>
+		<visitorTypeIcon>plugins/Live/images/returningVisitor.gif</visitorTypeIcon>
+		<visitConverted>0</visitConverted>
+		<visitConvertedIcon />
+		<visitCount>1</visitCount>
+		
+		<visitEcommerceStatus>none</visitEcommerceStatus>
+		<visitEcommerceStatusIcon />
+		<daysSinceFirstVisit>444</daysSinceFirstVisit>
+		<daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder>
+		<visitDuration>0</visitDuration>
+		<visitDurationPretty>0s</visitDurationPretty>
+		<searches>0</searches>
+		<actions>1</actions>
+		<referrerType>website</referrerType>
+		<referrerTypeName>Websites</referrerTypeName>
+		<referrerName>sn110w.snt110.mail.live.com</referrerName>
+		<referrerKeyword />
+		<referrerKeywordPosition />
+		<referrerUrl>http://sn110w.snt110.mail.live.com/mail/InboxLight.aspx?n=184083971</referrerUrl>
+		<referrerSearchEngineUrl />
+		<referrerSearchEngineIcon />
+		<languageCode />
+		<language>Unknown</language>
+		<deviceType>Desktop</deviceType>
+		<deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.gif</deviceTypeIcon>
+		<deviceBrand>Unknown</deviceBrand>
+		<deviceModel />
+		<operatingSystem>Windows XP</operatingSystem>
+		<operatingSystemName>Windows</operatingSystemName>
+		<operatingSystemIcon>plugins/DevicesDetection/images/os/WIN.gif</operatingSystemIcon>
+		<operatingSystemCode>WIN</operatingSystemCode>
+		<operatingSystemVersion>XP</operatingSystemVersion>
+		<browserFamily>WebKit</browserFamily>
+		<browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+		<browser>Chrome 11.0</browser>
+		<browserName>Chrome</browserName>
+		<browserIcon>plugins/DevicesDetection/images/browsers/CH.gif</browserIcon>
+		<browserCode>CH</browserCode>
+		<browserVersion>11.0</browserVersion>
+		<events>0</events>
+		<continent>Unknown</continent>
+		<continentCode>unk</continentCode>
+		<country>Unknown</country>
+		<countryCode>xx</countryCode>
+		<countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+		<region />
+		<regionCode />
+		<city />
+		<location>Unknown</location>
+		<latitude />
+		<longitude />
+		<visitLocalTime>08:00:47</visitLocalTime>
+		<visitLocalHour>8</visitLocalHour>
+		<daysSinceLastVisit>444</daysSinceLastVisit>
+		<provider>Unknown</provider>
+		<providerName>Unknown</providerName>
+		<providerUrl />
+		<customVariables>
+			<row>
+				<customVariableName3>Forum status</customVariableName3>
+				<customVariableValue3>Anonymous</customVariableValue3>
+			</row>
+		</customVariables>
+		<resolution>1280x800</resolution>
+		<plugins>pdf, flash, java, director, windowsmedia, gears</plugins>
+		<pluginsIcons>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/pdf.gif</pluginIcon>
+				<pluginName>pdf</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/flash.gif</pluginIcon>
+				<pluginName>flash</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/java.gif</pluginIcon>
+				<pluginName>java</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/director.gif</pluginIcon>
+				<pluginName>director</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/windowsmedia.gif</pluginIcon>
+				<pluginName>windowsmedia</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/gears.gif</pluginIcon>
+				<pluginName>gears</pluginName>
+			</row>
+		</pluginsIcons>
+		
+		
+		
+		
+		
+	</row>
+	<row>
+		<idSite>3</idSite>
+		<idVisit>29</idVisit>
+		<visitIp>0.0.0.0</visitIp>
+		
+		<actionDetails>
+			<row>
+				<type>action</type>
+				<url>http://example.org/index.htm</url>
+				<pageTitle>Looking at Electronics &amp; Cameras page with a page level custom variable</pageTitle>
+				<pageIdAction>29</pageIdAction>
+				
+				<pageId>32</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName5>_pkc</customVariablePageName5>
+						<customVariablePageValue5>Electronics &amp; Cameras</customVariablePageValue5>
+					</row>
+				</customVariables>
+				<timeSpent>0</timeSpent>
+				<timeSpentPretty>0s</timeSpentPretty>
+				<icon />
+				
+			</row>
+			<row>
+				<type>action</type>
+				<url>http://example.org/index.htm</url>
+				<pageTitle>Another Product page with no category</pageTitle>
+				<pageIdAction>29</pageIdAction>
+				
+				<pageId>51</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName3>_pks</customVariablePageName3>
+						<customVariablePageValue3>SKU VERY nice indeed</customVariablePageValue3>
+					</row>
+					<row>
+						<customVariablePageName4>_pkn</customVariablePageName4>
+						<customVariablePageValue4>PRODUCT name</customVariablePageValue4>
+					</row>
+				</customVariables>
+				<timeSpent>0</timeSpent>
+				<timeSpentPretty>0s</timeSpentPretty>
+				<icon />
+				
+			</row>
+			<row>
+				<type>action</type>
+				<url>http://example.org/index.htm</url>
+				<pageTitle>Looking at Electronics &amp; Cameras page with a page level custom variable</pageTitle>
+				<pageIdAction>29</pageIdAction>
+				
+				<pageId>52</pageId>
+				<customVariables>
+					<row>
+						<customVariablePageName5>_pkc</customVariablePageName5>
+						<customVariablePageValue5>Electronics &amp; Cameras</customVariablePageValue5>
+					</row>
+				</customVariables>
+				<icon />
+				
+			</row>
+		</actionDetails>
+		<goalConversions>0</goalConversions>
+		<siteCurrency>USD</siteCurrency>
+		<siteCurrencySymbol>$</siteCurrencySymbol>
+		
+		
+		
+		
+		<userId />
+		<visitorType>new</visitorType>
+		<visitorTypeIcon />
+		<visitConverted>0</visitConverted>
+		<visitConvertedIcon />
+		<visitCount>1</visitCount>
+		
+		<visitEcommerceStatus>none</visitEcommerceStatus>
+		<visitEcommerceStatusIcon />
+		<daysSinceFirstVisit>0</daysSinceFirstVisit>
+		<daysSinceLastEcommerceOrder>0</daysSinceLastEcommerceOrder>
+		<visitDuration>1</visitDuration>
+		<visitDurationPretty>1s</visitDurationPretty>
+		<searches>0</searches>
+		<actions>3</actions>
+		<referrerType>website</referrerType>
+		<referrerTypeName>Websites</referrerTypeName>
+		<referrerName>piwik.org</referrerName>
+		<referrerKeyword />
+		<referrerKeywordPosition />
+		<referrerUrl>http://piwik.org/contribute%</referrerUrl>
+		<referrerSearchEngineUrl />
+		<referrerSearchEngineIcon />
+		<languageCode />
+		<language>Unknown</language>
+		<deviceType>Desktop</deviceType>
+		<deviceTypeIcon>plugins/DevicesDetection/images/screens/normal.gif</deviceTypeIcon>
+		<deviceBrand>Unknown</deviceBrand>
+		<deviceModel />
+		<operatingSystem>Mac 10.6</operatingSystem>
+		<operatingSystemName>Mac</operatingSystemName>
+		<operatingSystemIcon>plugins/DevicesDetection/images/os/MAC.gif</operatingSystemIcon>
+		<operatingSystemCode>MAC</operatingSystemCode>
+		<operatingSystemVersion>10.6</operatingSystemVersion>
+		<browserFamily>WebKit</browserFamily>
+		<browserFamilyDescription>WebKit (Safari, Chrome)</browserFamilyDescription>
+		<browser>Safari 5.0</browser>
+		<browserName>Safari</browserName>
+		<browserIcon>plugins/DevicesDetection/images/browsers/SF.gif</browserIcon>
+		<browserCode>SF</browserCode>
+		<browserVersion>5.0</browserVersion>
+		<events>0</events>
+		<continent>Unknown</continent>
+		<continentCode>unk</continentCode>
+		<country>Unknown</country>
+		<countryCode>xx</countryCode>
+		<countryFlag>plugins/UserCountry/images/flags/xx.png</countryFlag>
+		<region />
+		<regionCode />
+		<city />
+		<location>Unknown</location>
+		<latitude />
+		<longitude />
+		<visitLocalTime>12:34:06</visitLocalTime>
+		<visitLocalHour>12</visitLocalHour>
+		<daysSinceLastVisit>0</daysSinceLastVisit>
+		<provider>Unknown</provider>
+		<providerName>Unknown</providerName>
+		<providerUrl />
+		<customVariables>
+			<row>
+				<customVariableName5>VisitorType</customVariableName5>
+				<customVariableValue5>NewLoggedOut</customVariableValue5>
+			</row>
+		</customVariables>
+		<resolution>1024x768</resolution>
+		<plugins>flash, java</plugins>
+		<pluginsIcons>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/flash.gif</pluginIcon>
+				<pluginName>flash</pluginName>
+			</row>
+			<row>
+				<pluginIcon>plugins/DevicePlugins/images/plugins/java.gif</pluginIcon>
+				<pluginName>java</pluginName>
+			</row>
+		</pluginsIcons>
+		
+		
+		
+		
+		
+	</row>
+</result>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__VisitFrequency.get_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__VisitFrequency.get_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..31c9d4b1b5c1fa02d86e37dbcdb8630159c6d4b4
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__VisitFrequency.get_range.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+	<nb_visits_returning>10</nb_visits_returning>
+	<nb_actions_returning>12</nb_actions_returning>
+	<nb_visits_converted_returning>0</nb_visits_converted_returning>
+	<bounce_count_returning>8</bounce_count_returning>
+	<sum_visit_length_returning>113</sum_visit_length_returning>
+	<max_actions_returning>2</max_actions_returning>
+	<bounce_rate_returning>80%</bounce_rate_returning>
+	<nb_actions_per_visit_returning>1.2</nb_actions_per_visit_returning>
+	<avg_time_on_site_returning>11</avg_time_on_site_returning>
+</result>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__VisitorInterest.getNumberOfVisitsByDaysSinceLast_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__VisitorInterest.getNumberOfVisitsByDaysSinceLast_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5f14888d16e9b4ad2664e7e704661aab141d34ae
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__VisitorInterest.getNumberOfVisitsByDaysSinceLast_range.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+	<row>
+		<label>New visits</label>
+		<nb_visits>5</nb_visits>
+	</row>
+	<row>
+		<label>0 days</label>
+		<nb_visits>3</nb_visits>
+	</row>
+	<row>
+		<label>1 day</label>
+		<nb_visits>1</nb_visits>
+	</row>
+	<row>
+		<label>2 days</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>3 days</label>
+		<nb_visits>1</nb_visits>
+	</row>
+	<row>
+		<label>4 days</label>
+		<nb_visits>1</nb_visits>
+	</row>
+	<row>
+		<label>5 days</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>6 days</label>
+		<nb_visits>1</nb_visits>
+	</row>
+	<row>
+		<label>7 days</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>8-14 days</label>
+		<nb_visits>1</nb_visits>
+	</row>
+	<row>
+		<label>15-30 days</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>31-60 days</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>61-120 days</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>121-364 days</label>
+		<nb_visits>1</nb_visits>
+	</row>
+	<row>
+		<label>365+ days</label>
+		<nb_visits>1</nb_visits>
+	</row>
+</result>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__VisitorInterest.getNumberOfVisitsByVisitCount_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__VisitorInterest.getNumberOfVisitsByVisitCount_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f2c76ea6a263074e296d99984e5cb92ce48f3280
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__VisitorInterest.getNumberOfVisitsByVisitCount_range.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+	<row>
+		<label>1 visit</label>
+		<nb_visits>8</nb_visits>
+		<nb_visits_percentage>53%</nb_visits_percentage>
+	</row>
+	<row>
+		<label>2 visits</label>
+		<nb_visits>2</nb_visits>
+		<nb_visits_percentage>13%</nb_visits_percentage>
+	</row>
+	<row>
+		<label>3 visits</label>
+		<nb_visits>0</nb_visits>
+		<nb_visits_percentage>0%</nb_visits_percentage>
+	</row>
+	<row>
+		<label>4 visits</label>
+		<nb_visits>1</nb_visits>
+		<nb_visits_percentage>7%</nb_visits_percentage>
+	</row>
+	<row>
+		<label>5 visits</label>
+		<nb_visits>2</nb_visits>
+		<nb_visits_percentage>13%</nb_visits_percentage>
+	</row>
+	<row>
+		<label>6 visits</label>
+		<nb_visits>0</nb_visits>
+		<nb_visits_percentage>0%</nb_visits_percentage>
+	</row>
+	<row>
+		<label>7 visits</label>
+		<nb_visits>1</nb_visits>
+		<nb_visits_percentage>7%</nb_visits_percentage>
+	</row>
+	<row>
+		<label>8 visits</label>
+		<nb_visits>0</nb_visits>
+		<nb_visits_percentage>0%</nb_visits_percentage>
+	</row>
+	<row>
+		<label>9-14 visits</label>
+		<nb_visits>0</nb_visits>
+		<nb_visits_percentage>0%</nb_visits_percentage>
+	</row>
+	<row>
+		<label>15-25 visits</label>
+		<nb_visits>0</nb_visits>
+		<nb_visits_percentage>0%</nb_visits_percentage>
+	</row>
+	<row>
+		<label>26-50 visits</label>
+		<nb_visits>0</nb_visits>
+		<nb_visits_percentage>0%</nb_visits_percentage>
+	</row>
+	<row>
+		<label>51-100 visits</label>
+		<nb_visits>1</nb_visits>
+		<nb_visits_percentage>7%</nb_visits_percentage>
+	</row>
+	<row>
+		<label>101-200 visits</label>
+		<nb_visits>0</nb_visits>
+		<nb_visits_percentage>0%</nb_visits_percentage>
+	</row>
+	<row>
+		<label>201+ visits</label>
+		<nb_visits>0</nb_visits>
+		<nb_visits_percentage>0%</nb_visits_percentage>
+	</row>
+</result>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__VisitorInterest.getNumberOfVisitsPerPage_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__VisitorInterest.getNumberOfVisitsPerPage_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f1aca41008c71a319a72974272e1737d2da0482e
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__VisitorInterest.getNumberOfVisitsPerPage_range.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+	<row>
+		<label>1 page</label>
+		<nb_visits>11</nb_visits>
+	</row>
+	<row>
+		<label>2 pages</label>
+		<nb_visits>2</nb_visits>
+	</row>
+	<row>
+		<label>3 pages</label>
+		<nb_visits>2</nb_visits>
+	</row>
+	<row>
+		<label>4 pages</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>5 pages</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>6-7 pages</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>8-10 pages</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>11-14 pages</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>15-20 pages</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>21+ pages</label>
+		<nb_visits>0</nb_visits>
+	</row>
+</result>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__VisitorInterest.getNumberOfVisitsPerVisitDuration_range.xml b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__VisitorInterest.getNumberOfVisitsPerVisitDuration_range.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3dc34ea239cf73beddbcac180b06868a5a52c8b7
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_siteIdThree_TrackedUsingLogReplayWithFixedSiteId__VisitorInterest.getNumberOfVisitsPerVisitDuration_range.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+	<row>
+		<label>0-10s</label>
+		<nb_visits>13</nb_visits>
+	</row>
+	<row>
+		<label>11-30s</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>31-60s</label>
+		<nb_visits>1</nb_visits>
+	</row>
+	<row>
+		<label>1-2 min</label>
+		<nb_visits>1</nb_visits>
+	</row>
+	<row>
+		<label>2-4 min</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>4-7 min</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>7-10 min</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>10-15 min</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>15-30 min</label>
+		<nb_visits>0</nb_visits>
+	</row>
+	<row>
+		<label>30+ min</label>
+		<nb_visits>0</nb_visits>
+	</row>
+</result>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs_withEnhancedAndLast7__MultiSites.getAll_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs_withEnhancedAndLast7__MultiSites.getAll_month.xml
index 4ab55e378e30d181d4714da2489ce01b9fa32101..ddd44050a8e0d69f74d2b6ab2b0cf9274d76a9fa 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs_withEnhancedAndLast7__MultiSites.getAll_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs_withEnhancedAndLast7__MultiSites.getAll_month.xml
@@ -17,6 +17,22 @@
 			<group />
 			<main_url>http://piwik.net</main_url>
 		</row>
+		<row>
+			<label>Piwik test three</label>
+			<nb_visits>3</nb_visits>
+			<nb_actions>5</nb_actions>
+			<nb_pageviews>5</nb_pageviews>
+			<revenue>0</revenue>
+			<nb_conversions>0</nb_conversions>
+			<visits_evolution>100%</visits_evolution>
+			<actions_evolution>100%</actions_evolution>
+			<pageviews_evolution>100%</pageviews_evolution>
+			<revenue_evolution>0%</revenue_evolution>
+			<nb_conversions_evolution>0%</nb_conversions_evolution>
+			<idsite>3</idsite>
+			<group />
+			<main_url>http://example-site-three.com</main_url>
+		</row>
 		<row>
 			<label>Piwik test two</label>
 			<nb_visits>1</nb_visits>
@@ -67,6 +83,22 @@
 			<group />
 			<main_url>http://example-site-two.com</main_url>
 		</row>
+		<row>
+			<label>Piwik test three</label>
+			<nb_visits>0</nb_visits>
+			<nb_actions>0</nb_actions>
+			<nb_pageviews>0</nb_pageviews>
+			<revenue>0</revenue>
+			<nb_conversions>0</nb_conversions>
+			<visits_evolution>-100%</visits_evolution>
+			<actions_evolution>-100%</actions_evolution>
+			<pageviews_evolution>-100%</pageviews_evolution>
+			<revenue_evolution>0%</revenue_evolution>
+			<nb_conversions_evolution>0%</nb_conversions_evolution>
+			<idsite>3</idsite>
+			<group />
+			<main_url>http://example-site-three.com</main_url>
+		</row>
 	</result>
 	<result date="2012-10">
 		<row>
@@ -101,6 +133,22 @@
 			<group />
 			<main_url>http://example-site-two.com</main_url>
 		</row>
+		<row>
+			<label>Piwik test three</label>
+			<nb_visits>0</nb_visits>
+			<nb_actions>0</nb_actions>
+			<nb_pageviews>0</nb_pageviews>
+			<revenue>0</revenue>
+			<nb_conversions>0</nb_conversions>
+			<visits_evolution>0%</visits_evolution>
+			<actions_evolution>0%</actions_evolution>
+			<pageviews_evolution>0%</pageviews_evolution>
+			<revenue_evolution>0%</revenue_evolution>
+			<nb_conversions_evolution>0%</nb_conversions_evolution>
+			<idsite>3</idsite>
+			<group />
+			<main_url>http://example-site-three.com</main_url>
+		</row>
 	</result>
 	<result date="2012-11">
 		<row>
@@ -135,6 +183,22 @@
 			<group />
 			<main_url>http://example-site-two.com</main_url>
 		</row>
+		<row>
+			<label>Piwik test three</label>
+			<nb_visits>0</nb_visits>
+			<nb_actions>0</nb_actions>
+			<nb_pageviews>0</nb_pageviews>
+			<revenue>0</revenue>
+			<nb_conversions>0</nb_conversions>
+			<visits_evolution>0%</visits_evolution>
+			<actions_evolution>0%</actions_evolution>
+			<pageviews_evolution>0%</pageviews_evolution>
+			<revenue_evolution>0%</revenue_evolution>
+			<nb_conversions_evolution>0%</nb_conversions_evolution>
+			<idsite>3</idsite>
+			<group />
+			<main_url>http://example-site-three.com</main_url>
+		</row>
 	</result>
 	<result date="2012-12">
 		<row>
@@ -169,6 +233,22 @@
 			<group />
 			<main_url>http://example-site-two.com</main_url>
 		</row>
+		<row>
+			<label>Piwik test three</label>
+			<nb_visits>0</nb_visits>
+			<nb_actions>0</nb_actions>
+			<nb_pageviews>0</nb_pageviews>
+			<revenue>0</revenue>
+			<nb_conversions>0</nb_conversions>
+			<visits_evolution>0%</visits_evolution>
+			<actions_evolution>0%</actions_evolution>
+			<pageviews_evolution>0%</pageviews_evolution>
+			<revenue_evolution>0%</revenue_evolution>
+			<nb_conversions_evolution>0%</nb_conversions_evolution>
+			<idsite>3</idsite>
+			<group />
+			<main_url>http://example-site-three.com</main_url>
+		</row>
 	</result>
 	<result date="2013-01">
 		<row>
@@ -203,6 +283,22 @@
 			<group />
 			<main_url>http://example-site-two.com</main_url>
 		</row>
+		<row>
+			<label>Piwik test three</label>
+			<nb_visits>0</nb_visits>
+			<nb_actions>0</nb_actions>
+			<nb_pageviews>0</nb_pageviews>
+			<revenue>0</revenue>
+			<nb_conversions>0</nb_conversions>
+			<visits_evolution>0%</visits_evolution>
+			<actions_evolution>0%</actions_evolution>
+			<pageviews_evolution>0%</pageviews_evolution>
+			<revenue_evolution>0%</revenue_evolution>
+			<nb_conversions_evolution>0%</nb_conversions_evolution>
+			<idsite>3</idsite>
+			<group />
+			<main_url>http://example-site-three.com</main_url>
+		</row>
 	</result>
 	<result date="2013-02">
 		<row>
@@ -237,5 +333,21 @@
 			<group />
 			<main_url>http://example-site-two.com</main_url>
 		</row>
+		<row>
+			<label>Piwik test three</label>
+			<nb_visits>0</nb_visits>
+			<nb_actions>0</nb_actions>
+			<nb_pageviews>0</nb_pageviews>
+			<revenue>0</revenue>
+			<nb_conversions>0</nb_conversions>
+			<visits_evolution>0%</visits_evolution>
+			<actions_evolution>0%</actions_evolution>
+			<pageviews_evolution>0%</pageviews_evolution>
+			<revenue_evolution>0%</revenue_evolution>
+			<nb_conversions_evolution>0%</nb_conversions_evolution>
+			<idsite>3</idsite>
+			<group />
+			<main_url>http://example-site-three.com</main_url>
+		</row>
 	</result>
 </results>
\ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Actions.getPageTitles_firstSite_lastN__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Actions.getPageTitles_firstSite_lastN__API.getProcessedReport_day.xml
index 2f9c04a59cb6501305f9b302811f85c48d068015..9a62e63315085833b94c00ff8ad8ee7e0a75a1a6 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Actions.getPageTitles_firstSite_lastN__API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Actions.getPageTitles_firstSite_lastN__API.getProcessedReport_day.xml
@@ -171,51 +171,51 @@
 		<result prettyDate="Tuesday 5 January 2010">
 			<row>
 				
-				<idsubdatatable>17180</idsubdatatable>
+				<idsubdatatable>17264</idsubdatatable>
 			</row>
 			<row>
 				
-				<idsubdatatable>17179</idsubdatatable>
+				<idsubdatatable>17263</idsubdatatable>
 			</row>
 		</result>
 		<result prettyDate="Wednesday 6 January 2010">
 			<row>
 				
-				<idsubdatatable>17184</idsubdatatable>
+				<idsubdatatable>17268</idsubdatatable>
 			</row>
 			<row>
 				
-				<idsubdatatable>17183</idsubdatatable>
+				<idsubdatatable>17267</idsubdatatable>
 			</row>
 		</result>
 		<result prettyDate="Thursday 7 January 2010">
 			<row>
 				
-				<idsubdatatable>17188</idsubdatatable>
+				<idsubdatatable>17272</idsubdatatable>
 			</row>
 			<row>
 				
-				<idsubdatatable>17187</idsubdatatable>
+				<idsubdatatable>17271</idsubdatatable>
 			</row>
 		</result>
 		<result prettyDate="Friday 8 January 2010">
 			<row>
 				
-				<idsubdatatable>17192</idsubdatatable>
+				<idsubdatatable>17276</idsubdatatable>
 			</row>
 			<row>
 				
-				<idsubdatatable>17191</idsubdatatable>
+				<idsubdatatable>17275</idsubdatatable>
 			</row>
 		</result>
 		<result prettyDate="Saturday 9 January 2010">
 			<row>
 				
-				<idsubdatatable>17196</idsubdatatable>
+				<idsubdatatable>17280</idsubdatatable>
 			</row>
 			<row>
 				
-				<idsubdatatable>17195</idsubdatatable>
+				<idsubdatatable>17279</idsubdatatable>
 			</row>
 		</result>
 	</reportMetadata>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Referrers.getWebsites_firstSite_lastN__API.getProcessedReport_day.xml b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Referrers.getWebsites_firstSite_lastN__API.getProcessedReport_day.xml
index fc34b04bc86200c89747e83b51132bf44109ac52..fc67ca9f060c1dae3b5ba4f86f51a3131e602028 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Referrers.getWebsites_firstSite_lastN__API.getProcessedReport_day.xml
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_Referrers.getWebsites_firstSite_lastN__API.getProcessedReport_day.xml
@@ -115,14 +115,14 @@
 			<row>
 				
 				<segment>referrerName==referrer.com</segment>
-				<idsubdatatable>17131</idsubdatatable>
+				<idsubdatatable>17215</idsubdatatable>
 			</row>
 		</result>
 		<result prettyDate="Monday 4 January 2010">
 			<row>
 				
 				<segment>referrerName==referrer.com</segment>
-				<idsubdatatable>17133</idsubdatatable>
+				<idsubdatatable>17217</idsubdatatable>
 			</row>
 		</result>
 		<result prettyDate="Tuesday 5 January 2010" />
@@ -132,14 +132,14 @@
 			<row>
 				
 				<segment>referrerName==referrer.com</segment>
-				<idsubdatatable>17138</idsubdatatable>
+				<idsubdatatable>17222</idsubdatatable>
 			</row>
 		</result>
 		<result prettyDate="Saturday 9 January 2010">
 			<row>
 				
 				<segment>referrerName==referrer.com</segment>
-				<idsubdatatable>17140</idsubdatatable>
+				<idsubdatatable>17224</idsubdatatable>
 			</row>
 		</result>
 	</reportMetadata>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml
index b51ff58d3065e23ddb42eecbf4285d45186bfb49..463adff33902d8f4c65d90d76668a751019bb28a 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getSegmentsMetadata.xml
@@ -198,7 +198,7 @@
 		<category>Visit</category>
 		<name>Visit ID</name>
 		<segment>visitId</segment>
-		<acceptedValues>Any integer. </acceptedValues>
+		<acceptedValues>Any integer.</acceptedValues>
 		<permission>1</permission>
 	</row>
 	<row>
diff --git a/tests/PHPUnit/Unit/AssetManager/PluginMock.php b/tests/PHPUnit/Unit/AssetManager/PluginMock.php
index c29c03dd67ac42203fe5ec3ab8855c9bf45b12a7..9755facf49a5b8e3f6cdf940cace4a0866254dea 100644
--- a/tests/PHPUnit/Unit/AssetManager/PluginMock.php
+++ b/tests/PHPUnit/Unit/AssetManager/PluginMock.php
@@ -45,7 +45,7 @@ class PluginMock extends Plugin
         $this->pluginName = $name;
     }
 
-    public function getListHooksRegistered()
+    public function registerEvents()
     {
         return array(
             'AssetManager.getJavaScriptFiles' => 'getJsFiles',
diff --git a/tests/PHPUnit/Unit/ConfigTest.php b/tests/PHPUnit/Unit/ConfigTest.php
index 9121c6608b9429f405d862d582dbaab6d4c9f2e2..d92e1525b61d5e68216f5906f5d1aab5999c77cc 100644
--- a/tests/PHPUnit/Unit/ConfigTest.php
+++ b/tests/PHPUnit/Unit/ConfigTest.php
@@ -378,7 +378,9 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
         $sourceConfigFile = PIWIK_INCLUDE_PATH . '/tests/resources/Config/config.ini.php';
         $configFile = PIWIK_INCLUDE_PATH . '/tmp/tmp.config.ini.php';
 
-        @unlink($configFile);
+        if(file_exists($configFile)){
+            @unlink($configFile);
+        }
         copy($sourceConfigFile, $configFile);
 
         $config = new Config(new GlobalSettingsProvider($sourceConfigFile, $configFile));
@@ -386,7 +388,9 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
 
         $this->assertEquals(file_get_contents($sourceConfigFile), file_get_contents($configFile));
 
-        @unlink($configFile);
+        if(file_exists($configFile)){
+            @unlink($configFile);
+        }
     }
 
     public function testFromGlobalConfig()
diff --git a/tests/PHPUnit/Unit/DateTest.php b/tests/PHPUnit/Unit/DateTest.php
index dadbba646183858abc58aa5d3d0dfb37812541c6..ba18ce1e709ede70b455a21f63ad885a0b283456 100644
--- a/tests/PHPUnit/Unit/DateTest.php
+++ b/tests/PHPUnit/Unit/DateTest.php
@@ -265,6 +265,23 @@ class DateTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($dateExpected->getTimestamp(), $date->getTimestamp());
     }
 
+    /**
+     * @group Core
+     */
+    public function testSubSeconds()
+    {
+        $date = Date::factory('2010-03-01 00:01:25');
+        $dateExpected = Date::factory('2010-03-01 00:00:54');
+
+        $date = $date->subSeconds(31);
+        $this->assertSame($dateExpected->getTimestamp(), $date->getTimestamp());
+
+        $date = Date::factory('2010-03-01 00:01:25');
+        $dateExpected = Date::factory('2010-03-01 00:01:36');
+        $date = $date->subSeconds(-11);
+        $this->assertSame($dateExpected->getTimestamp(), $date->getTimestamp());
+    }
+
     /**
      * @group Core
      */
diff --git a/tests/PHPUnit/Unit/DeprecatedMethodsTest.php b/tests/PHPUnit/Unit/DeprecatedMethodsTest.php
index a35a260b7c30017e2b937c0b74f5488ee41df2cd..442280cb8ddce81cab6a3d5c4ca6c44d7c195e58 100644
--- a/tests/PHPUnit/Unit/DeprecatedMethodsTest.php
+++ b/tests/PHPUnit/Unit/DeprecatedMethodsTest.php
@@ -69,6 +69,7 @@ class DeprecatedMethodsTest extends \PHPUnit_Framework_TestCase
 
         $this->assertDeprecatedMethodIsRemovedInPiwik3('\Piwik\Menu\MenuAbstract', 'add');
         $this->assertDeprecatedMethodIsRemovedInPiwik3('\Piwik\Archive', 'getDataTableFromArchive');
+        $this->assertDeprecatedMethodIsRemovedInPiwik3('\Piwik\Plugin', 'getListHooksRegistered');
     }
 
     private function assertDeprecatedMethodIsRemoved($className, $method, $removalDate)
diff --git a/tests/PHPUnit/Unit/Metrics/FormatterTest.php b/tests/PHPUnit/Unit/Metrics/FormatterTest.php
index 36def63bb14ee1ea24c9796a597b52bec95f34a1..f0f1e618a9e84ec6456dfe1ef3ed3080ed4bed80 100644
--- a/tests/PHPUnit/Unit/Metrics/FormatterTest.php
+++ b/tests/PHPUnit/Unit/Metrics/FormatterTest.php
@@ -74,7 +74,7 @@ class FormatterTest extends \PHPUnit_Framework_TestCase
      */
     public function test_getPrettyNumber_ReturnsCorrectResult_WhenLocaleIsEuropean($number, $expected)
     {
-        $locale = setlocale(LC_ALL, array('de', 'de_DE', 'ge', 'de_DE.utf8'));
+        $locale = setlocale(LC_ALL, array('de-AT', 'de_DE', 'de', 'ge', 'de_DE.utf8'));
         if (empty($locale)) {
             $this->markTestSkipped("de_DE locale is not present on this system");
         }
@@ -112,7 +112,7 @@ class FormatterTest extends \PHPUnit_Framework_TestCase
      */
     public function test_getPrettyTimeFromSeconds_ReturnsCorrectResult($seconds, $expected)
     {
-        if (($seconds * 100) > PHP_INT_MAX) {
+        if (($seconds * 100) > PHP_INT_MAX || ($seconds * 100 * -1) > PHP_INT_MAX) {
             $this->markTestSkipped("Will not pass on 32-bit machine.");
         }
 
diff --git a/tests/PHPUnit/Unit/UrlHelperTest.php b/tests/PHPUnit/Unit/UrlHelperTest.php
index 8ae396d7dfa536685185877bc834b3fe3ba115d6..49c33cc0df22d1d377aba1731bfc5fc29b283985 100644
--- a/tests/PHPUnit/Unit/UrlHelperTest.php
+++ b/tests/PHPUnit/Unit/UrlHelperTest.php
@@ -1,262 +1,262 @@
-<?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\Unit;
-
-use Piwik\Tests\Framework\TestCase\SystemTestCase;
-use Piwik\UrlHelper;
-use Spyc;
-
-class UrlHelperTest extends \PHPUnit_Framework_TestCase
-{
-    /**
-     * Dataprovider for testIsUrl
-     */
-    public function getUrls()
-    {
-        return array(
-            // valid urls
-            array('http://piwik.org', true),
-            array('http://www.piwik.org', true),
-            array('https://piwik.org', true),
-            array('https://piwik.org/dir/dir2/?oeajkgea7aega=&ge=a', true),
-            array('ftp://www.pi-wik.org', true),
-            array('news://www.pi-wik.org', true),
-            array('https://www.tëteâ.org', true),
-            array('http://汉语/漢語.cn', true), //chinese
-
-            // valid network-path reference RFC3986
-            array('//piwik.org', true),
-            array('//piwik/hello?world=test&test', true),
-            array('//piwik.org/hello?world=test&test', true),
-
-            // invalid urls
-            array('it doesnt look like url', false),
-            array('/index?page=test', false),
-            array('http:/index?page=test', false),
-            array('http/index?page=test', false),
-            array('test.html', false),
-            array('/\/\/\/\/\/\\\http://test.com////', false),
-            array('jmleslangues.php', false),
-            array('http://', false),
-            array(' http://', false),
-            array('testhttp://test.com', false),
-        );
-    }
-
-    /**
-     * @dataProvider getUrls
-     * @group Core
-     */
-    public function testIsUrl($url, $isValid)
-    {
-        $this->assertEquals($isValid, UrlHelper::isLookLikeUrl($url), "$url failed test");
-    }
-
-    /**
-     * Dataprovider for testGetParameterFromQueryString
-     */
-    public function getQueryStrings()
-    {
-        return array( // querystring, parameter, expected value
-            array('x=1', 'x', '1'),
-            array('?x=1', 'x', '1'),
-            array('?x=y==1', 'x', 'y==1'),
-            array('x[]=', 'x', array('')),
-            array('x[]=1', 'x', array('1')),
-            array('x[]=y==1', 'x', array('y==1')),
-            array('?x[]=1&x[]=2', 'x', array('1', '2')),
-            array('?x%5b%5d=3&x[]=4', 'x', array('3', '4')),
-            array('?x%5B]=5&x[%5D=6', 'x', array('5', '6')),
-            array('toto=mama&mama=&tuytyt=teaoi&toto=mama second value', 'tuytyt', 'teaoi'),
-
-            // don't unescape the value, otherwise it becomes
-            //   ?x[]=A&y=1
-            array('?x%5B%5D=A%26y%3D1', 'x', array('A%26y%3D1')),
-            //   ?z=y&x[]=1
-            array('?z=y%26x%5b%5d%3d1', 'x', null),
-
-            // strange characters
-            array('toto=mama&mama=&tuytyt=Поиск в Интернете  Поиск страниц на русском _*()!$!£$^!£$%&toto=mama second value', 'tuytyt', 'Поиск в Интернете  Поиск страниц на русском _*()!$!£$^!£$%'),
-
-            // twice the parameter => returns the last value in the url
-            array('toto=mama&mama=&tuytyt=teaoi&toto=mama second value', 'toto', 'mama second value'),
-
-            // empty param
-            array('toto=mama&mama=&tuytyt=teaoi', 'mama', ''),
-
-            // missing parameter value => returns false
-            array('x', 'x', false),
-            array('toto=mama&mama&tuytyt=teaoi', 'mama', false),
-
-            // param not found => null
-            array('toto=mama&mama=titi', 'tot', null),
-
-            // empty query string => null
-            array('', 'test', null),
-        );
-    }
-
-    /**
-     * @dataProvider getQueryStrings
-     * @group Core
-     */
-    public function testGetParameterFromQueryString($queryString, $parameter, $expected)
-    {
-        $this->assertSame($expected, UrlHelper::getParameterFromQueryString($queryString, $parameter));
-    }
-
-    /**
-     * @group Core
-     */
-    public function testGetPathAndQueryFromUrl()
-    {
-        $this->assertEquals('test/index.php?module=CoreHome', UrlHelper::getPathAndQueryFromUrl('http://piwik.org/test/index.php?module=CoreHome'));
-    }
-
-    /**
-     * @group Core
-     */
-    public function testGetPathAndQueryFromNonUrl()
-    {
-        $this->assertEquals('Others', UrlHelper::getPathAndQueryFromUrl('Others'));
-    }
-
-    /**
-     * @group Core
-     */
-    public function testGetArrayFromQueryString()
-    {
-        $expected = array(
-            'a' => false,
-            'b' => '',
-            'c' => '1',
-            'd' => array(false),
-            'e' => array(''),
-            'f' => array('a'),
-            'g' => array('b', 'c'),
-        );
-        $this->assertEquals(serialize($expected), serialize(UrlHelper::getArrayFromQueryString('a&b=&c=1&d[]&e[]=&f[]=a&g[]=b&g[]=c')));
-    }
-
-    /**
-     * Dataprovider for testExtractSearchEngineInformationFromUrl
-     */
-    public function getSearchEngineUrls()
-    {
-        return Spyc::YAMLLoad(PIWIK_PATH_TEST_TO_ROOT .'/tests/resources/extractSearchEngineInformationFromUrlTests.yml');
-    }
-
-    /**
-     * @dataProvider getSearchEngineUrls
-     * @group Core
-     */
-    public function testExtractSearchEngineInformationFromUrl($url, $engine, $keywords)
-    {
-        $this->includeDataFilesForSearchEngineTest();
-        $returnedValue = UrlHelper::extractSearchEngineInformationFromUrl($url);
-
-        $exptectedValue = false;
-
-        if (!empty($engine)) {
-            $exptectedValue = array('name' => $engine, 'keywords' => $keywords);
-        }
-
-        $this->assertEquals($exptectedValue, $returnedValue);
-    }
-
-    /**
-     * Dataprovider for testGetLossyUrl
-     */
-    public function getLossyUrls()
-    {
-        return array(
-            array('example.com', 'example.com'),
-            array('m.example.com', 'example.com'),
-            array('www.example.com', 'example.com'),
-            array('search.example.com', 'example.com'),
-            array('example.ca', 'example.{}'),
-            array('us.example.com', '{}.example.com'),
-            array('www.m.example.ca', 'example.{}'),
-            array('www.google.com.af', 'google.{}'),
-            array('www.google.co.uk', 'google.{}'),
-            array('images.de.ask.com', 'images.{}.ask.com'),
-        );
-    }
-
-    /**
-     * @dataProvider getLossyUrls
-     * @group Core
-     */
-    public function testGetLossyUrl($input, $expected)
-    {
-        $this->assertEquals($expected, UrlHelper::getLossyUrl($input));
-    }
-
-    private function includeDataFilesForSearchEngineTest()
-    {
-        include "DataFiles/SearchEngines.php";
-    }
-
-    /**
-     * @group Core
-     */
-    public function test_getHostFromUrl()
-    {
-        $this->assertEquals('', UrlHelper::getHostFromUrl(''));
-        $this->assertEquals('', UrlHelper::getHostFromUrl(null));
-        $this->assertEquals('localhost', UrlHelper::getHostFromUrl('http://localhost'));
-        $this->assertEquals('localhost', UrlHelper::getHostFromUrl('http://localhost/path'));
-        $this->assertEquals('localhost', UrlHelper::getHostFromUrl('localhost/path'));
-        $this->assertEquals('sub.localhost', UrlHelper::getHostFromUrl('sub.localhost/path'));
-        $this->assertEquals('sub.localhost', UrlHelper::getHostFromUrl('http://sub.localhost/path/?query=test'));
-
-        if(SystemTestCase::isPhpVersion53()) {
-            //parse_url was fixed in 5,4,7
-            //  Fixed host recognition when scheme is omitted and a leading component separator is present.
-            // http://php.net/parse_url
-            return;
-        }
-
-        $this->assertEquals('localhost', UrlHelper::getHostFromUrl('//localhost/path'));
-        $this->assertEquals('localhost', UrlHelper::getHostFromUrl('//localhost/path?test=test2'));
-        $this->assertEquals('example.org', UrlHelper::getHostFromUrl('//example.org/path'));
-        $this->assertEquals('example.org', UrlHelper::getHostFromUrl('//example.org/path?test=test2'));
-
-    }
-
-    /**
-     * @group Core
-     */
-    public function test_getQueryFromUrl_ShouldReturnEmtpyString_IfNoQuery()
-    {
-        $this->assertEquals('', UrlHelper::getQueryFromUrl('', array()));
-        $this->assertEquals('', UrlHelper::getQueryFromUrl(null, array()));
-        $this->assertEquals('', UrlHelper::getQueryFromUrl('http://localhost/path', array()));
-    }
-
-    /**
-     * @group Core
-     */
-    public function test_getQueryFromUrl_ShouldReturnOnlyTheQueryPartOfTheUrl_IfNoAdditionalParamsGiven()
-    {
-        $this->assertEquals('foo=bar&foo2=bar2&test[]=1', UrlHelper::getQueryFromUrl('http://example.com/?foo=bar&foo2=bar2&test[]=1', array()));
-        $this->assertEquals('foo=bar&foo2=bar2&test[]=1', UrlHelper::getQueryFromUrl('/?foo=bar&foo2=bar2&test[]=1', array()));
-        $this->assertEquals('segment=pageTitle!@%40Hello%20World;pageTitle!@Peace%20Love%20', UrlHelper::getQueryFromUrl('/?segment=pageTitle!@%40Hello%20World;pageTitle!@Peace%20Love%20', array()));
-    }
-
-    /**
-     * @group Core
-     */
-    public function test_getQueryFromUrl_ShouldAddAdditionalParams_IfGiven()
-    {
-        $this->assertEquals('foo=bar&foo2=bar2&test[]=1&add=foo', UrlHelper::getQueryFromUrl('http://example.com/?foo=bar&foo2=bar2&test[]=1', array('add' => 'foo')));
-        $this->assertEquals('add=foo', UrlHelper::getQueryFromUrl('/', array('add' => 'foo')));
-        $this->assertEquals('add[]=foo&add[]=test', UrlHelper::getQueryFromUrl('/', array('add' => array('foo', 'test'))));
-    }
+<?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\Unit;
+
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
+use Piwik\UrlHelper;
+use Spyc;
+
+class UrlHelperTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * Dataprovider for testIsUrl
+     */
+    public function getUrls()
+    {
+        return array(
+            // valid urls
+            array('http://piwik.org', true),
+            array('http://www.piwik.org', true),
+            array('https://piwik.org', true),
+            array('https://piwik.org/dir/dir2/?oeajkgea7aega=&ge=a', true),
+            array('ftp://www.pi-wik.org', true),
+            array('news://www.pi-wik.org', true),
+            array('https://www.tëteâ.org', true),
+            array('http://汉语/漢語.cn', true), //chinese
+
+            // valid network-path reference RFC3986
+            array('//piwik.org', true),
+            array('//piwik/hello?world=test&test', true),
+            array('//piwik.org/hello?world=test&test', true),
+
+            // invalid urls
+            array('it doesnt look like url', false),
+            array('/index?page=test', false),
+            array('http:/index?page=test', false),
+            array('http/index?page=test', false),
+            array('test.html', false),
+            array('/\/\/\/\/\/\\\http://test.com////', false),
+            array('jmleslangues.php', false),
+            array('http://', false),
+            array(' http://', false),
+            array('testhttp://test.com', false),
+        );
+    }
+
+    /**
+     * @dataProvider getUrls
+     * @group Core
+     */
+    public function testIsUrl($url, $isValid)
+    {
+        $this->assertEquals($isValid, UrlHelper::isLookLikeUrl($url), "$url failed test");
+    }
+
+    /**
+     * Dataprovider for testGetParameterFromQueryString
+     */
+    public function getQueryStrings()
+    {
+        return array( // querystring, parameter, expected value
+            array('x=1', 'x', '1'),
+            array('?x=1', 'x', '1'),
+            array('?x=y==1', 'x', 'y==1'),
+            array('x[]=', 'x', array('')),
+            array('x[]=1', 'x', array('1')),
+            array('x[]=y==1', 'x', array('y==1')),
+            array('?x[]=1&x[]=2', 'x', array('1', '2')),
+            array('?x%5b%5d=3&x[]=4', 'x', array('3', '4')),
+            array('?x%5B]=5&x[%5D=6', 'x', array('5', '6')),
+            array('toto=mama&mama=&tuytyt=teaoi&toto=mama second value', 'tuytyt', 'teaoi'),
+
+            // don't unescape the value, otherwise it becomes
+            //   ?x[]=A&y=1
+            array('?x%5B%5D=A%26y%3D1', 'x', array('A%26y%3D1')),
+            //   ?z=y&x[]=1
+            array('?z=y%26x%5b%5d%3d1', 'x', null),
+
+            // strange characters
+            array('toto=mama&mama=&tuytyt=Поиск в Интернете  Поиск страниц на русском _*()!$!£$^!£$%&toto=mama second value', 'tuytyt', 'Поиск в Интернете  Поиск страниц на русском _*()!$!£$^!£$%'),
+
+            // twice the parameter => returns the last value in the url
+            array('toto=mama&mama=&tuytyt=teaoi&toto=mama second value', 'toto', 'mama second value'),
+
+            // empty param
+            array('toto=mama&mama=&tuytyt=teaoi', 'mama', ''),
+
+            // missing parameter value => returns false
+            array('x', 'x', false),
+            array('toto=mama&mama&tuytyt=teaoi', 'mama', false),
+
+            // param not found => null
+            array('toto=mama&mama=titi', 'tot', null),
+
+            // empty query string => null
+            array('', 'test', null),
+        );
+    }
+
+    /**
+     * @dataProvider getQueryStrings
+     * @group Core
+     */
+    public function testGetParameterFromQueryString($queryString, $parameter, $expected)
+    {
+        $this->assertSame($expected, UrlHelper::getParameterFromQueryString($queryString, $parameter));
+    }
+
+    /**
+     * @group Core
+     */
+    public function testGetPathAndQueryFromUrl()
+    {
+        $this->assertEquals('test/index.php?module=CoreHome', UrlHelper::getPathAndQueryFromUrl('http://piwik.org/test/index.php?module=CoreHome'));
+    }
+
+    /**
+     * @group Core
+     */
+    public function testGetPathAndQueryFromNonUrl()
+    {
+        $this->assertEquals('Others', UrlHelper::getPathAndQueryFromUrl('Others'));
+    }
+
+    /**
+     * @group Core
+     */
+    public function testGetArrayFromQueryString()
+    {
+        $expected = array(
+            'a' => false,
+            'b' => '',
+            'c' => '1',
+            'd' => array(false),
+            'e' => array(''),
+            'f' => array('a'),
+            'g' => array('b', 'c'),
+        );
+        $this->assertEquals(serialize($expected), serialize(UrlHelper::getArrayFromQueryString('a&b=&c=1&d[]&e[]=&f[]=a&g[]=b&g[]=c')));
+    }
+
+    /**
+     * Dataprovider for testExtractSearchEngineInformationFromUrl
+     */
+    public function getSearchEngineUrls()
+    {
+        return Spyc::YAMLLoad(PIWIK_PATH_TEST_TO_ROOT .'/tests/resources/extractSearchEngineInformationFromUrlTests.yml');
+    }
+
+    /**
+     * @dataProvider getSearchEngineUrls
+     * @group Core
+     */
+    public function testExtractSearchEngineInformationFromUrl($url, $engine, $keywords)
+    {
+        $this->includeDataFilesForSearchEngineTest();
+        $returnedValue = UrlHelper::extractSearchEngineInformationFromUrl($url);
+
+        $exptectedValue = false;
+
+        if (!empty($engine)) {
+            $exptectedValue = array('name' => $engine, 'keywords' => $keywords);
+        }
+
+        $this->assertEquals($exptectedValue, $returnedValue);
+    }
+
+    /**
+     * Dataprovider for testGetLossyUrl
+     */
+    public function getLossyUrls()
+    {
+        return array(
+            array('example.com', 'example.com'),
+            array('m.example.com', 'example.com'),
+            array('www.example.com', 'example.com'),
+            array('search.example.com', 'example.com'),
+            array('example.ca', 'example.{}'),
+            array('us.example.com', '{}.example.com'),
+            array('www.m.example.ca', 'example.{}'),
+            array('www.google.com.af', 'google.{}'),
+            array('www.google.co.uk', 'google.{}'),
+            array('images.de.ask.com', 'images.{}.ask.com'),
+        );
+    }
+
+    /**
+     * @dataProvider getLossyUrls
+     * @group Core
+     */
+    public function testGetLossyUrl($input, $expected)
+    {
+        $this->assertEquals($expected, UrlHelper::getLossyUrl($input));
+    }
+
+    private function includeDataFilesForSearchEngineTest()
+    {
+        include "DataFiles/SearchEngines.php";
+    }
+
+    /**
+     * @group Core
+     */
+    public function test_getHostFromUrl()
+    {
+        $this->assertEquals('', UrlHelper::getHostFromUrl(''));
+        $this->assertEquals('', UrlHelper::getHostFromUrl(null));
+        $this->assertEquals('localhost', UrlHelper::getHostFromUrl('http://localhost'));
+        $this->assertEquals('localhost', UrlHelper::getHostFromUrl('http://localhost/path'));
+        $this->assertEquals('localhost', UrlHelper::getHostFromUrl('localhost/path'));
+        $this->assertEquals('sub.localhost', UrlHelper::getHostFromUrl('sub.localhost/path'));
+        $this->assertEquals('sub.localhost', UrlHelper::getHostFromUrl('http://sub.localhost/path/?query=test'));
+
+        if(SystemTestCase::isPhpVersion53()) {
+            //parse_url was fixed in 5,4,7
+            //  Fixed host recognition when scheme is omitted and a leading component separator is present.
+            // http://php.net/parse_url
+            return;
+        }
+
+        $this->assertEquals('localhost', UrlHelper::getHostFromUrl('//localhost/path'));
+        $this->assertEquals('localhost', UrlHelper::getHostFromUrl('//localhost/path?test=test2'));
+        $this->assertEquals('example.org', UrlHelper::getHostFromUrl('//example.org/path'));
+        $this->assertEquals('example.org', UrlHelper::getHostFromUrl('//example.org/path?test=test2'));
+
+    }
+
+    /**
+     * @group Core
+     */
+    public function test_getQueryFromUrl_ShouldReturnEmtpyString_IfNoQuery()
+    {
+        $this->assertEquals('', UrlHelper::getQueryFromUrl('', array()));
+        $this->assertEquals('', UrlHelper::getQueryFromUrl(null, array()));
+        $this->assertEquals('', UrlHelper::getQueryFromUrl('http://localhost/path', array()));
+    }
+
+    /**
+     * @group Core
+     */
+    public function test_getQueryFromUrl_ShouldReturnOnlyTheQueryPartOfTheUrl_IfNoAdditionalParamsGiven()
+    {
+        $this->assertEquals('foo=bar&foo2=bar2&test[]=1', UrlHelper::getQueryFromUrl('http://example.com/?foo=bar&foo2=bar2&test[]=1', array()));
+        $this->assertEquals('foo=bar&foo2=bar2&test[]=1', UrlHelper::getQueryFromUrl('/?foo=bar&foo2=bar2&test[]=1', array()));
+        $this->assertEquals('segment=pageTitle!@%40Hello%20World;pageTitle!@Peace%20Love%20', UrlHelper::getQueryFromUrl('/?segment=pageTitle!@%40Hello%20World;pageTitle!@Peace%20Love%20', array()));
+    }
+
+    /**
+     * @group Core
+     */
+    public function test_getQueryFromUrl_ShouldAddAdditionalParams_IfGiven()
+    {
+        $this->assertEquals('foo=bar&foo2=bar2&test[]=1&add=foo', UrlHelper::getQueryFromUrl('http://example.com/?foo=bar&foo2=bar2&test[]=1', array('add' => 'foo')));
+        $this->assertEquals('add=foo', UrlHelper::getQueryFromUrl('/', array('add' => 'foo')));
+        $this->assertEquals('add[]=foo&add[]=test', UrlHelper::getQueryFromUrl('/', array('add' => array('foo', 'test'))));
+    }
 }
\ No newline at end of file
diff --git a/tests/README.md b/tests/README.md
index 555f07c5dea5ae4622210ee24e37b24a4477e4d6..aaa18d6d340865c053beb503b66261b02fa0c093 100644
--- a/tests/README.md
+++ b/tests/README.md
@@ -15,19 +15,7 @@ The next section explains how you can run the test suite on your own dev machine
 
 ## How To Run Piwik Tests
 
-To run tests, you must use the Git master. Tests files are not in the Piwik zip archive.
-
-You can get the latest Git revision at: http://github.com/piwik/piwik
-
-```
-$ git clone https://github.com/piwik/piwik.git
-```
-
-Next install Composer which will lets you download the libraries used in Piwik:
-```
-$ curl -sS https://getcomposer.org/installer | php
-$ php composer.phar install
-```
+To run tests, you must install Piwik via Git and set it up for development. A guide for this is available in our [Developer Zone](http://developer.piwik.org/guides/getting-started-part-1). The part about "Creating a plugin" can be skipped.
 
 To execute the tests:
 
diff --git a/tests/UI/expected-ui-screenshots b/tests/UI/expected-ui-screenshots
index 843831ccec6291107788b75abb1fd3809e435b2d..60822e3689672bfd534c2ec26d21e676e77be41f 160000
--- a/tests/UI/expected-ui-screenshots
+++ b/tests/UI/expected-ui-screenshots
@@ -1 +1 @@
-Subproject commit 843831ccec6291107788b75abb1fd3809e435b2d
+Subproject commit 60822e3689672bfd534c2ec26d21e676e77be41f
diff --git a/tests/UI/specs/Menus_spec.js b/tests/UI/specs/Menus_spec.js
index b9ccf03ff9a2a5adfd9b968c402842a10c17b90e..d3fe6720c0ff95643b4612a3e4c5c96cb4e4df67 100644
--- a/tests/UI/specs/Menus_spec.js
+++ b/tests/UI/specs/Menus_spec.js
@@ -23,13 +23,13 @@ describe("Menus", function () {
 
     it('should change the menu when a upper menu item is clicked in the main menu', function (done) {
         expect.screenshot('mainmenu_upper_clicked').to.be.captureSelector('.Menu--dashboard,.nav_sep', function (page) {
-            page.click('#VisitsSummary>a');
+            page.click('.Menu-tabList > li:eq(1) > a');
         }, done);
     });
 
     it('should change the menu when a lower menu item is clicked in the main menu', function (done) {
         expect.screenshot('mainmenu_lower_clicked').to.be.captureSelector('.Menu--dashboard,.nav_sep', function (page) {
-            page.click('#Live_indexVisitorLog>a');
+            page.click('.Menu-tabList > li:eq(1) > ul > li:eq(1) > a');
         }, done);
     });
 
diff --git a/tests/UI/specs/OptOutForm_spec.js b/tests/UI/specs/OptOutForm_spec.js
index f703eb4139a31b6c4d7b3aa842c33fa0f804d2a9..493b74b20c34bb9d2497fe02b4a4154717a505ad 100644
--- a/tests/UI/specs/OptOutForm_spec.js
+++ b/tests/UI/specs/OptOutForm_spec.js
@@ -53,6 +53,7 @@ describe("OptOutForm", function () {
             page.evaluate(function () {
                 $('iframe#optOutIframe').contents().find('input#trackVisits').click();
             });
+            page.wait(1000); // wait for iframe to reload
             page.load(siteUrl); // reload to check that cookie was set
         }, done);
     });
diff --git a/tests/javascript/index.php b/tests/javascript/index.php
index 8c5179f77f2b0c4457822183a78b7c656167aecc..2664cb9239345da228d1a304676e8e883b3d2e88 100644
--- a/tests/javascript/index.php
+++ b/tests/javascript/index.php
@@ -1926,7 +1926,7 @@ function PiwikTest() {
     });
 
     test("API methods", function() {
-        expect(65);
+        expect(66);
 
         equal( typeof Piwik.addPlugin, 'function', 'addPlugin' );
         equal( typeof Piwik.getTracker, 'function', 'getTracker' );
@@ -1997,6 +1997,7 @@ function PiwikTest() {
         equal( typeof tracker.trackContentImpressionsWithinNode, 'function', 'trackContentImpressionsWithinNode' );
         equal( typeof tracker.trackContentInteraction, 'function', 'trackContentInteraction' );
         equal( typeof tracker.trackContentInteractionNode, 'function', 'trackContentInteractionNode' );
+        equal( typeof tracker.logAllContentBlocksOnPage, 'function', 'logAllContentBlocksOnPage' );
         // ecommerce
         equal( typeof tracker.setEcommerceView, 'function', 'setEcommerceView' );
         equal( typeof tracker.addEcommerceItem, 'function', 'addEcommerceItem' );
@@ -3190,7 +3191,7 @@ if ($sqlite) {
     });
 
     test("trackingContent", function() {
-        expect(81);
+        expect(83);
 
         function assertTrackingRequest(actual, expectedStartsWith, message)
         {
@@ -3526,6 +3527,101 @@ if ($sqlite) {
             start();
         }, 7000);
 
+        expected =
+            [
+                {
+                    "name": "My Ad 7",
+                    "piece": "Unknown",
+                    "target": "http://img7.example.com"
+                },
+                {
+                    "name": "http://www.example.com/path/xyz.jpg",
+                    "piece": "http://www.example.com/path/xyz.jpg",
+                    "target": "http://img6.example.com"
+                },
+                {
+                    "name": "My Ad 5",
+                    "piece": "http://img5.example.com/path/xyz.jpg",
+                    "target": origin + "/anylink5"
+                },
+                {
+                    "name": "My content 4",
+                    "piece": "My content 4",
+                    "target": "http://img4.example.com"
+                },
+                {
+                    "name": toAbsolutePath("img3-en.jpg"),
+                    "piece": toAbsoluteUrl("img3-en.jpg"),
+                    "target": "http://img3.example.com"
+                },
+                {
+                    "name": "img.jpg",
+                    "piece": "img.jpg",
+                    "target": "http://img2.example.com"
+                },
+                {
+                    "name": toAbsolutePath("img1-en.jpg"),
+                    "piece": toAbsoluteUrl("img1-en.jpg"),
+                    "target": ""
+                },
+                {
+                    "name": "/tests/javascript/img1-en.jpg",
+                    "piece": toAbsoluteUrl("img1-en.jpg"),
+                    "target": ""
+                }];
+        
+        var consoleOld = console;
+        var loggedContentBlocks = [];
+        console = {log: function (content){
+            loggedContentBlocks = content;
+        }};
+        tracker.logAllContentBlocksOnPage();
+        console = consoleOld;
+        expected =
+            [
+                {
+                    "name": "My Ad 7",
+                    "piece": "Unknown",
+                    "target": "http://img7.example.com"
+                },
+                {
+                    "name": "http://www.example.com/path/xyz.jpg",
+                    "piece": "http://www.example.com/path/xyz.jpg",
+                    "target": "http://img6.example.com"
+                },
+                {
+                    "name": "My Ad 5",
+                    "piece": "http://img5.example.com/path/xyz.jpg",
+                    "target": origin + "/anylink5"
+                },
+                {
+                    "name": "My content 4",
+                    "piece": "My content 4",
+                    "target": "http://img4.example.com"
+                },
+                {
+                    "name": toAbsolutePath("img3-en.jpg"),
+                    "piece": toAbsoluteUrl("img3-en.jpg"),
+                    "target": "http://img3.example.com"
+                },
+                {
+                    "name": "img.jpg",
+                    "piece": "img.jpg",
+                    "target": "http://img2.example.com"
+                },
+                {
+                    "name": toAbsolutePath("img1-en.jpg"),
+                    "piece": toAbsoluteUrl("img1-en.jpg"),
+                    "target": ""
+                },
+                {
+                    "name": "/tests/javascript/img1-en.jpg",
+                    "piece": toAbsoluteUrl("img1-en.jpg"),
+                    "target": ""
+                }];
+
+        equal(expected.length, loggedContentBlocks.length, 'logAllContentBlocksOnPage should detect correct number of content blocks');
+        equal(JSON.stringify(expected), JSON.stringify(loggedContentBlocks), 'logAllContentBlocksOnPage should log all content blocks');
     });
 
     test("trackingContentInteractionInteractive", function() {
diff --git a/tests/lib/screenshot-testing/support/app.js b/tests/lib/screenshot-testing/support/app.js
index 92256cae6cf9995084cf893ff409503177df00e2..6f120f18d87b82ef890018055cf9f86009905a95 100644
--- a/tests/lib/screenshot-testing/support/app.js
+++ b/tests/lib/screenshot-testing/support/app.js
@@ -66,6 +66,10 @@ Application.prototype.printHelpAndExit = function () {
     console.log("  --screenshot-repo:        Specifies the github repository that contains the expected screenshots");
     console.log("                            to link to in the diffviewer. For use with travis build.");
     console.log("  --core:                   Only execute UI tests that are for Piwik core or Piwik core plugins.");
+    console.log("  --first-half:             Only execute first half of all the test suites. Will be only applied if no")
+    console.log("                            specific plugin or test-files requested");
+    console.log("  --second-half:            Only execute second half of all the test suites. Will be only applied if no")
+    console.log("                            specific plugin or test-files requested");
 
     phantom.exit(0);
 };
@@ -131,6 +135,24 @@ Application.prototype.loadTestModules = function () {
         });
     }
 
+    var specificTestsRequested = options.plugin || options.tests.length;
+
+    if ((options['run-first-half-only'] || options['run-second-half-only']) && !specificTestsRequested) {
+        // run only first 50% of the test suites or only run last 50% of the test suites.
+        // we apply this option only if not a specific plugin or test suite was requested. Only there for travis to
+        // split tests into multiple jobs.
+        var numTestsFirstHalf = Math.round(mocha.suite.suites.length / 2);
+        numTestsFirstHalf += 5; // run a few more test suits in first half as UiIntegrationTests contain many tests
+        mocha.suite.suites = mocha.suite.suites.filter(function (suite, index) {
+            if (options['run-first-half-only'] && index < numTestsFirstHalf) {
+                return true;
+            } else if (options['run-second-half-only'] && index >= numTestsFirstHalf) {
+                return true;
+            }
+            return false;
+        });
+    }
+
     if (!mocha.suite.suites.length) {
         console.log("No tests are executing... are you running tests for a plugin? Make sure to use the"
                   + " --plugin=MyPlugin option.");
diff --git a/tests/resources/access-logs/fake_logs_dynamic.log b/tests/resources/access-logs/fake_logs_dynamic.log
index 75ef54c1d454d14a47d2072390c40c549fe2e370..04ad6c23849cd1af0c0d8c550f3984d3b23d4d8c 100644
--- a/tests/resources/access-logs/fake_logs_dynamic.log
+++ b/tests/resources/access-logs/fake_logs_dynamic.log
@@ -8,8 +8,8 @@ whatever.com 72.44.32.10 - - [12/Aug/2012:15:49:48 +0200] "GET /translations/ HT
 piwik.net 175.41.192.09 - - [12/Aug/2012:22:56:45 +0200] "GET /docs/ HTTP/1.1" 200 3574 "-" "Mozilla/5.0 (X11; Linux i686; rv:6.0) Gecko/20100101 Firefox/6.0"
 piwik.net 175.41.192.09 - - [12/Aug/2012:23:00:42 +0200] "GET /docs/manage-users/ HTTP/1.1" 200 3574 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3"
 whatever.com 79.125.00.21 - - [13/Aug/2012:20:03:40 +0200] "GET /newsletter/ HTTP/1.1" 200 3574 "-" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)"
-whatever.com 175.41.192.34 - - [13/Aug/2012:21:59:50 +0200] "GET /faq/how-to/ HTTP/1.1" 200 3574 "-" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)"
-anothersite.com 175.41.192.34 - - [13/Aug/2012:22:01:17 +0200] "GET /faq/ HTTP/1.1" 200 3574 "-" "Mozilla/5.0 (X11; U; Linux x86_64; fr-FR) AppleWebKit/534.7 (KHTML, like Gecko) Epiphany/2.30.6 Safari/534.7"
+whatever.com 175.41.192.34 - - [13/Aug/2012:21:59:50 +0200] "GET /faq/how-to/?triggerInvalid=1 HTTP/1.1" 200 3574 "-" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)"
+anothersite.com 175.41.192.34 - - [13/Aug/2012:22:01:17 +0200] "GET /faq/?triggerInvalid=1 HTTP/1.1" 200 3574 "-" "Mozilla/5.0 (X11; U; Linux x86_64; fr-FR) AppleWebKit/534.7 (KHTML, like Gecko) Epiphany/2.30.6 Safari/534.7"
 anothersite.com 177.71.128.21 - - [13/Aug/2012:22:21:03 +0200] "GET /docs/manage-websites/ HTTP/1.1" 200 3574 "-" "Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0"
 anothersite.com 177.71.128.21 - - [13/Aug/2012:22:21:28 +0200] "GET /intranet-analytics/ HTTP/1.1" 200 3574 "-" "Mozilla/5.0 (X11; U; Linux x86_64; fr-FR) AppleWebKit/534.7 (KHTML, like Gecko) Epiphany/2.30.6 Safari/534.7"
 whatever.com 177.71.128.21 - - [13/Aug/2012:22:22:08 +0200] "GET /blog/2012/08/survey-your-opinion-matters/ HTTP/1.1" 200 3574 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6"
diff --git a/tests/travis b/tests/travis
index f62fc4fe97a88aa11e495abda384f142b38fd580..01890adfc40f4356127e6725bfbd27f5e50ea0cf 160000
--- a/tests/travis
+++ b/tests/travis
@@ -1 +1 @@
-Subproject commit f62fc4fe97a88aa11e495abda384f142b38fd580
+Subproject commit 01890adfc40f4356127e6725bfbd27f5e50ea0cf