diff --git a/css/all-app.css b/css/all-app.css
index b49caed..b2fd2e5 100644
--- a/css/all-app.css
+++ b/css/all-app.css
@@ -1043,7 +1043,7 @@
 }
 
 div.dialog_body {
-	padding: 8px 8px 16px;
+	padding: 8px 4px 16px 4px;
 	border-radius: 5px;
 	-moz-border-radius: 5px;
 	-webkit-border-radius: 5px;	
diff --git a/css/all-web.css b/css/all-web.css
index bebfe9a..9359de8 100644
--- a/css/all-web.css
+++ b/css/all-web.css
@@ -362,7 +362,7 @@
 }
 
 div.dialog_body {
-	padding: 8px 8px 16px;
+	padding: 8px 4px 16px 4px;
 	border-radius: 5px;
 	-moz-border-radius: 5px;
 	-webkit-border-radius: 5px;	
diff --git a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js
index bc0a145..391bbcd 100644
--- a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js
+++ b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.js
@@ -42,27 +42,31 @@
 }
 
 cur_frm.cscript.onload_post_render = function(doc, dt, dn) {
-	var callback2 = null;
-	if(doc.customer && doc.__islocal) {
+	var callback = function(doc, dt, dn) {
 		// called from mapper, update the account names for items and customer
-		callback2 = function(doc, dt, dn) {
-			$c_obj(make_doclist(doc.doctype,doc.name),
-				'load_default_accounts','',
-				function(r,rt) {
-					refresh_field('entries');
-					cur_frm.cscript.customer(doc,dt,dn,onload=true);
-				}
-			);
+		var callback2 = function(doc, dt, dn) {
+			if(doc.customer && doc.__islocal) {
+				$c_obj(make_doclist(doc.doctype,doc.name),
+					'load_default_accounts','',
+					function(r,rt) {
+						refresh_field('entries');
+						cur_frm.cscript.customer(doc,dt,dn,onload=true);
+					}
+				);
+			}
 		}
-	}
-	// defined in sales_common.js
-	var callback1 = function(doc, dt, dn) {
-		//for previously created sales invoice, set required field related to pos	
-		cur_frm.cscript.update_item_details(doc, dt, dn, callback2);
-	}
+		// defined in sales_common.js
+		var callback1 = function(doc, dt, dn) {
+			//for previously created sales invoice, set required field related to pos	
+			cur_frm.cscript.update_item_details(doc, dt, dn, callback2);
+		}
 		
-	if(doc.is_pos ==1) cur_frm.cscript.is_pos(doc, dt, dn,callback1);
-	else cur_frm.cscript.update_item_details(doc, dt, dn, callback2);
+		if(doc.is_pos ==1) cur_frm.cscript.is_pos(doc, dt, dn,callback1);
+		else cur_frm.cscript.update_item_details(doc, dt, dn, callback2);
+	}
+
+	cur_frm.cscript.hide_price_list_currency(doc, dt, dn, callback); 
+
 }
 
 
@@ -97,16 +101,11 @@
 cur_frm.cscript.refresh = function(doc, dt, dn) {
 	cur_frm.cscript.is_opening(doc, dt, dn);
 	cur_frm.cscript.hide_fields(doc, dt, dn);
-
-	var callback = function() {
-		cur_frm.cscript.dynamic_label(doc, dt, dn);
-	}
-	cur_frm.cscript.hide_price_list_currency(doc, dt, dn, callback); 
-
-
 	// Show / Hide button
 	cur_frm.clear_custom_buttons();
 
+	if (!cur_frm.cscript.is_onload)	cur_frm.cscript.hide_price_list_currency(doc, dt, dn); 
+
 	if(doc.docstatus==1) {
 		cur_frm.add_custom_button('View Ledger', cur_frm.cscript['View Ledger Entry']);
 		cur_frm.add_custom_button('Send SMS', cur_frm.cscript['Send SMS']);
diff --git a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py
index 03fd762..d09adc2 100644
--- a/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py
+++ b/erpnext/accounts/doctype/receivable_voucher/receivable_voucher.py
@@ -167,16 +167,19 @@
 	# Item Details
 	# -------------
 	def get_item_details(self, args=None):
-		args = eval(args)
-		if args['item_code']:
+		args = args and eval(args) or {}
+		if args.get('item_code'):
 			ret = get_obj('Sales Common').get_item_details(args, self)
 			return self.get_pos_details(args, ret)
 		else:
 			obj = get_obj('Sales Common')
 			for doc in self.doclist:
 				if doc.fields.get('item_code'):
-					ret = obj.get_item_details(doc.item_code, self)
-					ret = self.get_pos_details(doc.item_code, ret)
+					arg = {'item_code':doc.fields.get('item_code'), 'income_account':doc.fields.get('income_account'), 
+						'cost_center': doc.fields.get('cost_center'), 'warehouse': doc.fields.get('warehouse')};
+
+					ret = obj.get_item_details(arg, self)
+					ret = self.get_pos_details(arg, ret)
 					for r in ret:
 						if not doc.fields.get(r):
 							doc.fields[r] = ret[r]		
@@ -205,14 +208,6 @@
 		get_obj('Sales Common').get_adj_percent(self)
 
 
-	def get_comp_base_currency(self):
-		return get_obj('Sales Common').get_comp_base_currency(self.doc.company)
-
-	def get_price_list_currency(self):
-		return get_obj('Sales Common').get_price_list_currency(self.doc.price_list_name, self.doc.company)
-
-
-
 	# Get tax rate if account type is tax
 	# ------------------------------------
 	def get_rate(self,arg):
diff --git a/erpnext/selling/doctype/quotation/quotation.js b/erpnext/selling/doctype/quotation/quotation.js
index 2a130a5..7f40782 100644
--- a/erpnext/selling/doctype/quotation/quotation.js
+++ b/erpnext/selling/doctype/quotation/quotation.js
@@ -50,8 +50,11 @@
 }
 
 cur_frm.cscript.onload_post_render = function(doc, dt, dn) {
-	// defined in sales_common.js
-	cur_frm.cscript.update_item_details(doc, cdt, cdn);
+	var callback = function(doc, dt, dn) {
+		// defined in sales_common.js
+		cur_frm.cscript.update_item_details(doc, dt, dn);
+	}
+	cur_frm.cscript.hide_price_list_currency(doc, dt, dn, callback); 
 }
 
 // hide - unhide fields based on lead or customer..
@@ -83,10 +86,7 @@
 
 	cur_frm.clear_custom_buttons();
 
-	var callback = function() {
-		cur_frm.cscript.dynamic_label(doc, cdt, cdn);
-	}
-	cur_frm.cscript.hide_price_list_currency(doc, cdt, cdn, callback); 
+	if (!cur_frm.cscript.is_onload) cur_frm.cscript.hide_price_list_currency(doc, cdt, cdn); 
 
 
 	if(doc.docstatus == 1 && doc.status!='Order Lost') {
diff --git a/erpnext/selling/doctype/quotation/quotation.py b/erpnext/selling/doctype/quotation/quotation.py
index 531de21..de4056d 100644
--- a/erpnext/selling/doctype/quotation/quotation.py
+++ b/erpnext/selling/doctype/quotation/quotation.py
@@ -77,14 +77,16 @@
 	# Get Item Details
 	# -----------------
 	def get_item_details(self, args=None):
-		args = eval(args)
-		if args['item_code']:
+		args = args and eval(args) or {}
+		if args.get('item_code'):
 			return get_obj('Sales Common').get_item_details(args, self)
 		else:
 			obj = get_obj('Sales Common')
 			for doc in self.doclist:
 				if doc.fields.get('item_code'):
-					ret = obj.get_item_details(doc.item_code, self)
+					arg = {'item_code':doc.fields.get('item_code'), 'income_account':doc.fields.get('income_account'), 
+						'cost_center': doc.fields.get('cost_center'), 'warehouse': doc.fields.get('warehouse')};
+					ret = obj.get_item_details(arg, self)
 					for r in ret:
 						if not doc.fields.get(r):
 							doc.fields[r] = ret[r]					
@@ -96,11 +98,6 @@
 		get_obj('Sales Common').get_adj_percent(self)
 
 	
-	def get_comp_base_currency(self):
-		return get_obj('Sales Common').get_comp_base_currency(self.doc.company)
-
-	def get_price_list_currency(self):
-		return get_obj('Sales Common').get_price_list_currency(self.doc.price_list_name, self.doc.company)
 		
 
 # OTHER CHARGES TRIGGER FUNCTIONS
diff --git a/erpnext/selling/doctype/sales_common/sales_common.js b/erpnext/selling/doctype/sales_common/sales_common.js
index 5d88c30..b9bff5c 100644
--- a/erpnext/selling/doctype/sales_common/sales_common.js
+++ b/erpnext/selling/doctype/sales_common/sales_common.js
@@ -75,7 +75,6 @@
 
 
 
-
 // ============== Customer and its primary contact Details ============================
 cur_frm.cscript.customer = function(doc, cdt, cdn) {
 	if(doc.customer){
@@ -136,17 +135,11 @@
 // Change label dynamically based on currency
 //------------------------------------------------------------------
 
-cur_frm.cscript.dynamic_label = function(doc, cdt, cdn) {
-	var callback = function(r, rt) {
-		if (r.message) base_curr = r.message;
-		else base_curr = sys_defaults['currency'];
+cur_frm.cscript.dynamic_label = function(doc, cdt, cdn, base_curr, callback) {
+	set_dynamic_label_par(doc, cdt, cdn, base_curr);
+	set_dynamic_label_child(doc, cdt, cdn, base_curr);
 
-		set_dynamic_label_par(doc, cdt, cdn, base_curr);
-		set_dynamic_label_child(doc, cdt, cdn, base_curr);
-	}
-
-	if (doc.company == sys_defaults['company']) callback('', '');
-	else $c_obj(make_doclist(doc.doctype, doc.name), 'get_comp_base_currency', '', callback);
+	if (callback) callback(doc, cdt, cdn);
 }
 
 
@@ -155,27 +148,30 @@
 
 cur_frm.cscript.hide_price_list_currency = function(doc, cdt, cdn, callback1) {
 	if (doc.price_list_name && doc.currency) {
-		var callback = function(r, rt) {
-			pl_currency = r.message[0]?r.message[0]:[];
-			if (pl_currency.length==1) {
-				if (pl_currency[0] == doc.currency) set_multiple(cdt, cdn, {price_list_currency:doc.currency, plc_conversion_rate:doc.conversion_rate});
-				else if (pl_currency[0] = r.message[1]) set_multiple(cdt, cdn, {price_list_currency:pl_currency[0], plc_conversion_rate:1})
-				hide_field(['price_list_currency', 'plc_conversion_rate']);
-			} else unhide_field(['price_list_currency', 'plc_conversion_rate']);
+		wn.call({
+			method: 'selling.doctype.sales_common.sales_common.get_price_list_currency',
+			args: {'price_list':doc.price_list_name, 'company': doc.company},
+			callback: function(r, rt) {
+				pl_currency = r.message[0]?r.message[0]:[];
+				if (pl_currency.length==1) {
+					if (pl_currency[0] == doc.currency) set_multiple(cdt, cdn, {price_list_currency:doc.currency, plc_conversion_rate:doc.conversion_rate});
+					else if (pl_currency[0] = r.message[1]) set_multiple(cdt, cdn, {price_list_currency:pl_currency[0], plc_conversion_rate:1})
+					hide_field(['price_list_currency', 'plc_conversion_rate']);
+				} else unhide_field(['price_list_currency', 'plc_conversion_rate']);
 
-			if (r.message[1] == doc.currency) {
-				set_multiple(cdt, cdn, {conversion_rate:1});
-				hide_field(['conversion_rate', 'grand_total_export', 'in_words_export', 'rounded_total_export']);
-			} else unhide_field(['conversion_rate', 'grand_total_export', 'in_words_export', 'rounded_total_export']);
+				if (r.message[1] == doc.currency) {
+					set_multiple(cdt, cdn, {conversion_rate:1});
+					hide_field(['conversion_rate', 'grand_total_export', 'in_words_export', 'rounded_total_export']);
+				} else unhide_field(['conversion_rate', 'grand_total_export', 'in_words_export', 'rounded_total_export']);
 
-			if (r.message[1] == doc.price_list_currency) {
-				set_multiple(cdt, cdn, {plc_conversion_rate:1});
-				hide_field('plc_conversion_rate');
-			} else unhide_field('plc_conversion_rate');
-
-			callback1()
-		}
-		$c_obj(make_doclist(doc.doctype, doc.name), 'get_price_list_currency', '', callback);
+				if (r.message[1] == doc.price_list_currency) {
+					set_multiple(cdt, cdn, {plc_conversion_rate:1});
+					hide_field('plc_conversion_rate');
+				} else unhide_field('plc_conversion_rate');
+				
+				cur_frm.cscript.dynamic_label(doc, cdt, cdn, r.message[1], callback1);	
+			}
+		})
 	}
 }
 
@@ -213,12 +209,15 @@
 cur_frm.cscript.plc_conversion_rate = cur_frm.cscript.currency;
 
 cur_frm.cscript.company = function(doc, dt, dn) {
-	var callback = function(r, rt) {
-		var doc = locals[dt][dn];
-		set_multiple(doc.doctype, doc.name, {currency:r.message,price_list_currency:r.message});
-		cur_frm.cscript.currency(doc, cdt, cdn);
-	}
-	$c_obj(make_doclist(doc.doctype, doc.name), 'get_comp_base_currency', '', callback);
+	wn.call({
+		method: 'selling.doctype.sales_common.sales_common.get_comp_base_currency',
+		args: {company:doc.company},
+		callback: function(r, rt) {
+			var doc = locals[dt][dn];
+			set_multiple(doc.doctype, doc.name, {currency:r.message, price_list_currency:r.message});
+			cur_frm.cscript.currency(doc, cdt, cdn);
+		}
+	});
 }
 
 
@@ -234,7 +233,6 @@
 					refresh_field(fname);
 					var doc = locals[cdt][cdn];
 					cur_frm.cscript.recalc(doc,3);		//this is to re-calculate BASIC RATE and AMOUNT on basis of changed REF RATE
-					cur_frm.cscript.dynamic_label(doc, cdt, cdn);	
 				}
 			);
 		}
diff --git a/erpnext/selling/doctype/sales_common/sales_common.py b/erpnext/selling/doctype/sales_common/sales_common.py
index 003c3bd..a5017c2 100644
--- a/erpnext/selling/doctype/sales_common/sales_common.py
+++ b/erpnext/selling/doctype/sales_common/sales_common.py
@@ -178,18 +178,6 @@
 			d.export_amount = flt(d.qty)*flt(base_ref_rate)/flt(obj.doc.conversion_rate)
 
 
-	def get_comp_base_currency(self, comp):
-		""" get default currency of company"""
-		return webnotes.conn.sql("select default_currency from `tabCompany` where name = %s", comp)[0][0]
-
-	def get_price_list_currency(self, price_list, comp):
-		""" Get all currency in which price list is maintained"""
-		plc = webnotes.conn.sql("select distinct ref_currency from `tabRef Rate Detail` where price_list_name = %s", price_list)
-		plc = [d[0] for d in plc]
-		base_currency = self.get_comp_base_currency(comp)
-		return plc, base_currency
-	
-
 	# Load Default Taxes
 	# ====================
 	def load_default_taxes(self, obj):
@@ -781,3 +769,17 @@
 						where
 							name="%(name)s"
 					""" % args)
+
+
+@webnotes.whitelist()
+def get_comp_base_currency(arg=None):
+	""" get default currency of company"""
+	return webnotes.conn.sql("select default_currency from `tabCompany` where name = %s", webnotes.form_dict['company'])[0][0]
+
+@webnotes.whitelist()
+def get_price_list_currency(arg=None):
+	""" Get all currency in which price list is maintained"""
+	plc = webnotes.conn.sql("select distinct ref_currency from `tabRef Rate Detail` where price_list_name = %s", webnotes.form_dict['price_list'])
+	plc = [d[0] for d in plc]
+	base_currency = get_comp_base_currency(webnotes.form_dict['company'])
+	return plc, base_currency
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index 4a724d2..a04423d 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -41,10 +41,15 @@
 }
 
 cur_frm.cscript.onload_post_render = function(doc, cdt, cdn) {
-	if(doc.__islocal) {
-		// defined in sales_common.js
-		cur_frm.cscript.update_item_details(doc, cdt, cdn);
+	var callback = function(doc, cdt, cdn) {
+		if(doc.__islocal) {
+			// defined in sales_common.js
+			cur_frm.cscript.update_item_details(doc, cdt, cdn);
+		}
 	}
+	
+	cur_frm.cscript.hide_price_list_currency(doc, cdt, cdn, callback); 
+
 }
 
 
@@ -52,10 +57,8 @@
 //==================
 cur_frm.cscript.refresh = function(doc, cdt, cdn) {
 	cur_frm.clear_custom_buttons();
-	var callback = function() {
-		cur_frm.cscript.dynamic_label(doc, cdt, cdn);
-	}
-	cur_frm.cscript.hide_price_list_currency(doc, cdt, cdn, callback); 
+
+	if (!cur_frm.cscript.is_onload) cur_frm.cscript.hide_price_list_currency(doc, cdt, cdn); 
 
 
 	if(doc.docstatus==1) {
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 943a1fd..c886ec3 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -102,14 +102,16 @@
 	# Get Item Details
 	# ----------------
 	def get_item_details(self, args=None):
-		args = eval(args)
-		if args['item_code']:
+		args = args and eval(args) or {}
+		if args.get('item_code'):
 			return get_obj('Sales Common').get_item_details(args, self)
 		else:
 			obj = get_obj('Sales Common')
 			for doc in self.doclist:
 				if doc.fields.get('item_code'):
-					ret = obj.get_item_details(doc.item_code, self)
+					arg = {'item_code':doc.fields.get('item_code'), 'income_account':doc.fields.get('income_account'), 
+						'cost_center': doc.fields.get('cost_center'), 'warehouse': doc.fields.get('warehouse')};
+					ret = obj.get_item_details(arg, self)
 					for r in ret:
 						if not doc.fields.get(r):
 							doc.fields[r] = ret[r]					
@@ -120,13 +122,6 @@
 	def get_adj_percent(self, arg=''):
 		get_obj('Sales Common').get_adj_percent(self)
 
-	def get_comp_base_currency(self):
-		return get_obj('Sales Common').get_comp_base_currency(self.doc.company)
-
-	def get_price_list_currency(self):
-		return get_obj('Sales Common').get_price_list_currency(self.doc.price_list_name, self.doc.company)
-
-
 
 
 	# Get projected qty of item based on warehouse selected
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js
index 3a8931e..b0569fc 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.js
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.js
@@ -43,17 +43,19 @@
 
 cur_frm.cscript.onload_post_render = function(doc, dt, dn) {
 	// defined in sales_common.js
-	if(doc.__islocal) cur_frm.cscript.update_item_details(doc, dt, dn);
+	var callback = function(doc, dt, dn) {
+		if(doc.__islocal) cur_frm.cscript.update_item_details(doc, dt, dn);
+	}
+
+	cur_frm.cscript.hide_price_list_currency(doc, dt, dn, callback); 
 } 
 
 // REFRESH
 // ================================================================================================
 cur_frm.cscript.refresh = function(doc, cdt, cdn) { 
 	cur_frm.clear_custom_buttons();
-	var callback = function() {
-		cur_frm.cscript.dynamic_label(doc, cdt, cdn);
-	}
-	cur_frm.cscript.hide_price_list_currency(doc, cdt, cdn, callback); 
+	
+	if (!cur_frm.cscript.is_onload) cur_frm.cscript.hide_price_list_currency(doc, cdt, cdn); 
 
  
 	if(doc.per_billed < 100 && doc.docstatus==1) cur_frm.add_custom_button('Make Invoice', cur_frm.cscript['Make Sales Invoice']);
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index a94531b..0bca9d0 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -117,14 +117,16 @@
 
 	# ***************** Get Item Details ******************************
 	def get_item_details(self, args=None):
-		args = eval(args)
-		if args['item_code']:
+		args = args and eval(args) or {}
+		if args.get('item_code'):
 			return get_obj('Sales Common').get_item_details(args, self)
 		else:
 			obj = get_obj('Sales Common')
 			for doc in self.doclist:
 				if doc.fields.get('item_code'):
-					ret = obj.get_item_details(doc.item_code, self)
+					arg = {'item_code':doc.fields.get('item_code'), 'income_account':doc.fields.get('income_account'), 
+						'cost_center': doc.fields.get('cost_center'), 'warehouse': doc.fields.get('warehouse')};
+					ret = obj.get_item_details(arg, self)
 					for r in ret:
 						if not doc.fields.get(r):
 							doc.fields[r] = ret[r]					
@@ -135,13 +137,6 @@
 		get_obj('Sales Common').get_adj_percent(self)
 
 
-	def get_comp_base_currency(self):
-		return get_obj('Sales Common').get_comp_base_currency(self.doc.company)
-
-	def get_price_list_currency(self):
-		return get_obj('Sales Common').get_price_list_currency(self.doc.price_list_name, self.doc.company)
-
-
 	# ********** Get Actual Qty of item in warehouse selected *************
 	def get_actual_qty(self,args):
 		args = eval(args)
diff --git a/version.num b/version.num
index 3879e48..5d1d1b1 100644
--- a/version.num
+++ b/version.num
@@ -1 +1 @@
-753
\ No newline at end of file
+755
\ No newline at end of file
