diff --git a/css/all-app.css b/css/all-app.css
index 52ec682..8d825a2 100644
--- a/css/all-app.css
+++ b/css/all-app.css
@@ -1961,7 +1961,7 @@
 	color: inherit;
 	padding: 10px;
 	font-size: 12px;
-	line-height: 1.7;	
+	line-height: 1.7;
 }
 
 span, div, td, input, textarea, button, select {
@@ -2222,11 +2222,23 @@
 	vertical-align: middle;
 	overflow: hidden;
 	margin: 0px 3px;
+	border-radius: 3px;
+	-moz-border-radius: 3px;
+	-webkit-border-radius: 3px;
 }
 .avatar-small img {
 	width: 24px; 
 }
 
+.erpnext-logo {
+	position: fixed;
+	bottom: 5px;
+	left: 5px;
+	height: 40px;
+	width: 40px;
+	background: url('../images/erpnext-fade.png') no-repeat top left;
+}
+
 /*
  *	lib/css/legacy/messages.css
  */
diff --git a/css/all-web.css b/css/all-web.css
index 8f9003c..8b360ba 100644
--- a/css/all-web.css
+++ b/css/all-web.css
@@ -1822,7 +1822,7 @@
 	color: inherit;
 	padding: 10px;
 	font-size: 12px;
-	line-height: 1.7;	
+	line-height: 1.7;
 }
 
 span, div, td, input, textarea, button, select {
@@ -2083,11 +2083,23 @@
 	vertical-align: middle;
 	overflow: hidden;
 	margin: 0px 3px;
+	border-radius: 3px;
+	-moz-border-radius: 3px;
+	-webkit-border-radius: 3px;
 }
 .avatar-small img {
 	width: 24px; 
 }
 
+.erpnext-logo {
+	position: fixed;
+	bottom: 5px;
+	left: 5px;
+	height: 40px;
+	width: 40px;
+	background: url('../images/erpnext-fade.png') no-repeat top left;
+}
+
 /*
  *	lib/css/legacy/messages.css
  */
diff --git a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js
index 4179ed0..c4288a4 100644
--- a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js
+++ b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js
@@ -36,7 +36,3 @@
 cur_frm.fields_dict['closing_account_head'].get_query = function(doc, cdt, cdn) {
 	return 'SELECT `tabAccount`.name FROM `tabAccount` WHERE `tabAccount`.is_pl_account = "No" AND `tabAccount`.debit_or_credit = "Credit" AND `tabAccount`.company = "'+ cstr(doc.company) +'" AND `tabAccount`.freeze_account = "No" AND `tabAccount`.group_or_ledger = "Ledger" AND `tabAccount`.%(key)s LIKE "%s" ORDER BY `tabAccount`.name ASC LIMIT 50';
 }
-
-cur_frm.cscript.acc_help = function(doc,dt,dn){
-	show_chart_browser('Accounts Browser','Account');
-}
diff --git a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.txt b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.txt
index 54e458e..1f7efb5 100644
--- a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.txt
+++ b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.txt
@@ -241,17 +241,6 @@
 	# DocField
 	{
 		'doctype': u'DocField',
-		'fieldname': u'coa_help',
-		'fieldtype': u'HTML',
-		'label': u'CoA Help',
-		'oldfieldtype': u'HTML',
-		'options': u'<a href="javascript:cur_frm.cscript.acc_help();">To create Account Head, click here</a>',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
 		'fieldname': u'remarks',
 		'fieldtype': u'Small Text',
 		'label': u'Remarks',
diff --git a/erpnext/startup/startup.js b/erpnext/startup/startup.js
index 959c854..b86116a 100644
--- a/erpnext/startup/startup.js
+++ b/erpnext/startup/startup.js
@@ -112,26 +112,13 @@
 	erpnext.set_about();
 	if(wn.control_panel.custom_startup_code)
 		eval(wn.control_panel.custom_startup_code);
-}
-
-// chart of accounts
-// ====================================================================
-show_chart_browser = function(nm, chart_type){
-
-  var call_back = function(){
-    if(nm == 'Sales Browser'){
-      var sb_obj = new SalesBrowser();
-      sb_obj.set_val(chart_type);
-    }
-    else if(nm == 'Accounts Browser')
-      pscript.make_chart(chart_type);
-  }
-  loadpage(nm,call_back);
+		
+	$('body').append('<a class="erpnext-logo" title="Powered by ERPNext" href="http://erpnext.com" target="_blank"></a>')
 }
 
 
 // ========== Update Messages ============
-var update_messages = function(reset) {
+erpnext.update_messages = function(reset) {
 	// Updates Team Messages
 	
 	if(inList(['Guest'], user) || !wn.session_alive) { return; }
@@ -183,7 +170,7 @@
 		clearInterval(wn.updates.id);
 	}
 
-	wn.updates.id = setInterval(update_messages, 60000);
+	wn.updates.id = setInterval(erpnext.update_messages, 60000);
 }
 
 erpnext.set_user_background = function(src) {
diff --git a/erpnext/website/js/topbar.js b/erpnext/website/js/topbar.js
index a76d4ef..a600934 100644
--- a/erpnext/website/js/topbar.js
+++ b/erpnext/website/js/topbar.js
@@ -97,8 +97,6 @@
 		$('footer').html(repl('<div class="web-footer">\
 			<div class="web-footer-menu"><ul></ul></div>\
 			<div class="web-footer-copyright">&copy; %(copyright)s</div>\
-			<div class="web-footer-powered">Powered by \
-				<a href="https://erpnext.com">erpnext.com</a></div>\
 		</div>', wn.boot.website_settings));
 		this.make_items();
 	},
diff --git a/images/erpnext-fade.png b/images/erpnext-fade.png
new file mode 100644
index 0000000..81cc410
--- /dev/null
+++ b/images/erpnext-fade.png
Binary files differ
diff --git a/js/all-app.js b/js/all-app.js
index ae36ed0..5f045e0 100644
--- a/js/all-app.js
+++ b/js/all-app.js
@@ -2247,17 +2247,13 @@
      This ERPNext subscription <b>has expired</b>. \
     </div>',{expiry_string:expiry_string}));}}}
 erpnext.set_about();if(wn.control_panel.custom_startup_code)
-eval(wn.control_panel.custom_startup_code);}
-show_chart_browser=function(nm,chart_type){var call_back=function(){if(nm=='Sales Browser'){var sb_obj=new SalesBrowser();sb_obj.set_val(chart_type);}
-else if(nm=='Accounts Browser')
-pscript.make_chart(chart_type);}
-loadpage(nm,call_back);}
-var update_messages=function(reset){if(inList(['Guest'],user)||!wn.session_alive){return;}
+eval(wn.control_panel.custom_startup_code);$('body').append('<a class="erpnext-logo" title="Powered by ERPNext" href="http://erpnext.com" target="_blank"></a>')}
+erpnext.update_messages=function(reset){if(inList(['Guest'],user)||!wn.session_alive){return;}
 if(!reset){var set_messages=function(r){if(!r.exc){erpnext.toolbar.set_new_comments(r.message.unread_messages);var show_in_circle=function(parent_id,msg){var parent=$('#'+parent_id);if(parent){if(msg){parent.find('span:first').text(msg);parent.toggle(true);}else{parent.toggle(false);}}}
 show_in_circle('unread_messages',r.message.unread_messages.length);show_in_circle('open_support_tickets',r.message.open_support_tickets);show_in_circle('things_todo',r.message.things_todo);show_in_circle('todays_events',r.message.todays_events);}else{clearInterval(wn.updates.id);}}
 wn.call({method:'startup.startup.get_global_status_messages',callback:set_messages});}else{erpnext.toolbar.set_new_comments(0);$('#unread_messages').toggle(false);}}
 erpnext.startup.set_periodic_updates=function(){wn.updates={};if(wn.updates.id){clearInterval(wn.updates.id);}
-wn.updates.id=setInterval(update_messages,60000);}
+wn.updates.id=setInterval(erpnext.update_messages,60000);}
 erpnext.set_user_background=function(src){set_style(repl('#body_div { background: url("files/%(src)s") repeat;}',{src:src}))}
 $(document).bind('startup',function(){erpnext.startup.start();});erpnext.send_message=function(opts){if(opts.btn){$(opts.btn).start_working();}
 wn.call({method:'website.send_message',args:opts,callback:function(r){if(opts.btn){$(opts.btn).done_working();}
diff --git a/js/all-web.js b/js/all-web.js
index 7ea4012..ae63769 100644
--- a/js/all-web.js
+++ b/js/all-web.js
@@ -852,17 +852,13 @@
      This ERPNext subscription <b>has expired</b>. \
     </div>',{expiry_string:expiry_string}));}}}
 erpnext.set_about();if(wn.control_panel.custom_startup_code)
-eval(wn.control_panel.custom_startup_code);}
-show_chart_browser=function(nm,chart_type){var call_back=function(){if(nm=='Sales Browser'){var sb_obj=new SalesBrowser();sb_obj.set_val(chart_type);}
-else if(nm=='Accounts Browser')
-pscript.make_chart(chart_type);}
-loadpage(nm,call_back);}
-var update_messages=function(reset){if(inList(['Guest'],user)||!wn.session_alive){return;}
+eval(wn.control_panel.custom_startup_code);$('body').append('<a class="erpnext-logo" title="Powered by ERPNext" href="http://erpnext.com" target="_blank"></a>')}
+erpnext.update_messages=function(reset){if(inList(['Guest'],user)||!wn.session_alive){return;}
 if(!reset){var set_messages=function(r){if(!r.exc){erpnext.toolbar.set_new_comments(r.message.unread_messages);var show_in_circle=function(parent_id,msg){var parent=$('#'+parent_id);if(parent){if(msg){parent.find('span:first').text(msg);parent.toggle(true);}else{parent.toggle(false);}}}
 show_in_circle('unread_messages',r.message.unread_messages.length);show_in_circle('open_support_tickets',r.message.open_support_tickets);show_in_circle('things_todo',r.message.things_todo);show_in_circle('todays_events',r.message.todays_events);}else{clearInterval(wn.updates.id);}}
 wn.call({method:'startup.startup.get_global_status_messages',callback:set_messages});}else{erpnext.toolbar.set_new_comments(0);$('#unread_messages').toggle(false);}}
 erpnext.startup.set_periodic_updates=function(){wn.updates={};if(wn.updates.id){clearInterval(wn.updates.id);}
-wn.updates.id=setInterval(update_messages,60000);}
+wn.updates.id=setInterval(erpnext.update_messages,60000);}
 erpnext.set_user_background=function(src){set_style(repl('#body_div { background: url("files/%(src)s") repeat;}',{src:src}))}
 $(document).bind('startup',function(){erpnext.startup.start();});erpnext.send_message=function(opts){if(opts.btn){$(opts.btn).start_working();}
 wn.call({method:'website.send_message',args:opts,callback:function(r){if(opts.btn){$(opts.btn).done_working();}
@@ -892,8 +888,6 @@
 $('footer').html(repl('<div class="web-footer">\
    <div class="web-footer-menu"><ul></ul></div>\
    <div class="web-footer-copyright">&copy; %(copyright)s</div>\
-   <div class="web-footer-powered">Powered by \
-    <a href="https://erpnext.com">erpnext.com</a></div>\
   </div>',wn.boot.website_settings));this.make_items();},make_items:function(){var items=wn.boot.website_menus
 for(var i=0;i<items.length;i++){var item=items[i];if(!item.parent_label&&item.parentfield=='footer_items'){erpnext.header_link_settings(item);$('.web-footer-menu ul').append(repl('<li><a href="%(route)s" %(target)s\
      data-label="%(label)s">%(label)s</a></li>',item))}}}});erpnext.header_link_settings=function(item){item.route=item.url||item.custom_page;if(item.route&&item.route.substr(0,4)=='http'){item.target='target="_blank"';}else{item.target='';item.route='#!'+item.route;}}
