diff --git a/core/Tracker/VisitExcluded.php b/core/Tracker/VisitExcluded.php
index 0bc6fa2fbb599714a789bcbde93ae3072114f86b..a644d4479f1e7e293f3183e8e7128045e581f891 100644
--- a/core/Tracker/VisitExcluded.php
+++ b/core/Tracker/VisitExcluded.php
@@ -13,6 +13,7 @@ use Piwik\Common;
 use Piwik\DeviceDetectorFactory;
 use Piwik\Network\IP;
 use Piwik\Piwik;
+use Piwik\Plugins\SitesManager\SiteUrls;
 use Piwik\Tracker\Visit\ReferrerSpamFilter;
 
 /**
@@ -290,14 +291,17 @@ class VisitExcluded
     {
         $site = Cache::getCacheWebsiteAttributes($this->idSite);
 
-        if (!empty($site['exclude_unknown_urls']) && !empty($site['hosts'])) {
-            $trackingHost = parse_url($this->request->getParam('url'), PHP_URL_HOST);
-            foreach ($site['hosts'] as $siteHost) {
-                if ($trackingHost == $siteHost || (substr($trackingHost, -strlen($siteHost) - 1) === ('.' . $siteHost))) {
-                    return false;
-                }
-            }
-            return true;
+        if (!empty($site['exclude_unknown_urls']) && !empty($site['urls'])) {
+            $url = $this->request->getParam('url');
+            $parsedUrl = parse_url($url);
+
+            $trackingUrl = new SiteUrls();
+            $urls = $trackingUrl->groupUrlsByHost(array($this->idSite => $site['urls']));
+
+            $idSites = $trackingUrl->getIdSitesMatchingUrl($parsedUrl, $urls);
+            $isUrlExcluded = !isset($idSites) || !in_array($this->idSite, $idSites);
+
+            return $isUrlExcluded;
         }
 
         return false;
diff --git a/plugins/SitesManager/SitesManager.php b/plugins/SitesManager/SitesManager.php
index 4b686e2bdefbacce85fa5f0e1df51a4e6b8cae89..ca3f2757b93cf1305a7966cb0df570e987dacf83 100644
--- a/plugins/SitesManager/SitesManager.php
+++ b/plugins/SitesManager/SitesManager.php
@@ -114,8 +114,11 @@ class SitesManager extends \Piwik\Plugin
     {
         $idSite = (int) $idSite;
 
+        $urls = API::getInstance()->getSiteUrlsFromId($idSite);
+
         // add the 'hosts' entry in the website array
-        $array['hosts'] = $this->getTrackerHosts($idSite);
+        $array['urls']  = $urls;
+        $array['hosts'] = $this->getTrackerHosts($urls);
 
         $website = API::getInstance()->getSiteFromId($idSite);
         $array['exclude_unknown_urls'] = $website['exclude_unknown_urls'];
@@ -252,9 +255,8 @@ class SitesManager extends \Piwik\Plugin
      * @param int $idSite
      * @return array
      */
-    private function getTrackerHosts($idSite)
+    private function getTrackerHosts($urls)
     {
-        $urls = API::getInstance()->getSiteUrlsFromId($idSite);
         $hosts = array();
         foreach ($urls as $url) {
             $url = parse_url($url);
diff --git a/tests/PHPUnit/Integration/Tracker/VisitTest.php b/tests/PHPUnit/Integration/Tracker/VisitTest.php
index e686146f73c49961185c5ec99648f390957aa566..f4bc1fd5edc52fe197a8493a6cab14d4579734df 100644
--- a/tests/PHPUnit/Integration/Tracker/VisitTest.php
+++ b/tests/PHPUnit/Integration/Tracker/VisitTest.php
@@ -118,15 +118,37 @@ class VisitTest extends IntegrationTestCase
                 'http://x.com' => true,
             )),
             array(array('http://test.com', 'http://sub.test2.com'), true, array(
-                'http://sub.test.com' => true,
-                'http://sub.sub.test.com' => true,
+                'http://sub.test.com' => false, // we do not match subdomains
+                'http://sub.sub.test.com' => false,
                 'http://subtest.com' => false,
                 'http://test.com.org' => false,
+                'http://test2.com' => false,
                 'http://sub.test2.com' => true,
-                'http://x.sub.test2.com' => true,
+                'http://test.com' => true,
+                'http://x.sub.test2.com' => false,
                 'http://xsub.test2.com' => false,
                 'http://sub.test2.com.org' => false,
             )),
+            array(array('http://test.com/path', 'http://test2.com/sub/dir'), true, array(
+                'http://test.com/path' => true, // test matching path
+                'http://test.com/path/' => true,
+                'http://test.com/path/test' => true,
+
+                'http://test.com/path1' => false,
+                'http://test.com/' => false,
+                'http://test.com' => false,
+                'http://test.com/foo' => false,
+                'http://sub.test.com/path' => false,  // we still do not match subdomains
+
+                'http://test2.com/sub/dir' => true,
+                'http://test2.com/sub/dir/' => true,
+                'http://test2.com/sub/dir/test' => true,
+
+                'http://test2.com/sub/foo/' => false,
+                'http://test2.com/sub/' => false,
+                'http://test2.com/' => false,
+                'http://test2.com/dir/sub' => false,
+            )),
         );
     }
 
@@ -142,7 +164,7 @@ class VisitTest extends IntegrationTestCase
                 'rec'    => 1,
                 'url'    => $url
             )));
-            $this->assertEquals($isTracked, !$visitExclude->isExcluded());
+            $this->assertEquals($isTracked, !$visitExclude->isExcluded(), $url . ' is not returning expected result');
         }
     }