diff --git a/core/Exception/InvalidRequestParameterException.php b/core/Exception/InvalidRequestParameterException.php
new file mode 100644
index 0000000000000000000000000000000000000000..13ead2e71640df2ad47cda9323c4d01b9bb782ec
--- /dev/null
+++ b/core/Exception/InvalidRequestParameterException.php
@@ -0,0 +1,13 @@
+<?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\Exception;
+
+class InvalidRequestParameterException extends Exception
+{
+}
\ No newline at end of file
diff --git a/core/Tracker/Request.php b/core/Tracker/Request.php
index 110d0eb65d4af87bdd85868eb0c45f68805e1632..efc3f331d97b932bd3d7af14f5eb51988147e956 100644
--- a/core/Tracker/Request.php
+++ b/core/Tracker/Request.php
@@ -12,6 +12,8 @@ use Exception;
 use Piwik\Common;
 use Piwik\Config;
 use Piwik\Cookie;
+use Piwik\Exception\InvalidRequestParameterException;
+use Piwik\Exception\InvalidVisitorIdException;
 use Piwik\Exception\UnexpectedWebsiteFoundException;
 use Piwik\IP;
 use Piwik\Network\IPUtils;
@@ -304,7 +306,7 @@ class Request
         );
 
         if (!isset($supportedParams[$name])) {
-            throw new Exception("Requested parameter $name is not a known Tracking API Parameter.");
+            throw new InvalidRequestParameterException("Requested parameter $name is not a known Tracking API Parameter.");
         }
 
         $paramDefaultValue = $supportedParams[$name][0];
@@ -524,7 +526,7 @@ class Request
             $idVisitor = $this->getForcedVisitorId();
             if (!empty($idVisitor)) {
                 if (strlen($idVisitor) != Tracker::LENGTH_HEX_ID_STRING) {
-                    throw new Exception("Visitor ID (cid) $idVisitor must be " . Tracker::LENGTH_HEX_ID_STRING . " characters long");
+                    throw new InvalidRequestParameterException("Visitor ID (cid) $idVisitor must be " . Tracker::LENGTH_HEX_ID_STRING . " characters long");
                 }
                 Common::printDebug("Request will be recorded for this idvisitor = " . $idVisitor);
                 $found = true;
diff --git a/tests/PHPUnit/System/TrackerTest.php b/tests/PHPUnit/System/TrackerTest.php
index baba28e7631c2443da61f08e94884ecd3aff6968..84f5db3aac3010ecb0820cfe0f7f62f9c0ce2319 100755
--- a/tests/PHPUnit/System/TrackerTest.php
+++ b/tests/PHPUnit/System/TrackerTest.php
@@ -85,4 +85,13 @@ class TrackerTest extends SystemTestCase
         $this->assertResponseCode(400, $url);
     }
 
+    public function test_response_ShouldSend400ResponseCode_IfInvalidRequestParameterIsGiven()
+    {
+        $url = $this->tracker->getUrlTrackPageView('Test');
+        $url .= '&cid=' . str_pad('1', 16, '1');
+
+        $this->assertResponseCode(200, $url);
+        $this->assertResponseCode(400, $url . '1'); // has to be 16 char, but is 17 now
+    }
+
 }