diff --git a/erpnext/startup/startup.js b/erpnext/startup/startup.js
index 6747bae..0689021 100644
--- a/erpnext/startup/startup.js
+++ b/erpnext/startup/startup.js
@@ -150,31 +150,6 @@
 	set_style(repl('body { background: url("files/%(src)s") repeat !important;}', {src:src}))
 }
 
-// =======================================
-
-$(document).bind('ready', function() {
-	(function() {
-		var is_supported = function() {
-			if($.browser.mozilla && flt($.browser.version)<4) return false;
-			if($.browser.msie && flt($.browser.version)<9) return false;
-			if($.browser.webkit && flt($.browser.version)<534) return false;
-			return true;
-		}
-		if(!is_supported()) {
-			$('body').html('<div style="width: 900px; margin: 20px auto; padding: 20px;\
-				background-color: #fff; border: 2px solid #aaa; font-family: Arial">\
-				<h3>Unsupported Browser</h3> \
-				<p><i>ERPNext requires a modern web browser to function correctly</i></p> \
-				<p>Supported browsers are: \
-				<ul><li><a href="http://mozilla.com/firefox">Mozilla Firfox 4+</a>, \
-				<li><a href="http://google.com/chrome">Google Chorme 14+</a>, \
-				<li><a href="http://apple.com/safari">Apple Safari 5+</a>, \
-				<li><a href="http://ie.microsoft.com">Microsoft Internet Explorer 9+</a>, \
-				<li><a href="http://www.opera.com/">Opera</a></p></ul>');
-		}
-	})();	
-})
-
 // start
 $(document).bind('startup', function() {
 	erpnext.startup.start();
diff --git a/js/all-app.js b/js/all-app.js
index c72de9a..c937d70 100644
--- a/js/all-app.js
+++ b/js/all-app.js
Binary files differ
diff --git a/js/all-web.js b/js/all-web.js
index 156f7c5..eb754b7 100644
--- a/js/all-web.js
+++ b/js/all-web.js
@@ -168,6 +168,17 @@
  *	lib/js/core.js
  */
 if(!console){var console={log:function(txt){errprint(txt);}}}
+wn.check_browser_support=function(){var is_supported=function(){if($.browser.mozilla&&flt($.browser.version)<4)return false;if($.browser.msie&&flt($.browser.version)<9)return false;if($.browser.webkit&&flt($.browser.version)<534)return false;return true;}
+if(!is_supported()){$('body').html('<div style="width: 900px; margin: 20px auto; padding: 20px;\
+   background-color: #fff; border: 2px solid #aaa; font-family: Arial">\
+   <h3>Unsupported Browser</h3> \
+   <p><i>ERPNext requires a modern web browser to function correctly</i></p> \
+   <p>Supported browsers are: \
+   <ul><li><a href="http://mozilla.com/firefox">Mozilla Firfox 4+</a>, \
+   <li><a href="http://google.com/chrome">Google Chorme 14+</a>, \
+   <li><a href="http://apple.com/safari">Apple Safari 5+</a>, \
+   <li><a href="http://ie.microsoft.com">Microsoft Internet Explorer 9+</a>, \
+   <li><a href="http://www.opera.com/">Opera</a></p></ul>');}}
 wn.versions.check();$(document).bind('ready',function(){var base=window.location.href.split('#')[0];$.each($('a[softlink!="false"]'),function(i,v){if(v.href.substr(0,base.length)==base){var path=(v.href.substr(base.length));if(path.substr(0,1)!='#'){v.href=base+'#'+path;}}});if(!wn.settings.no_history&&window.location.hash){wn.page.set(window.location.hash.substr(1));}});
 /*
  *	lib/js/legacy/globals.js
@@ -1088,17 +1099,6 @@
 erpnext.startup.set_periodic_updates=function(){wn.updates={};if(wn.updates.id){clearInterval(wn.updates.id);}
 wn.updates.id=setInterval(update_messages,60000);}
 erpnext.set_user_background=function(src){set_style(repl('body { background: url("files/%(src)s") repeat !important;}',{src:src}))}
-$(document).bind('ready',function(){(function(){var is_supported=function(){if($.browser.mozilla&&flt($.browser.version)<4)return false;if($.browser.msie&&flt($.browser.version)<9)return false;if($.browser.webkit&&flt($.browser.version)<534)return false;return true;}
-if(!is_supported()){$('body').html('<div style="width: 900px; margin: 20px auto; padding: 20px;\
-    background-color: #fff; border: 2px solid #aaa; font-family: Arial">\
-    <h3>Unsupported Browser</h3> \
-    <p><i>ERPNext requires a modern web browser to function correctly</i></p> \
-    <p>Supported browsers are: \
-    <ul><li><a href="http://mozilla.com/firefox">Mozilla Firfox 4+</a>, \
-    <li><a href="http://google.com/chrome">Google Chorme 14+</a>, \
-    <li><a href="http://apple.com/safari">Apple Safari 5+</a>, \
-    <li><a href="http://ie.microsoft.com">Microsoft Internet Explorer 9+</a>, \
-    <li><a href="http://www.opera.com/">Opera</a></p></ul>');}})();})
 $(document).bind('startup',function(){erpnext.startup.start();});
 /*
  *	erpnext/website/js/topbar.js
diff --git a/version.num b/version.num
index 4c88dcf..5be040f 100644
--- a/version.num
+++ b/version.num
@@ -1 +1 @@
-805
\ No newline at end of file
+808
\ No newline at end of file
