diff --git a/erpnext/accounts/doctype/payable_voucher/payable_voucher.js b/erpnext/accounts/doctype/payable_voucher/payable_voucher.js
index 44dea8a..3bdeadd 100644
--- a/erpnext/accounts/doctype/payable_voucher/payable_voucher.js
+++ b/erpnext/accounts/doctype/payable_voucher/payable_voucher.js
@@ -61,12 +61,16 @@
 	}
 	
 	var callback2 = function(r,rt){
-		var doc = locals[cur_frm.doctype][cur_frm.docname];		
+		var doc = locals[cur_frm.doctype][cur_frm.docname];
 		var el = getchildren('PV Detail',doc.name,'entries');
 		for(var i in el){
 			if(el[i].item_code && (!el[i].expense_head || !el[i].cost_center)){
-				args = "{'item_code':'" + el[i].item_code + "','expense_head':'" + el[i].expense_head + "','cost_center':'" + el[i].cost_center + "'}";
-				get_server_fields('get_default_values', args, 'entries', doc, el[i].doctype, el[i].name, 1);
+				args = {
+					item_code: el[i].item_code,
+					expense_head: el[i].expense_head,
+					cost_center: el[i].cost_center
+				};
+				get_server_fields('get_default_values', JSON.stringify(args), 'entries', doc, el[i].doctype, el[i].name, 1);
 			}
 		}
 		cur_frm.cscript.calc_amount(doc, 1);
diff --git a/erpnext/accounts/doctype/payable_voucher/payable_voucher.py b/erpnext/accounts/doctype/payable_voucher/payable_voucher.py
index e220756..14d5e5e 100644
--- a/erpnext/accounts/doctype/payable_voucher/payable_voucher.py
+++ b/erpnext/accounts/doctype/payable_voucher/payable_voucher.py
@@ -61,7 +61,8 @@
 	# Get Default Cost Center and Expense Head from Item Master
 	# ----------------------------------------------------------
 	def get_default_values(self,args):
-		args = eval(args)
+		import json
+		args = json.loads(args)
 		ret = {}
 		if sql("select name from `tabItem` where name = '%s'" % args['item_code']):
 			if not args['expense_head'] or args['expense_head'] == 'undefined':
@@ -105,6 +106,7 @@
 
 
 	def get_pv_details(self, arg):
+		import json
 		item_det = sql("select item_name, brand, description, item_group,purchase_account,cost_center from tabItem where name=%s",arg,as_dict=1)
 		tax = sql("select tax_type, tax_rate from `tabItem Tax` where parent = %s" , arg)
 		t = {}
@@ -119,7 +121,7 @@
 			'amount' : 0.00,
 			'expense_head' : item_det and item_det[0]['purchase_account'] or '',
 			'cost_center' : item_det and item_det[0]['cost_center'] or '',
-			'item_tax_rate'			: str(t)
+			'item_tax_rate'			: json.dumps(t)
 		}
 		return ret
 
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.js b/erpnext/buying/doctype/purchase_common/purchase_common.js
index 541a225..d7d88bb 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.js
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.js
@@ -34,7 +34,7 @@
 
 // Update existing item details
 cur_frm.cscript.update_item_details = function(doc, dt, dn) {
-	if(!cur_frm.doc.__islocal) return;
+	if(!cur_frm.doc.__islocal) { return; }
 	var children = getchildren(cur_frm.cscript.tname, doc.name, cur_frm.cscript.fname);
 	if(children) {
 		$c_obj(make_doclist(doc.doctype, doc.name), 'get_item_details', '',
diff --git a/erpnext/selling/doctype/sales_common/sales_common.py b/erpnext/selling/doctype/sales_common/sales_common.py
index 1420ad6..2498381 100644
--- a/erpnext/selling/doctype/sales_common/sales_common.py
+++ b/erpnext/selling/doctype/sales_common/sales_common.py
@@ -197,17 +197,19 @@
 
 #---------------------------------------- Get Tax Details -------------------------------#
 	def get_tax_details(self, item_code, obj):
+		import json
 		tax = webnotes.conn.sql("select tax_type, tax_rate from `tabItem Tax` where parent = %s" , item_code)
 		t = {}
 		for x in tax: t[x[0]] = flt(x[1])
 		ret = {
-			'item_tax_rate'		:	tax and str(t) or ''
+			'item_tax_rate'		:	tax and json.dumps(t) or ''
 		}
 		return ret
 
 	# Get Serial No Details
 	# ==========================================================================
 	def get_serial_details(self, serial_no, obj):
+		import json
 		item = webnotes.conn.sql("select item_code, make, label,brand, description from `tabSerial No` where name = '%s' and docstatus != 2" %(serial_no), as_dict=1)
 		tax = webnotes.conn.sql("select tax_type, tax_rate from `tabItem Tax` where parent = %s" , item[0]['item_code'])
 		t = {}
@@ -218,7 +220,7 @@
 			'label'						: item and item[0]['label'] or '',
 			'brand'						: item and item[0]['brand'] or '',
 			'description'			: item and item[0]['description'] or '',
-			'item_tax_rate'		: str(t)
+			'item_tax_rate'		: json.dumps(t)
 		}
 		return ret
 		
diff --git a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
index c791e86..ea63d04 100644
--- a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
+++ b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
@@ -112,6 +112,7 @@
 		
 	def cal_charges_and_item_tax_amt(self):
 		""" Re-calculates other charges values and itemwise tax amount for getting valuation rate"""
+		import json
 		for pr in self.selected_pr:
 			obj = get_obj('Purchase Receipt', pr, with_children = 1)
 			total = 0
@@ -121,7 +122,11 @@
 				prev_total, item_tax = flt(prd.amount), 0
 				total += flt(prd.qty) * flt(prd.purchase_rate)
 			
-				item_tax_rate = prd.item_tax_rate and eval(prd.item_tax_rate) or {}
+				try:
+					item_tax_rate = prd.item_tax_rate and json.loads(prd.item_tax_rate) or {}
+				except ValueError:
+					item_tax_rate = prd.item_tax_rate and eval(prd.item_tax_rate) or {}
+
 				
 				ocd = getlist(obj.doclist, 'purchase_tax_details')
 				# calculate tax for other charges
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
index 5d4310f..db5215a 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -241,7 +241,7 @@
 		'from_docname': cur_frm.doc.name,
 		'from_to_list':"[['Purchase Receipt','Payable Voucher'],['Purchase Receipt Detail','PV Detail'],['Purchase Tax Detail','Purchase Tax Detail']]"
 		}, function(r,rt) {
-			 loaddoc('Payable Voucher', n);
+			loaddoc('Payable Voucher', n);
 		}
 	);
 }
