diff --git a/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php b/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php
index ed793bb0bc19082425d56e4e9a86d17b103fed5a..d221194cb180738bcfd60c21b666b7d735bee9a7 100644
--- a/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php
+++ b/tests/PHPUnit/Fixtures/SomeVisitsManyPageviewsWithTransitions.php
@@ -30,64 +30,117 @@ class Test_Piwik_Fixture_SomeVisitsManyPageviewsWithTransitions extends Test_Piw
 
     private function setUpWebsitesAndGoals()
     {
-        self::createWebsite($this->dateTime);
+        self::createWebsite($this->dateTime, $ecommerce = 0, $siteName = 'Piwik test', $siteUrl = false,
+                            $siteSearch = 1);
     }
 
     private function trackVisits()
     {
-        $visit1 = $this->createVisit(1);
-        $visit1->setUrlReferrer('http://www.google.com.vn/url?sa=t&rct=j&q=%3C%3E%26%5C%22the%20pdo%20extension%20is%20required%20for%20this%20adapter%20but%20the%20extension%20is%20not%20loaded&source=web&cd=4&ved=0FjAD&url=http%3A%2F%2Fforum.piwik.org%2Fread.php%3F2%2C1011&ei=y-HHAQ&usg=AFQjCN2-nt5_GgDeg&cad=rja');
-        $this->trackPageView($visit1, 0, 'page/one.html');
-        $this->trackPageView($visit1, 0.1, 'sub/dir/page2.html');
-        $this->trackPageView($visit1, 0.2, 'page/one.html');
-        $this->trackPageView($visit1, 0.3, 'the/third_page.html?foo=bar');
-        $this->trackPageView($visit1, 0.4, 'page/one.html');
-        $this->trackPageView($visit1, 0.5, 'the/third_page.html?foo=bar');
-        $this->trackPageView($visit1, 0.6, 'page/one.html');
-        $this->trackPageView($visit1, 0.7, 'the/third_page.html?foo=baz#anchor1');
-        $this->trackPageView($visit1, 0.8, 'page/one.html');
-        $this->trackPageView($visit1, 0.9, 'page/one.html');
-        $this->trackPageView($visit1, 1.0, 'the/third_page.html?foo=baz#anchor2');
-        $this->trackPageView($visit1, 1.1, 'page/one.html');
-        $this->trackPageView($visit1, 1.2, 'page3.html');
+        $tracker = self::getTracker($this->idSite, $this->dateTime, $defaultInit = true);
+        $tracker->setTokenAuth(self::getTokenAuth());
+        $tracker->enableBulkTracking();
+        
+        $tracker->setIp('156.5.3.1');
+        $tracker->setUrlReferrer('http://www.google.com.vn/url?sa=t&rct=j&q=%3C%3E%26%5C%22the%20pdo%20extension%20is%20required%20for%20this%20adapter%20but%20the%20extension%20is%20not%20loaded&source=web&cd=4&ved=0FjAD&url=http%3A%2F%2Fforum.piwik.org%2Fread.php%3F2%2C1011&ei=y-HHAQ&usg=AFQjCN2-nt5_GgDeg&cad=rja');
+        $this->trackPageView($tracker, 0, 'page/one.html');
+        $this->trackPageView($tracker, 0.1, 'sub/dir/page2.html');
+        $this->trackPageView($tracker, 0.2, 'page/one.html');
+        $this->trackPageView($tracker, 0.3, 'the/third_page.html?foo=bar');
+        $this->trackPageView($tracker, 0.4, 'page/one.html');
+        $this->trackPageView($tracker, 0.5, 'the/third_page.html?foo=bar');
+        $this->trackPageView($tracker, 0.6, 'page/one.html');
+        $this->trackPageView($tracker, 0.7, 'the/third_page.html?foo=baz#anchor1');
+        $this->trackPageView($tracker, 0.8, 'page/one.html');
+        $this->trackPageView($tracker, 0.9, 'page/one.html');
+        $this->trackPageView($tracker, 1.0, 'the/third_page.html?foo=baz#anchor2');
+        $this->trackPageView($tracker, 1.1, 'page/one.html');
+        $this->trackPageView($tracker, 1.2, 'page3.html');
 
-        $visit2 = $this->createVisit(2);
-        $visit2->setUrlReferrer('http://www.external.com.vn/referrerPage-notCounted.html');
-        $this->trackPageView($visit2, 0, 'sub/dir/page2.html');
-        $this->trackPageView($visit2, 0.1, 'the/third_page.html?foo=bar');
-        $this->trackPageView($visit2, 0.2, 'page/one.html');
-        $this->trackPageView($visit2, 0.3, 'the/third_page.html?foo=baz#anchor1');
+        $tracker->setIp('156.5.3.2');
+        $tracker->setNewVisitorId();
+        $tracker->setUrlReferrer('http://www.external.com.vn/referrerPage-notCounted.html');
+        $this->trackPageView($tracker, 0, 'sub/dir/page2.html');
+        $this->trackPageView($tracker, 0.1, 'the/third_page.html?foo=bar');
+        $this->trackPageView($tracker, 0.2, 'page/one.html');
+        $this->trackPageView($tracker, 0.3, 'the/third_page.html?foo=baz#anchor1');
 
-        $visit3 = $this->createVisit(3);
-        $visit3->setUrlReferrer('http://www.external.com.vn/referrerPage-counted.html');
-        $this->trackPageView($visit3, 0.1, 'page/one.html');
-        $this->trackPageView($visit3, 0.2, 'sub/dir/page2.html');
-        $this->trackPageView($visit3, 0.3, 'page/one.html');
+        $tracker->setIp('156.5.3.3');
+        $tracker->setNewVisitorId();
+        $tracker->setUrlReferrer('http://www.external.com.vn/referrerPage-counted.html');
+        $this->trackPageView($tracker, 0.1, 'page/one.html');
+        $this->trackPageView($tracker, 0.2, 'sub/dir/page2.html');
+        $this->trackPageView($tracker, 0.3, 'page/one.html');
 
-        $visit4 = $this->createVisit(4);
-        $this->trackPageView($visit4, 0, 'page/one.html?pk_campaign=TestCampaign&pk_kwd=TestKeyword');
+        $tracker->setIp('156.5.3.4');
+        $tracker->setNewVisitorId();
+        $tracker->setUrlReferrer('');
+        $this->trackPageView($tracker, 0, 'page/one.html?pk_campaign=TestCampaign&pk_kwd=TestKeyword');
 
-        $visit5 = $this->createVisit(5);
-        $this->trackPageView($visit5, 0, 'page/one.html');
+        $tracker->setIp('156.5.3.5');
+        $tracker->setNewVisitorId();
+        $tracker->setUrlReferrer('');
+        $this->trackPageView($tracker, 0, 'page/one.html');
+        
+        // perform site search before & after page/one.html, then outlink after page/one.html, then download
+        // before & after
+        $tracker->setIp('156.5.3.6');
+        $tracker->setNewVisitorId();
+        $this->trackPageView($tracker, 0, 'page/search.html#q=mykwd', $this->dateTime, $pageViewType = 'site-search',
+                             $searchKeyword = 'mykwd', $searchCategory = 'mysearchcat');
+        $this->trackPageView($tracker, 0.1, 'page/one.html');
+        $this->trackPageView($tracker, 0.2, 'page/search.html#q=anotherkwd', $this->dateTime,
+                             $pageViewType = 'site-search', $searchKeyword = 'anotherkwd',
+                             $searchCategory = 'mysearchcat');
+        $this->trackPageView($tracker, 0.25, 'page/one.html');
+        $this->trackPageView($tracker, 0.3, 'to/outlink/page.html', $this->dateTime, $pageViewType = 'outlink');
+        $this->trackPageView($tracker, 0.35, 'page/one.html');
+        $this->trackPageView($tracker, 0.4, '', $this->dateTime, $pageViewType = 'download');
+        $this->trackPageView($tracker, 0.45, 'page/one.html');
+        $this->trackPageView($tracker, 0.5, '', $this->dateTime, $pageViewType = 'download');
+        $this->trackPageView($tracker, 0.55, 'page/one.html');
+        $this->trackPageView($tracker, 0.6, 'to/outlink/page2.html', $this->dateTime, $pageViewType = 'outlink');
+        
+        // perform new searches/outlinks before & after in later date to test 'month' period
+        $laterDate = Piwik_Date::factory($this->dateTime)->addDay(8)->getDatetime();
+        $tracker->setIp('156.5.3.7');
+        $tracker->setNewVisitorId();
+        $this->trackPageView($tracker, 0, 'page/search.html#q=thirdkwd', $laterDate, $pageViewType = 'site-search',
+                             $searchKeyword = 'thirdkwd', $searchCategory = 'mysearchcat');
+        $this->trackPageView($tracker, 0.1, 'page/one.html', $laterDate);
+        $this->trackPageView($tracker, 0.15, 'to/another/outlink.html', $laterDate, $pageViewType = 'outlink');
+        $this->trackPageView($tracker, 0.2, 'page/one.html', $laterDate);
+        $this->trackPageView($tracker, 0.25, 'page/search.html#q=anotherkwd', $laterDate,
+                             $pageViewType = 'site-search', $searchKeyword = 'anotherkwd',
+                             $searchCategory = 'mysearchcat');
+        
+        self::checkResponse($tracker->doBulkTrack());
     }
 
-    private function createVisit($id)
-    {
-        $visit = self::getTracker($this->idSite, $this->dateTime, $defaultInit = true);
-        $visit->setIp('156.5.3.' . $id);
-        return $visit;
-    }
-
-    private function trackPageView($visit, $timeOffset, $path)
+    private function trackPageView($visit, $timeOffset, $path, $dateTime = null, $pageViewType = 'normal',
+                                     $searchKeyword = null, $searchCategory = null)
     {
+        if ($dateTime === null) {
+            $dateTime = $this->dateTime;
+        }
+        
         // rotate protocol and www to make sure it doesn't matter
         $prefixes = array('http://', 'http://www.', 'https://', 'https://');
-        $prefix = $prefixes[$this->prefixCounter];
-        $this->prefixCounter = ($this->prefixCounter + 1) % 4;
+        $prefix = $prefixes[$this->prefixCounter % 4];
+        $this->prefixCounter = $this->prefixCounter + 1;
 
         /** @var $visit PiwikTracker */
         $visit->setUrl($prefix . 'example.org/' . $path);
-        $visit->setForceVisitDateTime(Piwik_Date::factory($this->dateTime)->addHour($timeOffset)->getDatetime());
-        self::checkResponse($visit->doTrackPageView('page title'));
+        $visit->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour($timeOffset)->getDatetime());
+        
+        if ($pageViewType == 'normal') {
+            self::assertTrue($visit->doTrackPageView('page title - ' . $path));
+        } else if ($pageViewType == 'outlink') {
+            self::assertTrue($visit->doTrackAction($prefix . 'anothersite.com/' . $path, 'link'));
+        } else if ($pageViewType == 'download') {
+            $downloadUrl = $prefix . 'example.org/downloads/' . $this->prefixCounter . '.tar.gz';
+            self::assertTrue($visit->doTrackAction($downloadUrl, 'download'));
+        } else if ($pageViewType == 'site-search') {
+            self::assertTrue($visit->doTrackSiteSearch($searchKeyword, $searchCategory, $this->prefixCounter));
+        }
     }
 }
diff --git a/tests/PHPUnit/Integration/TransitionsTest.php b/tests/PHPUnit/Integration/TransitionsTest.php
index 0523feec4c3333be9a7309e2deb467675858f5ce..318a6bc0ce53c92443f43f0d9ebd469e64e8ede6 100644
--- a/tests/PHPUnit/Integration/TransitionsTest.php
+++ b/tests/PHPUnit/Integration/TransitionsTest.php
@@ -23,6 +23,46 @@ class Test_Piwik_Integration_Transitions extends IntegrationTestCase
         $return[] = array('Transitions.getTransitionsForPageUrl', array(
             'idSite'                 => self::$fixture->idSite,
             'date'                   => self::$fixture->dateTime,
+            'periods'                => array('day', 'month'),
+            'testSuffix'             => '_noLimit',
+            'otherRequestParameters' => array(
+                'pageUrl'            => 'http://example.org/page/one.html',
+            )
+        ));
+        $return[] = array('Transitions.getTransitionsForPageTitle', array(
+            'idSite'                 => self::$fixture->idSite,
+            'date'                   => self::$fixture->dateTime,
+            'periods'                => array('day', 'month'),
+            'testSuffix'             => '_noLimit',
+            'otherRequestParameters' => array(
+                'pageTitle'          => 'page title - page/one.html',
+            )
+        ));
+        
+        // test w/ pages that don't exist
+        $return[] = array('Transitions.getTransitionsForPageUrl', array(
+            'idSite'                 => self::$fixture->idSite,
+            'date'                   => self::$fixture->dateTime,
+            'periods'                => array('day', 'month'),
+            'testSuffix'             => '_noData',
+            'otherRequestParameters' => array(
+                'pageUrl'            => 'http://example.org/not/a/page.html',
+            )
+        ));
+        $return[] = array('Transitions.getTransitionsForPageTitle', array(
+            'idSite'                 => self::$fixture->idSite,
+            'date'                   => self::$fixture->dateTime,
+            'periods'                => array('day', 'month'),
+            'testSuffix'             => '_noData',
+            'otherRequestParameters' => array(
+                'pageTitle'          => 'not a page title',
+            )
+        ));
+        
+        $return[] = array('Transitions.getTransitionsForPageUrl', array( // test w/ limiting
+            'idSite'                 => self::$fixture->idSite,
+            'date'                   => self::$fixture->dateTime,
+            'periods'                => array('day', 'month'),
             'otherRequestParameters' => array(
                 'pageUrl'             => 'http://example.org/page/one.html',
                 'limitBeforeGrouping' => 2