diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.py b/erpnext/stock/report/stock_ledger/stock_ledger.py
index d386230..5bdbca2 100644
--- a/erpnext/stock/report/stock_ledger/stock_ledger.py
+++ b/erpnext/stock/report/stock_ledger/stock_ledger.py
@@ -107,7 +107,7 @@
 	if include_uom:
 		cf_field = ", ucd.conversion_factor"
 		cf_join = "left join `tabUOM Conversion Detail` ucd on ucd.parent=item.name and ucd.uom='%s'" \
-			% frappe.db.escape(include_uom)
+			% (include_uom)
 
 	res = frappe.db.sql("""
 		select
diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py
index 4c663e3..2ac0bae 100644
--- a/erpnext/stock/utils.py
+++ b/erpnext/stock/utils.py
@@ -253,31 +253,40 @@
 		return
 
 	convertible_cols = {}
-	for col_idx in reversed(range(0, len(columns))):
-		col = columns[col_idx]
-		if isinstance(col, dict) and col.get("convertible") in ['rate', 'qty']:
-			convertible_cols[col_idx] = col['convertible']
-			columns.insert(col_idx+1, col.copy())
-			columns[col_idx+1]['fieldname'] += "_alt"
-			if convertible_cols[col_idx] == 'rate':
-				columns[col_idx+1]['label'] += " (per {})".format(include_uom)
-			else:
-				columns[col_idx+1]['label'] += " ({})".format(include_uom)
+
+	is_dict_obj = False
+	if isinstance(result[0], dict):
+		is_dict_obj = True
+
+	convertible_columns = {}
+	for idx, d in enumerate(columns):
+		key = d.get("fieldname") if is_dict_obj else idx
+		if d.get("convertible"):
+			convertible_columns.setdefault(key, d.get("convertible"))
+
+			# Add new column to show qty/rate as per the selected UOM
+			columns.insert(idx+1, {
+				'label': "{0} (per {1})".format(d.get("label"), include_uom),
+				'fieldname': "{0}_{1}".format(d.get("fieldname"), frappe.scrub(include_uom)),
+				'fieldtype': 'Currency' if d.get("convertible") == 'rate' else 'Float'
+			})
 
 	for row_idx, row in enumerate(result):
-		new_row = []
-		for col_idx, d in enumerate(row):
-			new_row.append(d)
-			if col_idx in convertible_cols:
-				if conversion_factors[row_idx]:
-					if convertible_cols[col_idx] == 'rate':
-						new_row.append(flt(d) * conversion_factors[row_idx])
-					else:
-						new_row.append(flt(d) / conversion_factors[row_idx])
-				else:
-					new_row.append(None)
+		data = row.items() if is_dict_obj else enumerate(row)
+		for key, value in data:
+			if not key in convertible_columns or not conversion_factors[row_idx]:
+				continue
 
-		result[row_idx] = new_row
+			if convertible_columns.get(key) == 'rate':
+				new_value = flt(value) * conversion_factors[row_idx]
+			else:
+				new_value = flt(value) / conversion_factors[row_idx]
+
+			if not is_dict_obj:
+				row.insert(key+1, new_value)
+			else:
+				new_key = "{0}_{1}".format(key, frappe.scrub(include_uom))
+				row[new_key] = new_value
 
 def get_available_serial_nos(item_code, warehouse):
 	return frappe.get_all("Serial No", filters = {'item_code': item_code,
