diff --git a/erpnext/stock/doctype/pick_list/pick_list.py b/erpnext/stock/doctype/pick_list/pick_list.py
index 598378a..373dfac 100644
--- a/erpnext/stock/doctype/pick_list/pick_list.py
+++ b/erpnext/stock/doctype/pick_list/pick_list.py
@@ -27,9 +27,9 @@
 		self.set_item_locations()
 
 		# set percentage picked in SO
-		for i in self.get('locations'):
-			if i.sales_order and frappe.db.get_value("Sales Order",i.sales_order,"per_picked") == 100:
-				frappe.throw("Row " + str(i.idx) + " has been picked already!")
+		for location in self.get('locations'):
+			if location.sales_order and frappe.db.get_value("Sales Order",location.sales_order,"per_picked") == 100:
+				frappe.throw("Row " + str(location.idx) + " has been picked already!")
 
 	def before_submit(self):
 		for item in self.locations:
@@ -54,9 +54,9 @@
 
 	def before_cancel(self):
 		#update picked_qty in SO Item on cancel of PL
-		for i in self.get('locations'):
-			if i.sales_order_item:
-				self.update_so(i.sales_order_item,0,i.item_code)
+		for location in self.get('locations'):
+			if location.sales_order_item:
+				self.update_so(location.sales_order_item,0,location.item_code)
 
 	def update_so(self,so_item,picked_qty,item_code):
 		so_doc = frappe.get_doc("Sales Order",frappe.db.get_value("Sales Order Item",so_item,"parent"))
@@ -68,8 +68,12 @@
 
 		frappe.db.set_value("Sales Order Item",so_item,"picked_qty",already_picked+picked_qty)
 
-		total_picked_qty = sum(flt(d.picked_qty) for d in so_doc.get('items')) + picked_qty
-		total_so_qty = sum(flt(d.stock_qty) for d in so_doc.get('items'))
+		total_picked_qty = 0
+		total_so_qty = 0
+		for item in so_doc.get('items'):
+			total_picked_qty += flt(item.picked_qty)
+			total_so_qty += flt(item.stock_qty)
+		total_picked_qty = total_picked_qty	+ picked_qty
 		per_picked = total_picked_qty/total_so_qty * 100
 
 		so_doc.db_set("per_picked", flt(per_picked) ,update_modified=False)
@@ -376,9 +380,9 @@
 	sales_dict = dict()
 	sales_orders = []
 	delivery_note = None
-	for d in pick_list.locations:
-		if d.sales_order:
-			sales_orders.append([frappe.db.get_value("Sales Order",d.sales_order,'customer'),d.sales_order])
+	for location in pick_list.locations:
+		if location.sales_order:
+			sales_orders.append([frappe.db.get_value("Sales Order",location.sales_order,'customer'),location.sales_order])
 	# Group sales orders by customer
 	for key,keydata in groupby(sales_orders,key=itemgetter(0)):
 		sales_dict[key] = set([d[1] for d in keydata])
@@ -387,8 +391,8 @@
 		delivery_note = create_dn_with_so(sales_dict,pick_list)
 
 	is_item_wo_so = 0
-	for n in pick_list.locations :
-		if not n.sales_order:
+	for location in pick_list.locations :
+		if not location.sales_order:
 			is_item_wo_so = 1
 			break
 	if is_item_wo_so == 1:
