diff --git a/buying/doctype/purchase_common/purchase_common.js b/buying/doctype/purchase_common/purchase_common.js
index 0851db7..77cfd1b 100644
--- a/buying/doctype/purchase_common/purchase_common.js
+++ b/buying/doctype/purchase_common/purchase_common.js
@@ -202,23 +202,37 @@
 }
 
 //==================== UOM ======================================================================
-cur_frm.cscript.uom = function(doc, cdt, cdn) {
+cur_frm.cscript.uom = function(doc, cdt, cdn, args) {
+	if(!args) args = {};
+	
+	// args passed can contain conversion_factor
 	var d = locals[cdt][cdn];
-	if (d.item_code && d.uom) {
-		call_back = function(doc, cdt, cdn){
-			cur_frm.cscript.calc_amount(doc, 2);
-		}
-		str_arg = {'item_code':d.item_code, 'uom':d.uom, 'stock_qty':flt(d.stock_qty), 'qty': flt(d.qty), 'conversion_rate':doc.conversion_rate, 'doc_name': doc.name}
-		// Updates Conversion Factor, Qty and Purchase Rate
-		get_server_fields('get_uom_details',JSON.stringify(str_arg), fname, doc,cdt,cdn,1, call_back);
-		// don't make mistake of calling update_stock_qty() the get_uom_details returns stock_qty as per conversion factor properly
+	$.extend(args, {
+		item_code: d.item_code,
+		uom: d.uom,
+		stock_qty: flt(d.stock_qty),
+	});
+	
+	if(d.item_code && d.uom) {
+		wn.call({
+			method: "buying.doctype.purchase_common.purchase_common.get_uom_details",
+			args: { args: args },
+			callback: function(r) {
+				d = locals[cdt][cdn];
+				$.extend(d, r.message);
+				refresh_field(cur_frm.cscript.fname);
+				cur_frm.cscript.calc_amount(doc, 2);
+			}
+		});
 	}
 }
 
 
 //==================== Conversion factor =========================================================
 cur_frm.cscript.conversion_factor = function(doc, cdt, cdn) {
-	cur_frm.cscript.uom(doc, cdt, cdn);
+	var item = locals[cdt][cdn];
+	
+	cur_frm.cscript.uom(doc, cdt, cdn, { conversion_factor: item.conversion_factor });
 }
 
 //==================== stock qty ======================================================================
diff --git a/buying/doctype/purchase_common/purchase_common.py b/buying/doctype/purchase_common/purchase_common.py
index eb8ebef..9c1187d 100644
--- a/buying/doctype/purchase_common/purchase_common.py
+++ b/buying/doctype/purchase_common/purchase_common.py
@@ -182,39 +182,6 @@
 		ret = { 'projected_qty' : bin and flt(bin[0]['projected_qty']) or 0 }
 		return ret
 
-	def get_uom_details(self, arg = ''):
-		"""fetches details on change of UOM"""
-		import json
-		arg, ret = json.loads(arg), {}
-	
-		uom = webnotes.conn.sql("""\
-			select conversion_factor
-			from `tabUOM Conversion Detail`
-			where parent = %s and uom = %s""", (arg['item_code'],arg['uom']), as_dict = 1)
-		
-		if not uom: return ret
-		
-		last_purchase_details, last_purchase_date = self.get_last_purchase_details(arg['item_code'], arg['doc_name'])
-
-		conversion_factor = flt(uom[0]['conversion_factor'])
-		conversion_rate = flt(arg['conversion_rate'])
-		purchase_ref_rate = last_purchase_details and \
-							(last_purchase_details['purchase_ref_rate'] * conversion_factor) or 0
-		purchase_rate = last_purchase_details and \
-						(last_purchase_details['purchase_rate'] * conversion_factor) or 0
-
-		ret = {
-			'conversion_factor': conversion_factor,
-			'qty': flt(arg['stock_qty']) / conversion_factor,
-			'purchase_ref_rate': purchase_ref_rate,
-			'purchase_rate': purchase_rate,
-			'import_ref_rate': purchase_ref_rate / conversion_rate,
-			'import_rate': purchase_rate / conversion_rate,
-		}
-		
-		return ret
-	
-		
 	# --- Last Purchase Rate related methods ---
 	
 	def update_last_purchase_rate(self, obj, is_submit):
@@ -683,3 +650,27 @@
 			if d.prevdoc_doctype and d.prevdoc_docname:
 				dt = sql("select transaction_date from `tab%s` where name = '%s'" % (d.prevdoc_doctype, d.prevdoc_docname))
 				d.prevdoc_date = dt and dt[0][0].strftime('%Y-%m-%d') or ''
+
+@webnotes.whitelist()
+def get_uom_details(args=None):
+	"""fetches details on change of UOM"""
+	if not args:
+		return {}
+		
+	if isinstance(args, basestring):
+		import json
+		args = json.loads(args)
+
+	uom = webnotes.conn.sql("""select conversion_factor
+		from `tabUOM Conversion Detail` where parent = %s and uom = %s""", 
+		(args['item_code'], args['uom']), as_dict=1)
+
+	if not uom: return {}
+
+	conversion_factor = args.get("conversion_factor") or \
+		flt(uom[0]["conversion_factor"])
+	
+	return {
+		"conversion_factor": conversion_factor,
+		"qty": flt(args["stock_qty"]) / conversion_factor,
+	}
\ No newline at end of file
diff --git a/buying/doctype/purchase_order/purchase_order.py b/buying/doctype/purchase_order/purchase_order.py
index 4497bcd..e52499c 100644
--- a/buying/doctype/purchase_order/purchase_order.py
+++ b/buying/doctype/purchase_order/purchase_order.py
@@ -69,10 +69,6 @@
 
 
 
-	# Get UOM Details
-	def get_uom_details(self, arg = ''):
-		return get_obj('Purchase Common').get_uom_details(arg)
-
 	# get available qty at warehouse
 	def get_bin_details(self, arg = ''):
 		return get_obj(dt='Purchase Common').get_bin_details(arg)
diff --git a/buying/doctype/purchase_request/purchase_request.py b/buying/doctype/purchase_request/purchase_request.py
index 79c7400..7d0e08e 100644
--- a/buying/doctype/purchase_request/purchase_request.py
+++ b/buying/doctype/purchase_request/purchase_request.py
@@ -121,11 +121,6 @@
 							doc.fields[r] = ret[r]
 
 
-	# Get UOM Details
-	# ---------------------------------
-	def get_uom_details(self, arg = ''):
-		return get_obj(dt='Purchase Common').get_uom_details(arg)
-
 	# GET TERMS & CONDITIONS
 	#-----------------------------
 	def get_tc_details(self):
@@ -219,4 +214,4 @@
 		self.update_bin(is_submit = 0, is_stopped = (cstr(self.doc.status) == 'Stopped') and 1 or 0)
 		
 		# Step 5:=> Set Status
-		webnotes.conn.set(self.doc,'status','Cancelled')
+		webnotes.conn.set(self.doc,'status','Cancelled')
\ No newline at end of file
diff --git a/stock/doctype/purchase_receipt/purchase_receipt.py b/stock/doctype/purchase_receipt/purchase_receipt.py
index 04ad4dc..9e23c27 100644
--- a/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -64,10 +64,6 @@
 							doc.fields[r] = ret[r]
 
 
-	# Get UOM Details
-	def get_uom_details(self, arg = ''):
-		return get_obj(dt='Purchase Common').get_uom_details(arg)
-
 	# GET TERMS & CONDITIONS
 	# =====================================================================================
 	def get_tc_details(self):
