diff --git a/jslint.html b/jslint.html
index 23ec452..64bb785 100755
--- a/jslint.html
+++ b/jslint.html
@@ -143,8 +143,14 @@ body {
         <a href="http://www.amazon.com/exec/obidos/ASIN/0596517742/wrrrldwideweb"
               target="_blank">Enjoy&nbsp;<i>The Good Parts</i>.</a></p>
     </td></tr></tbody></table>
-<script src="web_jslint.js">
-// json2.js+jslint.js+adsafe.js+intercept.js
+<script src="../plugins/restricter/restrict-mode.js"></script>
+<script src="jslint_restrict.js"></script>
+<script src="adsafe.js"></script>
+<script src="intercept.js"></script>
+<script type="text/javascript">
+    __errorfn = function(err) {
+        console.log(err.message + "\n" + String(err.stack));
+    }
 </script>
 
 <div id="JSLINT_">
diff --git a/jslint.js b/jslint.js
index e4e4227..f023991 100755
--- a/jslint.js
+++ b/jslint.js
@@ -366,7 +366,7 @@
 // can contain data and other functions.
 
 var JSLINT = (function () {
-    "use strict";
+    "use strict"; "use restrict";
 
     var adsafe_id,      // The widget's ADsafe id.
         adsafe_infix = {
@@ -1295,14 +1295,16 @@ var JSLINT = (function () {
 
     if (typeof String.prototype.isAlpha !== 'function') {
         String.prototype.isAlpha = function () {
-            return (this >= 'a' && this <= 'z\uffff') ||
-                (this >= 'A' && this <= 'Z\uffff');
+            var v = this.valueOf();
+            return (v >= 'a' && v <= 'z\uffff') ||
+                (v >= 'A' && v <= 'Z\uffff');
         };
     }
 
     if (typeof String.prototype.isDigit !== 'function') {
         String.prototype.isDigit = function () {
-            return (this >= '0' && this <= '9');
+            var v = this.valueOf();
+            return (v >= '0' && v <= '9');
         };
     }
 
@@ -1325,18 +1327,19 @@ var JSLINT = (function () {
 // Otherwise we must also replace the offending characters with safe
 // sequences.
 
-            if (ix.test(this)) {
-                return this;
+            var v = this.valueOf();
+            if (ix.test(v)) {
+                return v;
             }
-            if (nx.test(this)) {
-                return '"' + this.replace(nxg, function (a) {
+            if (nx.test(v)) {
+                return '"' + v.replace(nxg, function (a) {
                     if (escapes[a]) {
                         return escapes[a];
                     }
                     return '\\u' + ('0000' + a.charCodeAt().toString(16)).slice(-4);
                 }) + '"';
             }
-            return '"' + this + '"';
+            return '"' + v + '"';
         };
     }
 
@@ -6523,7 +6526,7 @@ loop:   for (;;) {
                     if (warning) {
                         evidence = warning.evidence || '';
                         output.push('<p>Problem' + (isFinite(warning.line) ? ' at line ' +
-                            warning.line + ' character ' + warning.character : '') +
+                            String(warning.line) + ' character ' + String(warning.character) : '') +
                             ': ' + warning.reason.entityify() +
                             '</p><p class=evidence>' +
                             (evidence && (evidence.length > 80 ? evidence.slice(0, 77) + '...' :
@@ -6536,7 +6539,7 @@ loop:   for (;;) {
                 snippets = [];
                 for (i = 0; i < data.implieds.length; i += 1) {
                     snippets[i] = '<code>' + data.implieds[i].name + '</code>&nbsp;<i>' +
-                        data.implieds[i].line + '</i>';
+                        String(data.implieds[i].line) + '</i>';
                 }
                 output.push('<p><i>Implied global:</i> ' + snippets.join(', ') + '</p>');
             }
@@ -6545,7 +6548,7 @@ loop:   for (;;) {
                 snippets = [];
                 for (i = 0; i < data.unused.length; i += 1) {
                     snippets[i] = '<code><u>' + data.unused[i].name + '</u></code>&nbsp;<i>' +
-                        data.unused[i].line + ' </i> <small>' +
+                        String(data.unused[i].line) + ' </i> <small>' +
                         data.unused[i]['function'] + '</small>';
                 }
                 output.push('<p><i>Unused variable:</i> ' + snippets.join(', ') + '</p>');
@@ -6583,7 +6586,7 @@ loop:   for (;;) {
                         names[j] = the_function.param[j].value;
                     }
                 }
-                output.push('<br><div class=function><i>' + the_function.line + '</i> ' +
+                output.push('<br><div class=function><i>' + String(the_function.line) + '</i> ' +
                     (the_function.name || '') + '(' + names.join(', ') + ')</div>');
                 detail('<big><b>Unused</b></big>', the_function.unused);
                 detail('Closure', the_function.closure);
