diff --git a/accounts/doctype/account/account.py b/accounts/doctype/account/account.py
index b3f9053..28191db 100644
--- a/accounts/doctype/account/account.py
+++ b/accounts/doctype/account/account.py
@@ -78,7 +78,7 @@
 	def validate_root_details(self):
 		#does not exists parent
 		if webnotes.conn.exists("Account", self.doc.name):
-			if not self.doc.get_value("Account", self.doc.name, "parent_account"):
+			if not webnotes.conn.get_value("Account", self.doc.name, "parent_account"):
 				webnotes.msgprint("Root cannot be edited.", raise_exception=1)
 			
 	def convert_group_to_ledger(self):
@@ -182,10 +182,13 @@
 	def on_rename(self,newdn,olddn):
 		company_abbr = sql("select tc.abbr from `tabAccount` ta, `tabCompany` tc where ta.company = tc.name and ta.name=%s", olddn)[0][0]
 		
-		newdnchk = newdn.split(" - ")	
+		parts = newdn.split(" - ")	
 
-		if newdnchk[-1].lower() != company_abbr.lower():
-			msgprint("Please add company abbreviation <b>%s</b>" %(company_abbr), raise_exception=1)
-		else:
-			account_name = " - ".join(newdnchk[:-1])
-			sql("update `tabAccount` set account_name = '%s' where name = '%s'" %(account_name,olddn))
+		if parts[-1].lower() != company_abbr.lower():
+			parts.append(company_abbr)
+
+		account_name = " - ".join(parts[:-1])
+		sql("update `tabAccount` set account_name = '%s' where name = '%s'" % \
+			(account_name,olddn))
+		
+		return " - ".join(parts)
diff --git a/accounts/page/accounts_browser/accounts_browser.js b/accounts/page/accounts_browser/accounts_browser.js
index 3df3770..2d59a46 100644
--- a/accounts/page/accounts_browser/accounts_browser.js
+++ b/accounts/page/accounts_browser/accounts_browser.js
@@ -38,6 +38,7 @@
 		.change(function() {
 			var ctype = wn.get_route()[1] || 'Account';
 			erpnext.account_chart = new erpnext.AccountsChart(ctype, $(this).val(), wrapper);
+			pscript.set_title(wrapper, ctype, $(this).val());
 		})
 		.appendTo(wrapper.appframe.$w.find('.appframe-toolbar'));
 		
@@ -60,16 +61,23 @@
 	});	
 }
 
+pscript.set_title = function(wrapper, ctype, val) {
+	if(val) {
+		wrapper.appframe.set_title('Chart of '+ctype+'s' + " - " + cstr(val));
+	} else {
+		wrapper.appframe.set_title('Chart of '+ctype+'s');
+	}
+}
+
 pscript['onshow_Accounts Browser'] = function(wrapper){
 	// set route
 	var ctype = wn.get_route()[1] || 'Account';
 
-	wrapper.appframe.set_title('Chart of '+ctype+'s');
-
 	if(erpnext.account_chart && erpnext.account_chart.ctype != ctype) {
 		wrapper.$company_select.change();
-	} 
-
+	}
+	
+	pscript.set_title(wrapper, ctype);
 }
 
 erpnext.AccountsChart = Class.extend({
diff --git a/buying/doctype/supplier/supplier.py b/buying/doctype/supplier/supplier.py
index 6310653..0c9d056 100644
--- a/buying/doctype/supplier/supplier.py
+++ b/buying/doctype/supplier/supplier.py
@@ -173,5 +173,11 @@
 			for rec in update_fields:
 				sql("update `tab%s` set supplier_name = '%s' where %s = '%s'" %(rec[0],newdn,rec[1],olddn))
 				
+		old_account = webnotes.conn.get_value("Account", {"master_type": "Supplier",
+			"master_name": olddn})
+				
 		#update master_name in doctype account
 		sql("update `tabAccount` set master_name = '%s', master_type = 'Supplier' where master_name = '%s'" %(newdn,olddn))
+		
+		from webnotes.model.rename_doc import rename_doc
+		rename_doc("Account", old_account, newdn)
diff --git a/selling/doctype/customer/customer.py b/selling/doctype/customer/customer.py
index fa16f45..03a8c7e 100644
--- a/selling/doctype/customer/customer.py
+++ b/selling/doctype/customer/customer.py
@@ -125,6 +125,7 @@
 				parent_account = self.get_receivables_group()
 				arg = {'account_name':self.doc.name,'parent_account': parent_account, 'group_or_ledger':'Ledger', 'company':self.doc.company,'account_type':'','tax_rate':'0','master_type':'Customer','master_name':self.doc.name,'address':self.doc.address}
 				# create
+				
 				ac = get_obj('GL Control').add_ac(cstr(arg))
 				msgprint("Account Head created for "+ac)
 		else :
@@ -236,5 +237,11 @@
 			for rec in update_fields:
 				sql("update `tab%s` set customer_name = '%s' where %s = '%s'" %(rec[0],newdn,rec[1],olddn))
 				
+		old_account = webnotes.conn.get_value("Account", {"master_type": "Customer",
+			"master_name": olddn})
+				
 		#update master_name in doctype account
 		sql("update `tabAccount` set master_name = '%s', master_type = 'Customer' where master_name = '%s'" %(newdn,olddn))
+		
+		from webnotes.model.rename_doc import rename_doc
+		rename_doc("Account", old_account, newdn)
diff --git a/selling/doctype/opportunity/opportunity.js b/selling/doctype/opportunity/opportunity.js
index 3da2ac8..67a6e24 100644
--- a/selling/doctype/opportunity/opportunity.js
+++ b/selling/doctype/opportunity/opportunity.js
@@ -94,8 +94,21 @@
 
 // customer
 cur_frm.cscript.customer = function(doc,dt,dn) {
-	if(doc.customer) get_server_fields('get_default_customer_address', JSON.stringify({customer: doc.customer}),'', doc, dt, dn, 1);
-	if(doc.customer) unhide_field(['customer_name','customer_address','contact_person','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
+	if(doc.customer) {
+		cur_frm.call({
+			method: "get_default_customer_address",
+			args: { customer: doc.customer },
+			callback: function(r) {
+				if(!r.exc) {
+					cur_frm.refresh();
+				}
+			}
+		});
+		
+		unhide_field(["customer_name", "customer_address", "contact_person",
+			"address_display", "contact_display", "contact_mobile", "contact_email",
+			"territory", "customer_group"]);
+	}
 }
 
 cur_frm.cscript.customer_address = cur_frm.cscript.contact_person = function(doc,dt,dn) {		
