diff --git a/core/Tracker/VisitExcluded.php b/core/Tracker/VisitExcluded.php
index 288e0b89b3e3b0e6534ee9568a0468339427c8eb..233bb289ed16457a66e8fdf13fa7d1ae4395f09d 100644
--- a/core/Tracker/VisitExcluded.php
+++ b/core/Tracker/VisitExcluded.php
@@ -14,11 +14,19 @@
  */
 class Piwik_Tracker_VisitExcluded
 {
-    public function __construct(Piwik_Tracker_Request $request, $ip)
+    public function __construct(Piwik_Tracker_Request $request, $ip = false, $userAgent = false)
     {
+        if ($ip === false) {
+            $ip = $request->getIp();
+        }
+        
+        if ($userAgent === false) {
+            $userAgent = $request->getUserAgent();
+        }
+        
         $this->request = $request;
         $this->idSite = $request->getIdSite();
-        $this->userAgent = $request->getUserAgent();
+        $this->userAgent = $userAgent;
         $this->ip = $ip;
     }
 
diff --git a/tests/PHPUnit/Core/Tracker/VisitTest.php b/tests/PHPUnit/Core/Tracker/VisitTest.php
index 0a262b9fc6bdb3112dbff3568a40ba74cd09e109..82bbf78e6fb4fd2f72cb253df7b3659c98ac095d 100644
--- a/tests/PHPUnit/Core/Tracker/VisitTest.php
+++ b/tests/PHPUnit/Core/Tracker/VisitTest.php
@@ -69,15 +69,17 @@ class Tracker_VisitTest extends DatabaseTestCase
      */
     public function testIsVisitorIpExcluded($excludedIp, $tests)
     {
-        $visit = new Test_Piwik_TrackerVisit_public();
         $idsite = Piwik_SitesManager_API::getInstance()->addSite("name", "http://piwik.net/", $ecommerce = 0,
             $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, $excludedIp);
-        $visit->setRequest(array('idsite' => $idsite));
+
+        $request = new Piwik_Tracker_Request(array('idsite' => $idsite));
 
         // test that IPs within the range, or the given IP, are excluded
         foreach ($tests as $ip => $expected) {
             $testIpIsExcluded = Piwik_IP::P2N($ip);
-            $this->assertSame($expected, $visit->public_isVisitorIpExcluded($testIpIsExcluded));
+
+            $excluded = new Test_Piwik_Tracker_VisitExcluded_public($request, $testIpIsExcluded);
+            $this->assertSame($expected, $excluded->public_isVisitorIpExcluded($testIpIsExcluded));
         }
     }
 
@@ -116,21 +118,23 @@ class Tracker_VisitTest extends DatabaseTestCase
     {
         Piwik_SitesManager_API::getInstance()->setSiteSpecificUserAgentExcludeEnabled(true);
 
-        $visit = new Test_Piwik_TrackerVisit_public();
         $idsite = Piwik_SitesManager_API::getInstance()->addSite("name", "http://piwik.net/", $ecommerce = 0,
             $siteSearch = 1, $searchKeywordParameters = null, $searchCategoryParameters = null, $excludedIp = null,
             $excludedQueryParameters = null, $timezone = null, $currency = null, $group = null, $startDate = null,
             $excludedUserAgent);
-        $visit->setRequest(array('idsite' => $idsite));
 
+        $request = new Piwik_Tracker_Request(array('idsite' => $idsite));
+        
         // test that user agents that contain excluded user agent strings are excluded
         foreach ($tests as $ua => $expected) {
-            $this->assertSame($expected, $visit->public_isUserAgentExcluded($ua), "Result if isUserAgentExcluded('$ua') was not " . ($expected ? 'true' : 'false') . ".");
+            $excluded = new Test_Piwik_Tracker_VisitExcluded_public($request, $ip = false, $ua);
+            
+            $this->assertSame($expected, $excluded->public_isUserAgentExcluded($ua), "Result if isUserAgentExcluded('$ua') was not " . ($expected ? 'true' : 'false') . ".");
         }
     }
 }
 
-class Test_Piwik_TrackerVisit_public extends Piwik_Tracker_Visit
+class Test_Piwik_Tracker_VisitExcluded_public extends Piwik_Tracker_VisitExcluded
 {
     public function public_isVisitorIpExcluded($ip)
     {