diff --git a/buying/doctype/purchase_common/purchase_common.py b/buying/doctype/purchase_common/purchase_common.py
index 6d8be0e..b480caf 100644
--- a/buying/doctype/purchase_common/purchase_common.py
+++ b/buying/doctype/purchase_common/purchase_common.py
@@ -36,13 +36,13 @@
 				if flt(d.conversion_factor):
 					last_purchase_rate = flt(d.purchase_rate) / flt(d.conversion_factor)
 				else:
-					msgprint(_("Row ") + cstr(d.idx) + ": " + 
-						_("UOM Conversion Factor is mandatory"), raise_exception=1)
+					webnotes.throw(_("Row ") + cstr(d.idx) + ": " + 
+						_("UOM Conversion Factor is mandatory"))
 
 			# update last purchsae rate
 			if last_purchase_rate:
-				webnotes.conn.sql("update `tabItem` set last_purchase_rate = %s where name = %s",
-						(flt(last_purchase_rate),d.item_code))
+				webnotes.conn.sql("""update `tabItem` set last_purchase_rate = %s where name = %s""",
+					(flt(last_purchase_rate), d.item_code))
 	
 	def get_last_purchase_rate(self, obj):
 		"""get last purchase rates for all items"""
@@ -74,11 +74,11 @@
 		for d in getlist( obj.doclist, obj.fname):
 			# validation for valid qty	
 			if flt(d.qty) < 0 or (d.parenttype != 'Purchase Receipt' and not flt(d.qty)):
-				msgprint("Please enter valid qty for item %s" % cstr(d.item_code))
-				raise Exception
+				webnotes.throw("Please enter valid qty for item %s" % cstr(d.item_code))
 			
 			# udpate with latest quantities
-			bin = webnotes.conn.sql("select projected_qty from `tabBin` where item_code = %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1)
+			bin = webnotes.conn.sql("""select projected_qty from `tabBin` where 
+				item_code = %s and warehouse = %s""", (d.item_code, d.warehouse), as_dict=1)
 			
 			f_lst ={'projected_qty': bin and flt(bin[0]['projected_qty']) or 0, 'ordered_qty': 0, 'received_qty' : 0}
 			if d.doctype == 'Purchase Receipt Item':
@@ -87,22 +87,21 @@
 				if d.fields.has_key(x):
 					d.fields[x] = f_lst[x]
 			
-			item = webnotes.conn.sql("select is_stock_item, is_purchase_item, is_sub_contracted_item, end_of_life from tabItem where name=%s", 
-				d.item_code)
+			item = webnotes.conn.sql("""select is_stock_item, is_purchase_item, 
+				is_sub_contracted_item, end_of_life from `tabItem` where name=%s""", d.item_code)
 			if not item:
-				msgprint("Item %s does not exist in Item Master." % cstr(d.item_code), raise_exception=True)
+				webnotes.throw("Item %s does not exist in Item Master." % cstr(d.item_code))
 			
 			from stock.utils import validate_end_of_life
 			validate_end_of_life(d.item_code, item[0][3])
 			
 			# validate stock item
 			if item[0][0]=='Yes' and d.qty and not d.warehouse:
-				msgprint("Warehouse is mandatory for %s, since it is a stock item" %
-				 	d.item_code, raise_exception=1)
+				webnotes.throw("Warehouse is mandatory for %s, since it is a stock item" % d.item_code)
 			
 			# validate purchase item
 			if item[0][1] != 'Yes' and item[0][2] != 'Yes':
-				msgprint("Item %s is not a purchase item or sub-contracted item. Please check" % (d.item_code), raise_exception=True)
+				webnotes.throw("Item %s is not a purchase item or sub-contracted item. Please check" % (d.item_code))
 			
 			# list criteria that should not repeat if item is stock item
 			e = [d.schedule_date, d.item_code, d.description, d.warehouse, d.uom, 
@@ -113,25 +112,25 @@
 			# if is not stock item
 			f = [d.schedule_date, d.item_code, d.description]
 			
-			ch = webnotes.conn.sql("select is_stock_item from `tabItem` where name = '%s'"%d.item_code)
+			ch = webnotes.conn.sql("""select is_stock_item from `tabItem` where name = %s""", d.item_code)
 			
 			if ch and ch[0][0] == 'Yes':	
 				# check for same items
 				if e in check_list:
-					msgprint("""Item %s has been entered more than once with same description, schedule date, warehouse and uom.\n 
-						Please change any of the field value to enter the item twice""" % d.item_code, raise_exception = 1)
+					webnotes.throw("""Item %s has been entered more than once with same description, schedule date, warehouse and uom.\n 
+						Please change any of the field value to enter the item twice""" % d.item_code)
 				else:
 					check_list.append(e)
 					
 			elif ch and ch[0][0] == 'No':
 				# check for same items
 				if f in chk_dupl_itm:
-					msgprint("""Item %s has been entered more than once with same description, schedule date.\n 
-						Please change any of the field value to enter the item twice.""" % d.item_code, raise_exception = 1)
+					webnotes.throw("""Item %s has been entered more than once with same description, schedule date.\n 
+						Please change any of the field value to enter the item twice.""" % d.item_code)
 				else:
 					chk_dupl_itm.append(f)
 					
-	def get_qty(self,curr_doctype,ref_tab_fname,ref_tab_dn,ref_doc_tname, transaction, curr_parent_name):
+	def get_qty(self, curr_doctype, ref_tab_fname, ref_tab_dn, ref_doc_tname, transaction, curr_parent_name):
 		# Get total Quantities of current doctype (eg. PR) except for qty of this transaction
 		#------------------------------
 		# please check as UOM changes from Material Request - Purchase Order ,so doing following else uom should be same .
@@ -139,35 +138,36 @@
 		# but if in Material Request uom KG it can change in PO
 		
 		get_qty = (transaction == 'Material Request - Purchase Order') and 'qty * conversion_factor' or 'qty'
-		qty = webnotes.conn.sql("select sum(%s) from `tab%s` where %s = '%s' and docstatus = 1 and parent != '%s'"% ( get_qty, curr_doctype, ref_tab_fname, ref_tab_dn, curr_parent_name))
+		qty = webnotes.conn.sql("""select sum(%s) from `tab%s` where %s = %s and 
+			docstatus = 1 and parent != %s""", (get_qty, curr_doctype, ref_tab_fname, ref_tab_dn, curr_parent_name))
 		qty = qty and flt(qty[0][0]) or 0 
 		
 		# get total qty of ref doctype
 		#--------------------
-		max_qty = webnotes.conn.sql("select qty from `tab%s` where name = '%s' and docstatus = 1"% (ref_doc_tname, ref_tab_dn))
+		max_qty = webnotes.conn.sql("""select qty from `tab%s` where name = %s 
+			and docstatus = 1""", (ref_doc_tname, ref_tab_dn))
 		max_qty = max_qty and flt(max_qty[0][0]) or 0
 		
 		return cstr(qty)+'~~~'+cstr(max_qty)
 
 	def check_for_stopped_status(self, doctype, docname):
-		stopped = webnotes.conn.sql("select name from `tab%s` where name = '%s' and status = 'Stopped'" % 
-			( doctype, docname))
+		stopped = webnotes.conn.sql("""select name from `tab%s` where name = '%s' and 
+			status = 'Stopped'""", (doctype, docname))
 		if stopped:
-			msgprint("One cannot do any transaction against %s : %s, it's status is 'Stopped'" % 
-				( doctype, docname), raise_exception=1)
+			webnotes.throw("One cannot do any transaction against %s : %s, it's status is 'Stopped'" % 
+				(doctype, docname))
 	
-	def check_docstatus(self, check, doctype, docname , detail_doctype = ''):
+	def check_docstatus(self, check, doctype, docname, detail_doctype = ''):
 		if check == 'Next':
 			submitted = webnotes.conn.sql("""select t1.name from `tab%s` t1,`tab%s` t2 
 				where t1.name = t2.parent and t2.prevdoc_docname = %s and t1.docstatus = 1""" 
 				% (doctype, detail_doctype, '%s'), docname)
 			if submitted:
-				msgprint(cstr(doctype) + ": " + cstr(submitted[0][0]) 
-					+ _(" has already been submitted."), raise_exception=1)
+				webnotes.throw(cstr(doctype) + ": " + cstr(submitted[0][0]) 
+					+ _("has already been submitted."))
 
 		if check == 'Previous':
 			submitted = webnotes.conn.sql("""select name from `tab%s` 
-				where docstatus = 1 and name = %s"""% (doctype, '%s'), docname)
+				where docstatus = 1 and name = %s""" % (doctype, '%s'), docname)
 			if not submitted:
-				msgprint(cstr(doctype) + ": " + cstr(submitted[0][0]) 
-					+ _(" not submitted"), raise_exception=1)
+				webnotes.throw(cstr(doctype) + ": " + cstr(submitted[0][0]) + _("not submitted"))
diff --git a/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/manufacturing/doctype/production_planning_tool/production_planning_tool.py
index 17db5f4..c1185a1 100644
--- a/manufacturing/doctype/production_planning_tool/production_planning_tool.py
+++ b/manufacturing/doctype/production_planning_tool/production_planning_tool.py
@@ -154,20 +154,20 @@
 		for d in getlist(self.doclist, 'pp_details'):
 			self.validate_bom_no(d)
 			if not flt(d.planned_qty):
-				webnotes.throw(_("Please Enter Planned Qty for item: %s at row no: %s") % 
+				webnotes.throw("Please Enter Planned Qty for item: %s at row no: %s" % 
 					(d.item_code, d.idx))
 				
 	def validate_bom_no(self, d):
 		if not d.bom_no:
-			webnotes.throw(_("Please enter bom no for item: %s at row no: %s") % 
+			webnotes.throw("Please enter bom no for item: %s at row no: %s" % 
 				(d.item_code, d.idx))
 		else:
 			bom = webnotes.conn.sql("""select name from `tabBOM` where name = %s and item = %s 
 				and docstatus = 1 and is_active = 1""", 
 				(d.bom_no, d.item_code), as_dict = 1)
 			if not bom:
-				webnotes.throw(_("""Incorrect BOM No: %s entered for item: %s at row no: %s
-					May be BOM is inactive or for other item or does not exists in the system""") % 
+				webnotes.throw("""Incorrect BOM No: %s entered for item: %s at row no: %s
+					May be BOM is inactive or for other item or does not exists in the system""" % 
 					(d.bom_no, d.item_doce, d.idx))
 
 	def raise_production_order(self):
@@ -290,11 +290,12 @@
 			for item_details in self.item_dict[item]:
 				item_list.append([item, item_details[1], item_details[2], item_details[0]])
 				item_qty = webnotes.conn.sql("""select warehouse, indented_qty, ordered_qty, actual_qty 
-					from `tabBin` where item_code = %s""", item)
+					from `tabBin` where item_code = %s""", item, as_dict=1)
 				i_qty, o_qty, a_qty = 0, 0, 0
 				for w in item_qty:
-					i_qty, o_qty, a_qty = i_qty + flt(w[1]), o_qty + flt(w[2]), a_qty + flt(w[3])
-					item_list.append(['', '', '', '', w[0], flt(w[1]), flt(w[2]), flt(w[3])])
+					i_qty, o_qty, a_qty = i_qty + flt(w.indented_qty), o_qty + flt(w.ordered_qty), a_qty + flt(w.actual_qty)
+					item_list.append(['', '', '', '', w.warehouse, flt(w.indented_qty), 
+						flt(w.ordered_qty), flt(w.actual_qty)])
 				if item_qty:
 					item_list.append(['', '', '', '', 'Total', i_qty, o_qty, a_qty])
 
@@ -405,7 +406,7 @@
 			if purchase_request_list:
 				pur_req = ["""<a href="#Form/Material Request/%s" target="_blank">%s</a>""" % \
 					(p, p) for p in purchase_request_list]
-				msgprint(_("Material Request(s) created: \n%s") % 
+				msgprint("Material Request(s) created: \n%s" % 
 					"\n".join(pur_req))
 		else:
 			msgprint(_("Nothing to request"))
\ No newline at end of file
diff --git a/stock/doctype/material_request/material_request.py b/stock/doctype/material_request/material_request.py
index 67d36ef..50661a3 100644
--- a/stock/doctype/material_request/material_request.py
+++ b/stock/doctype/material_request/material_request.py
@@ -38,18 +38,18 @@
 		for so_no in so_items.keys():
 			for item in so_items[so_no].keys():
 				already_indented = webnotes.conn.sql("""select sum(qty) from `tabMaterial Request Item` 
-					where item_code = '%s' and sales_order_no = '%s' and 
-					docstatus = 1 and parent != '%s'""" % (item, so_no, self.doc.name))
+					where item_code = %s and sales_order_no = %s and 
+					docstatus = 1 and parent != %s""", (item, so_no, self.doc.name))
 				already_indented = already_indented and flt(already_indented[0][0]) or 0
 				
 				actual_so_qty = webnotes.conn.sql("""select sum(qty) from `tabSales Order Item` 
-					where parent = '%s' and item_code = '%s' and docstatus = 1 
-					group by parent""" % (so_no, item))
+					where parent = %s and item_code = %s and docstatus = 1 
+					group by parent""", (so_no, item))
 				actual_so_qty = actual_so_qty and flt(actual_so_qty[0][0]) or 0
 
 				if actual_so_qty and (flt(so_items[so_no][item]) + already_indented > actual_so_qty):
-					webnotes.throw(_("You can raise indent of maximum qty: %s for item: %s against sales order: %s\
-						\n Anyway, you can add more qty in new row for the same item.")
+					webnotes.throw("You can raise indent of maximum qty: %s for item: %s against sales order: %s\
+						\n Anyway, you can add more qty in new row for the same item."
 						% (actual_so_qty - already_indented, item, so_no))
 				
 	def validate_schedule_date(self):
@@ -105,8 +105,10 @@
 		self.update_bin(is_submit = 1, is_stopped = 0)
 	
 	def check_modified_date(self):
-		mod_db = webnotes.conn.sql("select modified from `tabMaterial Request` where name = '%s'" % self.doc.name)
-		date_diff = webnotes.conn.sql("select TIMEDIFF('%s', '%s')" % (mod_db[0][0], cstr(self.doc.modified)))
+		mod_db = webnotes.conn.sql("""select modified from `tabMaterial Request` where name = %s""", 
+			self.doc.name)
+		date_diff = webnotes.conn.sql("""select TIMEDIFF('%s', '%s')"""
+			% (mod_db[0][0], cstr(self.doc.modified)))
 		
 		if date_diff and date_diff[0][0]:
 			webnotes.throw(cstr(self.doc.doctype) + " => " + cstr(self.doc.name) + " has been modified. Please Refresh.")
@@ -120,7 +122,7 @@
 		webnotes.conn.set(self.doc, 'status', cstr(status))
 		
 		# Step 3:=> Acknowledge User
-		msgprint(self.doc.doctype + ": " + self.doc.name + _(" has been %s.") % ((status == 'Submitted') and 'Unstopped' or cstr(status)) )
+		msgprint(self.doc.doctype + ": " + self.doc.name + " has been %s." % ((status == 'Submitted') and 'Unstopped' or cstr(status)))
  
 
 	def on_cancel(self):
