diff --git a/core/Translation/Translator.php b/core/Translation/Translator.php
index af2ae597f2b88c4145a6f5c37b16fe4544acaa60..98b3759f3b6cf351531a6961e2458bb2d8a32934 100644
--- a/core/Translation/Translator.php
+++ b/core/Translation/Translator.php
@@ -84,7 +84,7 @@ class Translator
         }
 
         if (count($args) == 0) {
-            return $translationId;
+            return str_replace('%%', '%', $translationId);
         }
         return vsprintf($translationId, $args);
     }
diff --git a/lang/en.json b/lang/en.json
index ab7e7dcc9c1e5e7b05df7d20e4c98b83682620f9..ce3caaa2fe7b41b37c811d614c6379a9a3f871df 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -70,7 +70,7 @@
         "ColumnPageBounceRateDocumentation": "The percentage of visits that started on this page and left the website straight away.",
         "ColumnPageviews": "Pageviews",
         "ColumnPageviewsDocumentation": "The number of times this page was visited.",
-        "ColumnPercentageVisits": "% Visits",
+        "ColumnPercentageVisits": "%% Visits",
         "ColumnRevenue": "Revenue",
         "ColumnSumVisitLength": "Total time spent by visitors (in seconds)",
         "ColumnTotalPageviews": "Total Pageviews",
diff --git a/plugins/Actions/lang/en.json b/plugins/Actions/lang/en.json
index c31dc264ecac945f4867f18bae90b9ba3f1c222e..27c9b2f72fcbba5df619ce0e6498752bd0c55087 100644
--- a/plugins/Actions/lang/en.json
+++ b/plugins/Actions/lang/en.json
@@ -18,7 +18,7 @@
         "ColumnSearchCategory": "Search Category",
         "ColumnSearches": "Searches",
         "ColumnSearchesDocumentation": "The number of visits that searched for this keyword on your website's search engine.",
-        "ColumnSearchExits": "% Search Exits",
+        "ColumnSearchExits": "%% Search Exits",
         "ColumnSearchExitsDocumentation": "The percentage of visits that left the website after searching for this Keyword on your Site Search engine.",
         "ColumnSearchResultsCount": "Search Results Count",
         "ColumnSiteSearchKeywords": "Unique Keywords",
diff --git a/plugins/CustomAlerts b/plugins/CustomAlerts
index 49ae454fd7eae39e07300c83e0dff40dda2e4276..8c861c9084a25dc36e1176496598a175a1619ee9 160000
--- a/plugins/CustomAlerts
+++ b/plugins/CustomAlerts
@@ -1 +1 @@
-Subproject commit 49ae454fd7eae39e07300c83e0dff40dda2e4276
+Subproject commit 8c861c9084a25dc36e1176496598a175a1619ee9
diff --git a/plugins/LanguagesManager/Test/Integration/LanguagesManagerTest.php b/plugins/LanguagesManager/Test/Integration/LanguagesManagerTest.php
index 0ff66919cec9aa80d6479e371b98b2d26f4273bf..59124a79cd55644a685773abaa2d56aab7bee7f0 100755
--- a/plugins/LanguagesManager/Test/Integration/LanguagesManagerTest.php
+++ b/plugins/LanguagesManager/Test/Integration/LanguagesManagerTest.php
@@ -155,6 +155,32 @@ class LanguagesManagerTest extends \PHPUnit_Framework_TestCase
         }
     }
 
+    /**
+     * check all english translations do not contain unescaped % symbols
+     *
+     * @group Plugins
+     * @group numbered2
+     */
+    function testTranslationsUseEscapedPercentSigns()
+    {
+        Cache::flushAll();
+        $translator = StaticContainer::get('Piwik\Translation\Translator');
+        $translator->reset();
+        Translate::loadAllTranslations();
+        $translations = $translator->getAllTranslations();
+        foreach ($translations AS $plugin => $pluginTranslations) {
+            if ($plugin == 'Intl') {
+                continue; // skip generated stuff
+            }
+            foreach ($pluginTranslations as $key => $pluginTranslation) {
+                $pluginTranslation = preg_replace('/(%(?:[1-9]\$)?[a-z])/', '', $pluginTranslation); // remove placeholders
+                $pluginTranslation = str_replace('%%', '', $pluginTranslation); // remove already escaped symbols
+                $this->assertEquals(0, substr_count($pluginTranslation, '%'),
+                    sprintf('%s.%s must use escaped %% symbols', $plugin, $key));
+            }
+        }
+    }
+
     /**
      * test English short name for language
      *