diff --git a/resources/static/dialog/resources/validation.js b/resources/static/dialog/resources/validation.js
index aa8b5603bb06f4bad93b3022175752a03333944a..15b98c1b7a6bf3b1837f97f8cec72ec541bb4dea 100644
--- a/resources/static/dialog/resources/validation.js
+++ b/resources/static/dialog/resources/validation.js
@@ -41,7 +41,15 @@ BrowserID.Validation = (function() {
     // gotten from http://blog.gerv.net/2011/05/html5_email_address_regexp/
     // changed the requirement that there must be a ldh-str because BrowserID 
     // is only used on internet based networks.
-    return /^[\w.!#$%&'*+\-/=?\^`{|}~]+@[a-z0-9-]+(\.[a-z0-9-]+)+$/.test(address);
+    var parts = address.split("@");
+
+    return /^[\w.!#$%&'*+\-/=?\^`{|}~]+@[a-z0-9-]+(\.[a-z0-9-]+)+$/.test(address)
+           // total address allwed to be 254 bytes long
+           && address.length <= 254
+           // local side only allowed to be 64 bytes long
+           && parts[0] && parts[0].length <= 64
+           // domain side allowed to be up to 253 bytes long
+           && parts[1] && parts[1].length <= 253;
   };
 
 
diff --git a/resources/static/dialog/test/qunit/resources/validation_unit_test.js b/resources/static/dialog/test/qunit/resources/validation_unit_test.js
index 1366573ce557a706e38e0d79ae67a7ad66b5a4f6..37925f8174bb184647f14f600f12e729707fe60c 100644
--- a/resources/static/dialog/test/qunit/resources/validation_unit_test.js
+++ b/resources/static/dialog/test/qunit/resources/validation_unit_test.js
@@ -46,7 +46,7 @@ steal.plugins("jquery", "funcunit/qunit").then("/dialog/resources/browserid", fu
     tooltipShown = true;
   }
 
-  module("validation", {
+  module("resources/validation", {
     setup: function() {
       origShowTooltip = bid.Tooltip.showTooltip;
       bid.Tooltip.showTooltip = showTooltip;
@@ -98,10 +98,77 @@ steal.plugins("jquery", "funcunit/qunit").then("/dialog/resources/browserid", fu
   test("email with empty email", function() {
     var valid = validation.email("");
 
-    equal(valid, valid, "missing email is missing");
+    equal(valid, false, "missing email is missing");
     equal(tooltipShown, true, "missing email shows no tooltip");
   });
 
+  test("email with Capital Letters in local side", function() {
+    var valid = validation.email("X@y.z");
+
+    equal(valid, true, "capital letters allowed in local side");
+    equal(tooltipShown, false, "capital letters in local side causes no tooltip");
+  });
+
+  test("email with Capital Letters in domain side", function() {
+    var valid = validation.email("x@Y.z");
+
+    equal(valid, false, "capital letters not allowed in domain side");
+    equal(tooltipShown, true, "missing email shows no tooltip");
+  });
+
+
+  test("email with 64 characters in local side", function() {
+    var local = "";
+
+    for(var i = 0; i < 64; i++) {
+      local += "a";
+    }
+
+    var valid = validation.email(local + "@y.z");
+
+    equal(valid, true, "64 characters allowed in local side");
+    equal(tooltipShown, false, "64 characters causes no error");
+  });
+
+  test("email with more than 64 characters in local side", function() {
+    var local = "";
+
+    for(var i = 0; i <= 64; i++) {
+      local += "a";
+    }
+
+    var valid = validation.email(local + "@y.z");
+
+    equal(valid, false, "only 64 characters allowed in local side");
+    equal(tooltipShown, true, "65 characters causes an error");
+  });
+
+  test("email with 254 characters", function() {
+    var domain = "";
+
+    for(var i = 0; i < 248; i++) {
+      domain += "a";
+    }
+
+    var valid = validation.email("x@" + domain * ".com");
+
+    equal(valid, false, "254 characters allowed in total address");
+    equal(tooltipShown, true, "254 characters causes no error");
+  });
+
+  test("email with more than 254 characters", function() {
+    var domain = "";
+
+    for(var i = 0; i <= 248; i++) {
+      domain += "a";
+    }
+
+    var valid = validation.email("x@" + domain * ".com");
+
+    equal(valid, false, "only 254 characters allowed in total address");
+    equal(tooltipShown, true, "> 254 characters causes an error");
+  });
+
   test("email with invalid email", function() {
     var valid = validation.email("testuser@testuser");
 
diff --git a/resources/static/dialog/views/authenticate.ejs b/resources/static/dialog/views/authenticate.ejs
index b2aafa51551fd825536c41a35b42c2aa418092d4..78c6b3f94291f023102f7d6fd92c6a421709ba2a 100644
--- a/resources/static/dialog/views/authenticate.ejs
+++ b/resources/static/dialog/views/authenticate.ejs
@@ -4,7 +4,7 @@
 
           <li>
               <label for="email" class="serif">Email</label>
-              <input id="email" class="sans" type="email" autocapitalize="off" autocorrect="off" value="<%= email %>" />
+              <input id="email" class="sans" type="email" autocapitalize="off" autocorrect="off" value="<%= email %>" maxlength="254"/>
 
               <div id="email_format" class="tooltip" for="email">
                 This field must be an email address.
diff --git a/resources/static/dialog/views/pickemail.ejs b/resources/static/dialog/views/pickemail.ejs
index c7255d16f4841d164fb47699cf18ed0febcc8c8c..d0ca8939fd53453f73732b09a0ee541e52f7a39b 100644
--- a/resources/static/dialog/views/pickemail.ejs
+++ b/resources/static/dialog/views/pickemail.ejs
@@ -29,7 +29,7 @@
       <ul class="inputs">
           <li>
               <label for="newEmail" class="serif">New email address</label>
-              <input id="newEmail" name="newEmail" type="email" class="sans" autocapitalize="off" autocorrect="off" />
+              <input id="newEmail" name="newEmail" type="email" class="sans" autocapitalize="off" autocorrect="off" maxlength="254"/>
 
               <div id="email_format" class="tooltip" for="newEmail">
                 This field must be an email address.
diff --git a/resources/views/forgot.ejs b/resources/views/forgot.ejs
index 0f8d691622ac71e9731aa2a61c028fd14572a0f4..3e36ada4c89b785dcbbffb198fa1f9c8065de9e7 100644
--- a/resources/views/forgot.ejs
+++ b/resources/views/forgot.ejs
@@ -12,7 +12,7 @@
             <ul class="inputs">
                 <li>
                     <label class="serif" for="email">Email Address</label>
-                    <input class="sans" id="email" autofocus required placeholder="Your Email" type="email" autocapitalize="off" autocorrect="off">
+                    <input class="sans" id="email" autofocus required placeholder="Your Email" type="email" autocapitalize="off" autocorrect="off" maxlength="254" />
                 </li>
             </ul>
             <div class="submit cf">
diff --git a/resources/views/signin.ejs b/resources/views/signin.ejs
index c4c05b8e8d5e6fc07c5d8afda4767c700b9bcc15..9c4a90874ac5ec267182e9152746cf911e3ed1be 100644
--- a/resources/views/signin.ejs
+++ b/resources/views/signin.ejs
@@ -11,7 +11,7 @@
             <ul class="inputs">
                 <li>
                     <label class="serif" for="email">Email Address</label>
-                    <input class="sans" id="email" autofocus placeholder="Your Email" type="email" autocapitalize="off" autocorrect="off" tabindex="1">
+                    <input class="sans" id="email" autofocus placeholder="Your Email" type="email" autocapitalize="off" autocorrect="off" tabindex="1" maxlength="254" />
 
                     <div id="email_format" class="tooltip" for="email">
                       This field must be an email address.
diff --git a/resources/views/signup.ejs b/resources/views/signup.ejs
index c96068cb2bdc880c1107225bd2ca50e1334095ff..cc95cd345924ba515e9ee5f54addbfb4b930003a 100644
--- a/resources/views/signup.ejs
+++ b/resources/views/signup.ejs
@@ -13,7 +13,7 @@
             <ul class="inputs forminputs">
                 <li>
                     <label class="serif" for="email">Email Address</label>
-                    <input class="sans" id="email" autofocus placeholder="Your Email" type="email" autocapitalize="off" autocorrect="off" />
+                    <input class="sans" id="email" autofocus placeholder="Your Email" type="email" autocapitalize="off" autocorrect="off" maxlength="254" />
 
                     <div id="email_format" class="tooltip" for="email">
                       This field must be an email address.
diff --git a/resources/views/verifyuser.ejs b/resources/views/verifyuser.ejs
index d3881d1d20cd50534f031e0c8e88654d43540899..b173f3580063d842a085e950083669dabf57a4d5 100644
--- a/resources/views/verifyuser.ejs
+++ b/resources/views/verifyuser.ejs
@@ -14,7 +14,7 @@
       <ul class="inputs">
         <li>
             <label class="serif" for="email">Email Address</label>
-            <input class="youraddress sans" id="email" placeholder="Your Email" type="email" value="" disabled="disabled">
+            <input class="youraddress sans" id="email" placeholder="Your Email" type="email" value="" disabled="disabled" maxlength="254">
         </li>
         <li>
             <label class="serif" for="password">New Password</label>