diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py
index 59637a5..502a484 100644
--- a/erpnext/accounts/doctype/account/account.py
+++ b/erpnext/accounts/doctype/account/account.py
@@ -3,7 +3,7 @@
 
 from __future__ import unicode_literals
 import frappe
-from frappe.utils import flt, fmt_money, cstr, cint
+from frappe.utils import flt, cstr, cint
 from frappe import msgprint, throw, _
 from frappe.model.document import Document
 
@@ -16,8 +16,8 @@
 
 	def get_address(self):
 		return {'address': frappe.db.get_value(self.master_type, self.master_name, "address")}
-		
-	def validate(self): 
+
+	def validate(self):
 		self.validate_master_name()
 		self.validate_parent()
 		self.validate_duplicate_account()
@@ -25,18 +25,18 @@
 		self.validate_mandatory()
 		self.validate_warehouse_account()
 		self.validate_frozen_accounts_modifier()
-		
+
 	def validate_master_name(self):
 		if self.master_type in ('Customer', 'Supplier') or self.account_type == "Warehouse":
 			if not self.master_name:
 				msgprint(_("Please enter Master Name once the account is created."))
 			elif not frappe.db.exists(self.master_type or self.account_type, self.master_name):
 				throw(_("Invalid Master Name"))
-			
+
 	def validate_parent(self):
 		"""Fetch Parent Details and validation for account not to be created under ledger"""
 		if self.parent_account:
-			par = frappe.db.get_value("Account", self.parent_account, 
+			par = frappe.db.get_value("Account", self.parent_account,
 				["name", "group_or_ledger", "report_type"], as_dict=1)
 			if not par:
 				throw(_("Parent account does not exists"))
@@ -44,46 +44,36 @@
 				throw(_("You can not assign itself as parent account"))
 			elif par["group_or_ledger"] != 'Group':
 				throw(_("Parent account can not be a ledger"))
-				
+
 			if par["report_type"]:
 				self.report_type = par["report_type"]
-	
+
 	def validate_duplicate_account(self):
 		if self.get('__islocal') or not self.name:
 			company_abbr = frappe.db.get_value("Company", self.company, "abbr")
 			if frappe.db.exists("Account", (self.account_name + " - " + company_abbr)):
-				throw("{name}: {acc_name} {exist}, {rename}".format(**{
-					"name": _("Account Name"),
-					"acc_name": self.account_name,
-					"exist": _("already exists"),
-					"rename": _("please rename")
-				}))
-				
+				throw(_("Account {0} already exists").format(self.account_name))
+
 	def validate_root_details(self):
 		#does not exists parent
 		if frappe.db.exists("Account", self.name):
 			if not frappe.db.get_value("Account", self.name, "parent_account"):
 				throw(_("Root cannot be edited."))
-				
+
 	def validate_frozen_accounts_modifier(self):
 		old_value = frappe.db.get_value("Account", self.name, "freeze_account")
 		if old_value and old_value != self.freeze_account:
-			frozen_accounts_modifier = frappe.db.get_value( 'Accounts Settings', None, 
+			frozen_accounts_modifier = frappe.db.get_value( 'Accounts Settings', None,
 				'frozen_accounts_modifier')
 			if not frozen_accounts_modifier or \
 				frozen_accounts_modifier not in frappe.user.get_roles():
 					throw(_("You are not authorized to set Frozen value"))
-			
+
 	def convert_group_to_ledger(self):
 		if self.check_if_child_exists():
-			throw("{acc}: {account_name} {child}. {msg}".format(**{
-				"acc": _("Account"),
-				"account_name": self.name,
-				"child": _("has existing child"),
-				"msg": _("You can not convert this account to ledger")
-			}))
+			throw(_("Account with child nodes cannot be converted to ledger"))
 		elif self.check_gle_exists():
-			throw(_("Account with existing transaction can not be converted to ledger."))
+			throw(_("Account with existing transaction cannot be converted to ledger"))
 		else:
 			self.group_or_ledger = 'Ledger'
 			self.save()
@@ -104,17 +94,17 @@
 		return frappe.db.get_value("GL Entry", {"account": self.name})
 
 	def check_if_child_exists(self):
-		return frappe.db.sql("""select name from `tabAccount` where parent_account = %s 
+		return frappe.db.sql("""select name from `tabAccount` where parent_account = %s
 			and docstatus != 2""", self.name)
-	
+
 	def validate_mandatory(self):
 		if not self.report_type:
 			throw(_("Report Type is mandatory"))
-			
+
 	def validate_warehouse_account(self):
 		if not cint(frappe.defaults.get_global_default("auto_accounting_for_stock")):
 			return
-			
+
 		if self.account_type == "Warehouse":
 			old_warehouse = cstr(frappe.db.get_value("Account", self.name, "master_name"))
 			if old_warehouse != cstr(self.master_name):
@@ -124,10 +114,10 @@
 					self.validate_warehouse(self.master_name)
 				else:
 					throw(_("Master Name is mandatory if account type is Warehouse"))
-		
+
 	def validate_warehouse(self, warehouse):
 		if frappe.db.get_value("Stock Ledger Entry", {"warehouse": warehouse}):
-			throw(_("Stock transactions exist against warehouse ") + warehouse + 
+			throw(_("Stock transactions exist against warehouse ") + warehouse +
 				_(" .You can not assign / modify / remove Master Name"))
 
 	def update_nsm_model(self):
@@ -135,73 +125,67 @@
 		import frappe
 		import frappe.utils.nestedset
 		frappe.utils.nestedset.update_nsm(self)
-			
+
 	def on_update(self):
-		self.update_nsm_model()		
+		self.update_nsm_model()
 
 	def get_authorized_user(self):
 		# Check logged-in user is authorized
 		if frappe.db.get_value('Accounts Settings', None, 'credit_controller') \
 				in frappe.user.get_roles():
 			return 1
-			
+
 	def check_credit_limit(self, total_outstanding):
 		# Get credit limit
 		credit_limit_from = 'Customer'
 
-		cr_limit = frappe.db.sql("""select t1.credit_limit from tabCustomer t1, `tabAccount` t2 
+		cr_limit = frappe.db.sql("""select t1.credit_limit from tabCustomer t1, `tabAccount` t2
 			where t2.name=%s and t1.name = t2.master_name""", self.name)
 		credit_limit = cr_limit and flt(cr_limit[0][0]) or 0
 		if not credit_limit:
 			credit_limit = frappe.db.get_value('Company', self.company, 'credit_limit')
 			credit_limit_from = 'Company'
-		
+
 		# If outstanding greater than credit limit and not authorized person raise exception
 		if credit_limit > 0 and flt(total_outstanding) > credit_limit \
 				and not self.get_authorized_user():
-			throw("""Total Outstanding amount (%s) for <b>%s</b> can not be \
-				greater than credit limit (%s). To change your credit limit settings, \
-				please update in the <b>%s</b> master""" % (fmt_money(total_outstanding), 
-				self.name, fmt_money(credit_limit), credit_limit_from))
-			
+			throw(_("{0} Credit limit {0} crossed").format(_(credit_limit_from), credit_limit))
+
 	def validate_trash(self):
 		"""checks gl entries and if child exists"""
 		if not self.parent_account:
 			throw(_("Root account can not be deleted"))
-			
+
 		if self.check_gle_exists():
-			throw("""Account with existing transaction (Sales Invoice / Purchase Invoice / \
-				Journal Voucher) can not be deleted""")
+			throw(_("Account with existing transaction can not be deleted"))
 		if self.check_if_child_exists():
 			throw(_("Child account exists for this account. You can not delete this account."))
 
-	def on_trash(self): 
+	def on_trash(self):
 		self.validate_trash()
 		self.update_nsm_model()
-		
+
 	def before_rename(self, old, new, merge=False):
 		# Add company abbr if not provided
 		from erpnext.setup.doctype.company.company import get_name_with_abbr
 		new_account = get_name_with_abbr(new, self.company)
-		
+
 		# Validate properties before merging
 		if merge:
 			if not frappe.db.exists("Account", new):
 				throw(_("Account ") + new +_(" does not exists"))
-				
-			val = list(frappe.db.get_value("Account", new_account, 
+
+			val = list(frappe.db.get_value("Account", new_account,
 				["group_or_ledger", "report_type", "company"]))
-			
+
 			if val != [self.group_or_ledger, self.report_type, self.company]:
-				throw(_("""Merging is only possible if following \
-					properties are same in both records.
-					Group or Ledger, Report Type, Company"""))
-					
+				throw(_("""Merging is only possible if following properties are same in both records. Group or Ledger, Report Type, Company"""))
+
 		return new_account
 
 	def after_rename(self, old, new, merge=False):
 		if not merge:
-			frappe.db.set_value("Account", new, "account_name", 
+			frappe.db.set_value("Account", new, "account_name",
 				" - ".join(new.split(" - ")[:-1]))
 		else:
 			from frappe.utils.nestedset import rebuild_tree
@@ -209,15 +193,15 @@
 
 def get_master_name(doctype, txt, searchfield, start, page_len, filters):
 	conditions = (" and company='%s'"% filters["company"].replace("'", "\'")) if doctype == "Warehouse" else ""
-		
+
 	return frappe.db.sql("""select name from `tab%s` where %s like %s %s
 		order by name limit %s, %s""" %
-		(filters["master_type"], searchfield, "%s", conditions, "%s", "%s"), 
+		(filters["master_type"], searchfield, "%s", conditions, "%s", "%s"),
 		("%%%s%%" % txt, start, page_len), as_list=1)
-		
+
 def get_parent_account(doctype, txt, searchfield, start, page_len, filters):
-	return frappe.db.sql("""select name from tabAccount 
+	return frappe.db.sql("""select name from tabAccount
 		where group_or_ledger = 'Group' and docstatus != 2 and company = %s
-		and %s like %s order by name limit %s, %s""" % 
-		("%s", searchfield, "%s", "%s", "%s"), 
-		(filters["company"], "%%%s%%" % txt, start, page_len), as_list=1)
\ No newline at end of file
+		and %s like %s order by name limit %s, %s""" %
+		("%s", searchfield, "%s", "%s", "%s"),
+		(filters["company"], "%%%s%%" % txt, start, page_len), as_list=1)
diff --git a/erpnext/accounts/doctype/c_form/c_form.py b/erpnext/accounts/doctype/c_form/c_form.py
index 95e2e40..11d0547 100644
--- a/erpnext/accounts/doctype/c_form/c_form.py
+++ b/erpnext/accounts/doctype/c_form/c_form.py
@@ -9,46 +9,42 @@
 
 class CForm(Document):
 	def validate(self):
-		"""Validate invoice that c-form is applicable 
+		"""Validate invoice that c-form is applicable
 			and no other c-form is received for that"""
 
 		for d in self.get('invoice_details'):
 			if d.invoice_no:
 				inv = frappe.db.sql("""select c_form_applicable, c_form_no from
 					`tabSales Invoice` where name = %s and docstatus = 1""", d.invoice_no)
-				
-				if not inv:
-					frappe.throw("""Invoice: %s is not exists in the system or 
-						is not submitted, please check.""" % d.invoice_no)
-					
-				elif inv[0][0] != 'Yes':
+
+				if inv[0][0] != 'Yes':
 					frappe.throw("C-form is not applicable for Invoice: %s" % d.invoice_no)
-					
+
 				elif inv[0][1] and inv[0][1] != self.name:
 					frappe.throw("""Invoice %s is tagged in another C-form: %s.
 						If you want to change C-form no for this invoice,
-						please remove invoice no from the previous c-form and then try again""" % 
+						please remove invoice no from the previous c-form and then try again""" %
 						(d.invoice_no, inv[0][1]))
 
 	def on_update(self):
 		"""	Update C-Form No on invoices"""
 		self.set_total_invoiced_amount()
-	
+
 	def on_submit(self):
 		self.set_cform_in_sales_invoices()
-		
+
 	def before_cancel(self):
 		# remove cform reference
 		frappe.db.sql("""update `tabSales Invoice` set c_form_no=null where c_form_no=%s""", self.name)
-		
+
 	def set_cform_in_sales_invoices(self):
 		inv = [d.invoice_no for d in self.get('invoice_details')]
 		if inv:
-			frappe.db.sql("""update `tabSales Invoice` set c_form_no=%s, modified=%s where name in (%s)""" % 
+			frappe.db.sql("""update `tabSales Invoice` set c_form_no=%s, modified=%s where name in (%s)""" %
 				('%s', '%s', ', '.join(['%s'] * len(inv))), tuple([self.name, self.modified] + inv))
-				
-			frappe.db.sql("""update `tabSales Invoice` set c_form_no = null, modified = %s 
-				where name not in (%s) and ifnull(c_form_no, '') = %s""" % 
+
+			frappe.db.sql("""update `tabSales Invoice` set c_form_no = null, modified = %s
+				where name not in (%s) and ifnull(c_form_no, '') = %s""" %
 				('%s', ', '.join(['%s']*len(inv)), '%s'), tuple([self.modified] + inv + [self.name]))
 		else:
 			frappe.throw(_("Please enter atleast 1 invoice in the table"))
@@ -60,7 +56,7 @@
 	def get_invoice_details(self, invoice_no):
 		"""	Pull details from invoices for referrence """
 
-		inv = frappe.db.get_value("Sales Invoice", invoice_no, 
+		inv = frappe.db.get_value("Sales Invoice", invoice_no,
 			["posting_date", "territory", "net_total", "grand_total"], as_dict=True)
 		return {
 			'invoice_date' : inv.posting_date,
@@ -72,9 +68,9 @@
 def get_invoice_nos(doctype, txt, searchfield, start, page_len, filters):
 	from erpnext.utilities import build_filter_conditions
 	conditions, filter_values = build_filter_conditions(filters)
-	
-	return frappe.db.sql("""select name from `tabSales Invoice` where docstatus = 1 
-		and c_form_applicable = 'Yes' and ifnull(c_form_no, '') = '' %s 
-		and %s like %s order by name limit %s, %s""" % 
-		(conditions, searchfield, "%s", "%s", "%s"), 
-		tuple(filter_values + ["%%%s%%" % txt, start, page_len]))
\ No newline at end of file
+
+	return frappe.db.sql("""select name from `tabSales Invoice` where docstatus = 1
+		and c_form_applicable = 'Yes' and ifnull(c_form_no, '') = '' %s
+		and %s like %s order by name limit %s, %s""" %
+		(conditions, searchfield, "%s", "%s", "%s"),
+		tuple(filter_values + ["%%%s%%" % txt, start, page_len]))
diff --git a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py
index 33e0495..b70c1dd 100644
--- a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py
+++ b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py
@@ -8,13 +8,13 @@
 
 def execute(filters=None):
 	if not filters: filters = {}
-	
+
 	columns = get_columns()
 	entries = get_entries(filters)
 	invoice_posting_date_map = get_invoice_posting_date_map(filters)
 	against_date = ""
 	outstanding_amount = 0.0
-	
+
 	data = []
 	for d in entries:
 		if d.against_voucher:
@@ -23,67 +23,66 @@
 		else:
 			against_date = d.against_invoice and invoice_posting_date_map[d.against_invoice] or ""
 			outstanding_amount = d.credit or -1*d.debit
-		
-		row = [d.name, d.account, d.posting_date, d.against_voucher or d.against_invoice, 
+
+		row = [d.name, d.account, d.posting_date, d.against_voucher or d.against_invoice,
 			against_date, d.debit, d.credit, d.cheque_no, d.cheque_date, d.remark]
-			
+
 		if d.against_voucher or d.against_invoice:
 			row += get_ageing_data(d.posting_date, against_date, outstanding_amount)
 		else:
 			row += ["", "", "", "", ""]
-			
+
 		data.append(row)
-	
+
 	return columns, data
-	
+
 def get_columns():
-	return ["Journal Voucher:Link/Journal Voucher:140", "Account:Link/Account:140", 
-		"Posting Date:Date:100", "Against Invoice:Link/Purchase Invoice:130", 
-		"Against Invoice Posting Date:Date:130", "Debit:Currency:120", "Credit:Currency:120", 
-		"Reference No::100", "Reference Date:Date:100", "Remarks::150", "Age:Int:40", 
+	return ["Journal Voucher:Link/Journal Voucher:140", "Account:Link/Account:140",
+		"Posting Date:Date:100", "Against Invoice:Link/Purchase Invoice:130",
+		"Against Invoice Posting Date:Date:130", "Debit:Currency:120", "Credit:Currency:120",
+		"Reference No::100", "Reference Date:Date:100", "Remarks::150", "Age:Int:40",
 		"0-30:Currency:100", "30-60:Currency:100", "60-90:Currency:100", "90-Above:Currency:100"
 	]
 
 def get_conditions(filters):
 	conditions = ""
 	party_accounts = []
-	
+
 	if filters.get("account"):
 		party_accounts = [filters["account"]]
 	else:
-		cond = filters.get("company") and (" and company = '%s'" % 
+		cond = filters.get("company") and (" and company = '%s'" %
 			filters["company"].replace("'", "\'")) or ""
-		
+
 		if filters.get("payment_type") == "Incoming":
 			cond += " and master_type = 'Customer'"
 		else:
 			cond += " and master_type = 'Supplier'"
 
-		party_accounts = frappe.db.sql_list("""select name from `tabAccount` 
+		party_accounts = frappe.db.sql_list("""select name from `tabAccount`
 			where ifnull(master_name, '')!='' and docstatus < 2 %s""" % cond)
-	
+
 	if party_accounts:
 		conditions += " and jvd.account in (%s)" % (", ".join(['%s']*len(party_accounts)))
 	else:
-		msgprint(_("No Customer or Supplier Accounts found. Accounts are identified based on \
-			'Master Type' value in account record."), raise_exception=1)
-		
+		msgprint(_("No Customer or Supplier Accounts found"), raise_exception=1)
+
 	if filters.get("from_date"): conditions += " and jv.posting_date >= '%s'" % filters["from_date"]
 	if filters.get("to_date"): conditions += " and jv.posting_date <= '%s'" % filters["to_date"]
 
 	return conditions, party_accounts
-	
+
 def get_entries(filters):
 	conditions, party_accounts = get_conditions(filters)
-	entries =  frappe.db.sql("""select jv.name, jvd.account, jv.posting_date, 
-		jvd.against_voucher, jvd.against_invoice, jvd.debit, jvd.credit, 
-		jv.cheque_no, jv.cheque_date, jv.remark 
-		from `tabJournal Voucher Detail` jvd, `tabJournal Voucher` jv 
-		where jvd.parent = jv.name and jv.docstatus=1 %s order by jv.name DESC""" % 
+	entries =  frappe.db.sql("""select jv.name, jvd.account, jv.posting_date,
+		jvd.against_voucher, jvd.against_invoice, jvd.debit, jvd.credit,
+		jv.cheque_no, jv.cheque_date, jv.remark
+		from `tabJournal Voucher Detail` jvd, `tabJournal Voucher` jv
+		where jvd.parent = jv.name and jv.docstatus=1 %s order by jv.name DESC""" %
 		(conditions), tuple(party_accounts), as_dict=1)
-		
+
 	return entries
-	
+
 def get_invoice_posting_date_map(filters):
 	invoice_posting_date_map = {}
 	if filters.get("payment_type") == "Incoming":
@@ -93,4 +92,4 @@
 		for t in frappe.db.sql("""select name, posting_date from `tabPurchase Invoice`"""):
 			invoice_posting_date_map[t[0]] = t[1]
 
-	return invoice_posting_date_map
\ No newline at end of file
+	return invoice_posting_date_map
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.py b/erpnext/buying/doctype/purchase_common/purchase_common.py
index 1addb42..94e8ea3 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.py
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.py
@@ -147,7 +147,7 @@
 		stopped = frappe.db.sql("""select name from `tab%s` where name = %s and
 			status = 'Stopped'""" % (doctype, '%s'), docname)
 		if stopped:
-			frappe.throw("{0} {1} status is 'Stopped'".format(doctype, docname), frappe.InvalidStatusError)
+			frappe.throw(_("{0} {1} status is 'Stopped'").format(doctype, docname), frappe.InvalidStatusError)
 
 	def check_docstatus(self, check, doctype, docname, detail_doctype = ''):
 		if check == 'Next':
diff --git a/erpnext/hr/doctype/employee/employee.js b/erpnext/hr/doctype/employee/employee.js
index e91435e..49914d2 100644
--- a/erpnext/hr/doctype/employee/employee.js
+++ b/erpnext/hr/doctype/employee/employee.js
@@ -9,23 +9,23 @@
 		this.frm.fields_dict.reports_to.get_query = function(doc, cdt, cdn) {
 			return { query: "erpnext.controllers.queries.employee_query"} }
 	},
-	
+
 	onload: function() {
 		this.setup_leave_approver_select();
 		this.frm.toggle_display(["esic_card_no", "gratuity_lic_id", "pan_number", "pf_number"],
 			frappe.boot.sysdefaults.country==="India");
 		if(this.frm.doc.__islocal) this.frm.set_value("employee_name", "");
 	},
-	
+
 	refresh: function() {
 		var me = this;
 		erpnext.hide_naming_series();
-		if(!this.frm.doc.__islocal) {			
+		if(!this.frm.doc.__islocal) {
 			cur_frm.add_custom_button(__('Make Salary Structure'), function() {
 				me.make_salary_structure(this); });
 		}
 	},
-	
+
 	setup_leave_approver_select: function() {
 		var me = this;
 		return this.frm.call({
@@ -33,21 +33,21 @@
 			callback: function(r) {
 				var df = frappe.meta.get_docfield("Employee Leave Approver", "leave_approver",
 					me.frm.doc.name);
-				df.options = $.map(r.message, function(user) { 
-					return {value: user, label: frappe.user_info(user).fullname}; 
+				df.options = $.map(r.message, function(user) {
+					return {value: user, label: frappe.user_info(user).fullname};
 				});
 				me.frm.fields_dict.employee_leave_approvers.refresh();
 			}
 		});
 	},
-	
+
 	date_of_birth: function() {
 		return cur_frm.call({
 			method: "get_retirement_date",
 			args: {date_of_birth: this.frm.doc.date_of_birth}
 		});
 	},
-	
+
 	salutation: function() {
 		if(this.frm.doc.salutation) {
 			this.frm.set_value("gender", {
@@ -56,16 +56,12 @@
 			}[this.frm.doc.salutation]);
 		}
 	},
-	
+
 	make_salary_structure: function(btn) {
 		var me = this;
 		this.validate_salary_structure(btn, function(r) {
 			if(r.message) {
-				msgprint(__("Employee {0}:\
-					An active Salary Structure already exists. \
-						If you want to create new one, please ensure that no active \
-						Salary Structure exists for this Employee. \
-						Go to the active Salary Structure and set \"Is Active\" = \"No\"", [me.frm.doc.name]));
+				msgprint(__("Active Salary Sructure already exists for Employee {0}", [me.frm.doc.name]));
 			} else if(!r.exc) {
 				frappe.model.map({
 					source: me.frm.doc,
@@ -74,7 +70,7 @@
 			}
 		});
 	},
-	
+
 	validate_salary_structure: function(btn, callback) {
 		var me = this;
 		return this.frm.call({
diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.py b/erpnext/hr/doctype/leave_allocation/leave_allocation.py
index 912f8f0..32cfd86 100755
--- a/erpnext/hr/doctype/leave_allocation/leave_allocation.py
+++ b/erpnext/hr/doctype/leave_allocation/leave_allocation.py
@@ -63,7 +63,7 @@
 		cf = cf and cint(cf[0][0]) or 0
 		if not cf:
 			frappe.db.set(self,'carry_forward',0)
-			frappe.throw("Cannot carry forward {0}".format(self.leave_type))
+			frappe.throw(_("Cannot carry forward {0}").format(self.leave_type))
 
 	def get_carry_forwarded_leaves(self):
 		if self.carry_forward:
diff --git a/erpnext/hr/doctype/leave_application/leave_application.py b/erpnext/hr/doctype/leave_application/leave_application.py
index 1262911..f7084ef 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.py
+++ b/erpnext/hr/doctype/leave_application/leave_application.py
@@ -144,8 +144,7 @@
 	def validate_max_days(self):
 		max_days = frappe.db.get_value("Leave Type", self.leave_type, "max_days_allowed")
 		if max_days and self.total_leave_days > max_days:
-			frappe.throw("Sorry ! You cannot apply for %s for more than %s days" %
-				(self.leave_type, max_days))
+			frappe.throw(_("Leave of type {0} cannot be longer than {1}").format(self.leave_type, max_days))
 
 	def validate_leave_approver(self):
 		employee = frappe.get_doc("Employee", self.employee)
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py
index 12733e3..9912252 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.py
@@ -130,7 +130,7 @@
 			(self.month, self.fiscal_year, self.employee, self.name))
 		if ret_exist:
 			self.employee = ''
-			frappe.throw("Salary Slip of employee {0} already created for this month".format(self.employee))
+			frappe.throw(_("Salary Slip of employee {0} already created for this month").format(self.employee))
 
 	def validate(self):
 		from frappe.utils import money_in_words
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.py b/erpnext/manufacturing/doctype/production_order/production_order.py
index 78270e5..edcb25d 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.py
+++ b/erpnext/manufacturing/doctype/production_order/production_order.py
@@ -5,7 +5,7 @@
 import frappe
 
 from frappe.utils import cstr, flt, nowdate
-from frappe import msgprint, _
+from frappe import _
 
 class OverProductionError(frappe.ValidationError): pass
 
@@ -34,9 +34,7 @@
 				and is_active=1 and item=%s"""
 				, (self.bom_no, self.production_item), as_dict =1)
 			if not bom:
-				frappe.throw("""Incorrect BOM: %s entered.
-					May be BOM not exists or inactive or not submitted
-					or for some other item.""" % cstr(self.bom_no))
+				frappe.throw(_("BOM {0} is not active or not submitted").format(self.bom_no))
 
 	def validate_sales_order(self):
 		if self.sales_order:
@@ -44,7 +42,7 @@
 				where name=%s and docstatus = 1""", self.sales_order, as_dict=1)[0]
 
 			if not so.name:
-				frappe.throw("Sales Order: %s is not valid" % self.sales_order)
+				frappe.throw(_("Sales Order {0} is not valid") % self.sales_order)
 
 			if not self.expected_delivery_date:
 				self.expected_delivery_date = so.delivery_date
@@ -115,8 +113,7 @@
 		stock_entry = frappe.db.sql("""select name from `tabStock Entry`
 			where production_order = %s and docstatus = 1""", self.name)
 		if stock_entry:
-			frappe.throw("""Submitted Stock Entry %s exists against this production order.
-				Hence can not be cancelled.""" % stock_entry[0][0])
+			frappe.throw(_("Cannot cancel because submitted Stock Entry {0} exists").format(stock_entry[0][0]))
 
 		frappe.db.set(self,'status', 'Cancelled')
 		self.update_planned_qty(-self.qty)
diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py
index 5556fbe..1e75319 100644
--- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py
+++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.py
@@ -152,21 +152,17 @@
 		for d in self.get('pp_details'):
 			self.validate_bom_no(d)
 			if not flt(d.planned_qty):
-				frappe.throw("Please Enter Planned Qty for item: %s at row no: %s" %
-					(d.item_code, d.idx))
+				frappe.throw(_("Please enter Planned Qty for Item {0} at row {1}").format(d.item_code, d.idx))
 
 	def validate_bom_no(self, d):
 		if not d.bom_no:
-			frappe.throw("Please enter bom no for item: %s at row no: %s" %
-				(d.item_code, d.idx))
+			frappe.throw(_("Please enter BOM for Item {0} at row {1}").format(d.item_code, d.idx))
 		else:
 			bom = frappe.db.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:
-				frappe.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))
+				frappe.throw(_("Incorrect or Inactive BOM {0} for Item {1} at row {2}").format(d.bom_no, d.item_code, d.idx))
 
 	def raise_production_order(self):
 		"""It will raise production order (Draft) for all distinct FG items"""
diff --git a/erpnext/public/js/transaction.js b/erpnext/public/js/transaction.js
index f76bbe0..5d43ad4 100644
--- a/erpnext/public/js/transaction.js
+++ b/erpnext/public/js/transaction.js
@@ -10,7 +10,7 @@
 		if(this.frm.doc.__islocal) {
 			var today = get_today(),
 				currency = frappe.defaults.get_user_default("currency");
-			
+
 			$.each({
 				posting_date: today,
 				due_date: today,
@@ -24,18 +24,18 @@
 			}, function(fieldname, value) {
 				if(me.frm.fields_dict[fieldname] && !me.frm.doc[fieldname])
 					me.frm.set_value(fieldname, value);
-			});			
+			});
 		}
 
 		if(this.other_fname) {
 			this[this.other_fname + "_remove"] = this.calculate_taxes_and_totals;
 		}
-		
+
 		if(this.fname) {
 			this[this.fname + "_remove"] = this.calculate_taxes_and_totals;
 		}
 	},
-	
+
 	onload_post_render: function() {
 		var me = this;
 		if(this.frm.doc.__islocal && this.frm.doc.company && !this.frm.doc.is_pos) {
@@ -55,7 +55,7 @@
 			}
 		}
 	},
-	
+
 	refresh: function() {
 		this.frm.clear_custom_buttons();
 		erpnext.hide_naming_series();
@@ -77,7 +77,7 @@
 				icon = "icon-file-text";
 		}
 		var me = this;
-		
+
 		this.$pos_btn = this.frm.appframe.add_button(btn_label, function() {
 			me.toggle_pos();
 		}, icon);
@@ -87,7 +87,7 @@
 		// Check whether it is Selling or Buying cycle
 		var price_list = frappe.meta.has_field(cur_frm.doc.doctype, "selling_price_list") ?
 			this.frm.doc.selling_price_list : this.frm.doc.buying_price_list;
-		
+
 		if (!price_list)
 			msgprint(__("Please select Price List"))
 		else {
@@ -109,8 +109,8 @@
 			this.frm.refresh();
 		}
 	},
-	
-	
+
+
 	item_code: function(doc, cdt, cdn) {
 		var me = this;
 		var item = frappe.get_doc(cdt, cdn);
@@ -152,7 +152,7 @@
 				});
 			}
 		}
-	},	
+	},
 
 	serial_no: function(doc, cdt, cdn) {
 		var me = this;
@@ -169,7 +169,7 @@
 				var serial_nos = item.serial_no.trim().replace(/,/g, '\n');
 
 				serial_nos = serial_nos.trim().split('\n');
-				
+
 				// Trim each string and push unique string to new list
 				for (var x=0; x<=serial_nos.length - 1; x++) {
 					if (serial_nos[x].trim() != "" && sr_no.indexOf(serial_nos[x].trim()) == -1) {
@@ -187,18 +187,18 @@
 			}
 		}
 	},
-	
+
 	validate: function() {
 		this.calculate_taxes_and_totals();
 	},
-		
+
 	company: function() {
 		if(this.frm.doc.company && this.frm.fields_dict.currency) {
 			var company_currency = this.get_company_currency();
 			if (!this.frm.doc.currency) {
 				this.frm.set_value("currency", company_currency);
 			}
-			
+
 			if (this.frm.doc.currency == company_currency) {
 				this.frm.set_value("conversion_rate", 1.0);
 			}
@@ -209,27 +209,27 @@
 			this.frm.script_manager.trigger("currency");
 		}
 	},
-	
+
 	get_company_currency: function() {
 		return erpnext.get_currency(this.frm.doc.company);
 	},
-	
+
 	currency: function() {
 		var me = this;
 		this.set_dynamic_labels();
 
 		var company_currency = this.get_company_currency();
 		if(this.frm.doc.currency !== company_currency) {
-			this.get_exchange_rate(this.frm.doc.currency, company_currency, 
+			this.get_exchange_rate(this.frm.doc.currency, company_currency,
 				function(exchange_rate) {
 					me.frm.set_value("conversion_rate", exchange_rate);
 					me.conversion_rate();
 				});
 		} else {
-			this.conversion_rate();		
+			this.conversion_rate();
 		}
 	},
-	
+
 	conversion_rate: function() {
 		if(this.frm.doc.currency === this.get_company_currency()) {
 			this.frm.set_value("conversion_rate", 1.0);
@@ -240,14 +240,14 @@
 		}
 		if(flt(this.frm.doc.conversion_rate)>0.0) this.calculate_taxes_and_totals();
 	},
-	
+
 	get_price_list_currency: function(buying_or_selling) {
 		var me = this;
 		var fieldname = buying_or_selling.toLowerCase() + "_price_list";
 		if(this.frm.doc[fieldname]) {
 			return this.frm.call({
 				method: "erpnext.setup.utils.get_price_list_currency",
-				args: { 
+				args: {
 					price_list: this.frm.doc[fieldname],
 				},
 				callback: function(r) {
@@ -258,7 +258,7 @@
 			});
 		}
 	},
-	
+
 	get_exchange_rate: function(from_currency, to_currency, callback) {
 		var exchange_name = from_currency + "-" + to_currency;
 		frappe.model.with_doc("Currency Exchange", exchange_name, function(name) {
@@ -266,14 +266,14 @@
 			callback(exchange_doc ? flt(exchange_doc.exchange_rate) : 0);
 		});
 	},
-	
+
 	price_list_currency: function() {
 		var me=this;
 		this.set_dynamic_labels();
-		
+
 		var company_currency = this.get_company_currency();
 		if(this.frm.doc.price_list_currency !== company_currency) {
-			this.get_exchange_rate(this.frm.doc.price_list_currency, company_currency, 
+			this.get_exchange_rate(this.frm.doc.price_list_currency, company_currency,
 				function(exchange_rate) {
 					if(exchange_rate) {
 						me.frm.set_value("plc_conversion_rate", exchange_rate);
@@ -284,7 +284,7 @@
 			this.plc_conversion_rate();
 		}
 	},
-	
+
 	plc_conversion_rate: function() {
 		if(this.frm.doc.price_list_currency === this.get_company_currency()) {
 			this.frm.set_value("plc_conversion_rate", 1.0);
@@ -294,11 +294,11 @@
 			this.calculate_taxes_and_totals();
 		}
 	},
-	
+
 	qty: function(doc, cdt, cdn) {
 		this.calculate_taxes_and_totals();
 	},
-	
+
 	tax_rate: function(doc, cdt, cdn) {
 		this.calculate_taxes_and_totals();
 	},
@@ -314,30 +314,30 @@
 			throw e;
 		}
 	},
-	
+
 	set_dynamic_labels: function() {
 		// What TODO? should we make price list system non-mandatory?
 		this.frm.toggle_reqd("plc_conversion_rate",
 			!!(this.frm.doc.price_list_name && this.frm.doc.price_list_currency));
-			
+
 		var company_currency = this.get_company_currency();
 		this.change_form_labels(company_currency);
 		this.change_grid_labels(company_currency);
 		this.frm.refresh_fields();
 	},
-	
+
 	recalculate: function() {
 		this.calculate_taxes_and_totals();
 	},
-	
+
 	recalculate_values: function() {
 		this.calculate_taxes_and_totals();
 	},
-	
+
 	calculate_charges: function() {
 		this.calculate_taxes_and_totals();
 	},
-	
+
 	included_in_print_rate: function(doc, cdt, cdn) {
 		var tax = frappe.get_doc(cdt, cdn);
 		try {
@@ -350,52 +350,32 @@
 			throw e;
 		}
 	},
-	
+
 	validate_on_previous_row: function(tax) {
 		// validate if a valid row id is mentioned in case of
 		// On Previous Row Amount and On Previous Row Total
-		if(([__("On Previous Row Amount"), __("On Previous Row Total")].indexOf(tax.charge_type) != -1) &&
+		if((["On Previous Row Amount", "On Previous Row Total"].indexOf(tax.charge_type) != -1) &&
 			(!tax.row_id || cint(tax.row_id) >= tax.idx)) {
-				var msg = repl(__("Row") + " # %(idx)s [%(doctype)s]: " +
-					__("Please specify a valid") + " %(row_id_label)s", {
-						idx: tax.idx,
-						doctype: tax.doctype,
-						row_id_label: frappe.meta.get_label(tax.doctype, "row_id", tax.name)
-					});
+				var msg = __("Please specify a valid Row ID for row {0} in table {1}", [tax.idx, __(tax.doctype)])
 				frappe.throw(msg);
 			}
 	},
-	
+
 	validate_inclusive_tax: function(tax) {
 		if(!this.frm.tax_doclist) this.frm.tax_doclist = this.get_tax_doclist();
-		
+
 		var actual_type_error = function() {
-			var msg = repl(__("For row") + " # %(idx)s [%(doctype)s]: " + 
-				"%(charge_type_label)s = \"%(charge_type)s\" " +
-				__("cannot be included in Item's rate"), {
-					idx: tax.idx,
-					doctype: tax.doctype,
-					charge_type_label: frappe.meta.get_label(tax.doctype, "charge_type", tax.name),
-					charge_type: tax.charge_type
-				});
+			var msg = __("Actual type tax cannot be included in Item rate in row {0}", [tax.idx])
 			frappe.throw(msg);
 		};
-		
+
 		var on_previous_row_error = function(row_range) {
-			var msg = repl(__("For row") + " # %(idx)s [%(doctype)s]: " + 
-				__("to be included in Item's rate, it is required that: ") + 
-				" [" + __("Row") + " # %(row_range)s] " + __("also be included in Item's rate"), {
-					idx: tax.idx,
-					doctype: tax.doctype,
-					charge_type_label: frappe.meta.get_label(tax.doctype, "charge_type", tax.name),
-					charge_type: tax.charge_type,
-					inclusive_label: frappe.meta.get_label(tax.doctype, "included_in_print_rate", tax.name),
-					row_range: row_range,
-				});
-			
+			var msg = __("For row {0} in {1}. To include {2} in Item rate, rows {3} must also be included",
+				[tax.idx, __(tax.doctype), tax.charge_type, row_range])
+
 			frappe.throw(msg);
 		};
-		
+
 		if(cint(tax.included_in_print_rate)) {
 			if(tax.charge_type == "Actual") {
 				// inclusive tax cannot be of type Actual
@@ -405,7 +385,7 @@
 					// referred row should also be an inclusive tax
 					on_previous_row_error(tax.row_id);
 			} else if(tax.charge_type == "On Previous Row Total") {
-				var taxes_not_included = $.map(this.frm.tax_doclist.slice(0, tax.row_id), 
+				var taxes_not_included = $.map(this.frm.tax_doclist.slice(0, tax.row_id),
 					function(t) { return cint(t.included_in_print_rate) ? null : t; });
 				if(taxes_not_included.length > 0) {
 					// all rows above this tax should be inclusive
@@ -414,26 +394,26 @@
 			}
 		}
 	},
-	
+
 	_load_item_tax_rate: function(item_tax_rate) {
 		return item_tax_rate ? JSON.parse(item_tax_rate) : {};
 	},
-	
+
 	_get_tax_rate: function(tax, item_tax_map) {
 		return (keys(item_tax_map).indexOf(tax.account_head) != -1) ?
 			flt(item_tax_map[tax.account_head], precision("rate", tax)) :
 			tax.rate;
 	},
-	
+
 	get_item_wise_taxes_html: function() {
 		var item_tax = {};
 		var tax_accounts = [];
 		var company_currency = this.get_company_currency();
-		
+
 		$.each(this.get_tax_doclist(), function(i, tax) {
 			var tax_amount_precision = precision("tax_amount", tax);
 			var tax_rate_precision = precision("rate", tax);
-			$.each(JSON.parse(tax.item_wise_tax_detail || '{}'), 
+			$.each(JSON.parse(tax.item_wise_tax_detail || '{}'),
 				function(item_code, tax_data) {
 					if(!item_tax[item_code]) item_tax[item_code] = {};
 					if($.isArray(tax_data)) {
@@ -445,7 +425,7 @@
 						}
 						var tax_amount = format_currency(flt(tax_data[1], tax_amount_precision), company_currency,
 							tax_amount_precision);
-						
+
 						item_tax[item_code][tax.name] = [tax_rate, tax_amount];
 					} else {
 						item_tax[item_code][tax.name] = [flt(tax_data, tax_rate_precision) + "%", ""];
@@ -453,10 +433,10 @@
 				});
 			tax_accounts.push([tax.name, tax.account_head]);
 		});
-		
-		var headings = $.map([__("Item Name")].concat($.map(tax_accounts, function(head) { return head[1]; })), 
+
+		var headings = $.map([__("Item Name")].concat($.map(tax_accounts, function(head) { return head[1]; })),
 			function(head) { return '<th style="min-width: 100px;">' + (head || "") + "</th>" }).join("\n");
-			
+
 		var distinct_item_names = [];
 		var distinct_items = [];
 		$.each(this.get_item_doclist(), function(i, item) {
@@ -465,7 +445,7 @@
 				distinct_items.push(item);
 			}
 		});
-		
+
 		var rows = $.map(distinct_items, function(item) {
 			var item_tax_record = item_tax[item.item_code || item.item_name];
 			if(!item_tax_record) { return null; }
@@ -478,7 +458,7 @@
 				}).join("\n")
 			});
 		}).join("\n");
-		
+
 		if(!rows) return "";
 		return '<p><a href="#" onclick="$(\'.tax-break-up\').toggleClass(\'hide\'); return false;">Show / Hide tax break-up</a><br><br></p>\
 		<div class="tax-break-up hide" style="overflow-x: auto;"><table class="table table-bordered table-hover">\
@@ -486,16 +466,16 @@
 			<tbody>' + rows + '</tbody> \
 		</table></div>';
 	},
-	
+
 	validate_company_and_party: function() {
 		var me = this;
 		var valid = true;
-		
+
 		$.each(["company", "customer"], function(i, fieldname) {
 			if(frappe.meta.has_field(me.frm.doc.doctype, fieldname)) {
 				if (!me.frm.doc[fieldname]) {
-					msgprint(__("Please specify") + ": " + 
-						frappe.meta.get_label(me.frm.doc.doctype, fieldname, me.frm.doc.name) + 
+					msgprint(__("Please specify") + ": " +
+						frappe.meta.get_label(me.frm.doc.doctype, fieldname, me.frm.doc.name) +
 						". " + __("It is needed to fetch Item Details."));
 						valid = false;
 				}
@@ -503,25 +483,25 @@
 		});
 		return valid;
 	},
-	
+
 	get_item_doclist: function() {
 		return this.frm.doc[this.fname] || [];
 	},
-	
+
 	get_tax_doclist: function() {
 		return this.frm.doc[this.other_fname] || [];
 	},
-	
+
 	validate_conversion_rate: function() {
 		this.frm.doc.conversion_rate = flt(this.frm.doc.conversion_rate, precision("conversion_rate"));
-		var conversion_rate_label = frappe.meta.get_label(this.frm.doc.doctype, "conversion_rate", 
+		var conversion_rate_label = frappe.meta.get_label(this.frm.doc.doctype, "conversion_rate",
 			this.frm.doc.name);
 		var company_currency = this.get_company_currency();
-		
+
 		if(!this.frm.doc.conversion_rate) {
-			frappe.throw(repl('%(conversion_rate_label)s' + 
-				__(' is mandatory. Maybe Currency Exchange record is not created for ') + 
-				'%(from_currency)s' + __(" to ") + '%(to_currency)s', 
+			frappe.throw(repl('%(conversion_rate_label)s' +
+				__(' is mandatory. Maybe Currency Exchange record is not created for ') +
+				'%(from_currency)s' + __(" to ") + '%(to_currency)s',
 				{
 					"conversion_rate_label": conversion_rate_label,
 					"from_currency": this.frm.doc.currency,
@@ -529,7 +509,7 @@
 				}));
 		}
 	},
-	
+
 	calculate_taxes_and_totals: function() {
 		this.discount_amount_applied = false;
 		this._calculate_taxes_and_totals();
@@ -552,13 +532,13 @@
 
 		this.show_item_wise_taxes();
 	},
-	
+
 	initialize_taxes: function() {
 		var me = this;
 
 		$.each(this.frm.tax_doclist, function(i, tax) {
 			tax.item_wise_tax_detail = {};
-			tax_fields = ["total", "tax_amount_after_discount_amount", 
+			tax_fields = ["total", "tax_amount_after_discount_amount",
 				"tax_amount_for_current_item", "grand_total_for_current_item",
 				"tax_fraction_for_current_item", "grand_total_fraction_for_current_item"]
 
@@ -566,17 +546,17 @@
 				tax_fields.push("tax_amount");
 
 			$.each(tax_fields, function(i, fieldname) { tax[fieldname] = 0.0 });
-			
+
 			me.validate_on_previous_row(tax);
 			me.validate_inclusive_tax(tax);
 			frappe.model.round_floats_in(tax);
 		});
 	},
-	
+
 	calculate_taxes: function() {
 		var me = this;
 		var actual_tax_dict = {};
-		
+
 		// maintain actual tax rate based on idx
 		$.each(this.frm.tax_doclist, function(i, tax) {
 			if (tax.charge_type == "Actual") {
@@ -602,34 +582,34 @@
 				// store tax_amount for current item as it will be used for
 				// charge type = 'On Previous Row Amount'
 				tax.tax_amount_for_current_item = current_tax_amount;
-				
+
 				// accumulate tax amount into tax.tax_amount
 				if (!me.discount_amount_applied)
 					tax.tax_amount += current_tax_amount;
 
 				tax.tax_amount_after_discount_amount += current_tax_amount;
-				
+
 				// for buying
 				if(tax.category) {
 					// if just for valuation, do not add the tax amount in total
 					// hence, setting it as 0 for further steps
 					current_tax_amount = (tax.category == "Valuation") ? 0.0 : current_tax_amount;
-					
+
 					current_tax_amount *= (tax.add_deduct_tax == "Deduct") ? -1.0 : 1.0;
 				}
-				
+
 				// Calculate tax.total viz. grand total till that step
-				// note: grand_total_for_current_item contains the contribution of 
+				// note: grand_total_for_current_item contains the contribution of
 				// item's amount, previously applied tax and the current tax on that item
 				if(i==0) {
 					tax.grand_total_for_current_item = flt(item.base_amount + current_tax_amount,
 						precision("total", tax));
 				} else {
-					tax.grand_total_for_current_item = 
+					tax.grand_total_for_current_item =
 						flt(me.frm.tax_doclist[i-1].grand_total_for_current_item + current_tax_amount,
 							precision("total", tax));
 				}
-				
+
 				// in tax.total, accumulate grand total for each item
 				tax.total += tax.grand_total_for_current_item;
 
@@ -648,54 +628,54 @@
 	round_off_totals: function(tax) {
 		tax.total = flt(tax.total, precision("total", tax));
 		tax.tax_amount = flt(tax.tax_amount, precision("tax_amount", tax));
-		tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount, 
+		tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount,
 			precision("tax_amount", tax));
 	},
 
 	adjust_discount_amount_loss: function(tax) {
 		var discount_amount_loss = this.frm.doc.grand_total - flt(this.frm.doc.discount_amount) - tax.total;
-		tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount + 
+		tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount +
 			discount_amount_loss, precision("tax_amount", tax));
 		tax.total = flt(tax.total + discount_amount_loss, precision("total", tax));
 	},
-	
+
 	get_current_tax_amount: function(item, tax, item_tax_map) {
 		var tax_rate = this._get_tax_rate(tax, item_tax_map);
 		var current_tax_amount = 0.0;
-		
+
 		if(tax.charge_type == "Actual") {
 			// distribute the tax amount proportionally to each item row
 			var actual = flt(tax.rate, precision("tax_amount", tax));
 			current_tax_amount = this.frm.doc.net_total ?
 				((item.base_amount / this.frm.doc.net_total) * actual) :
 				0.0;
-			
+
 		} else if(tax.charge_type == "On Net Total") {
 			current_tax_amount = (tax_rate / 100.0) * item.base_amount;
-			
+
 		} else if(tax.charge_type == "On Previous Row Amount") {
 			current_tax_amount = (tax_rate / 100.0) *
 				this.frm.tax_doclist[cint(tax.row_id) - 1].tax_amount_for_current_item;
-			
+
 		} else if(tax.charge_type == "On Previous Row Total") {
 			current_tax_amount = (tax_rate / 100.0) *
 				this.frm.tax_doclist[cint(tax.row_id) - 1].grand_total_for_current_item;
 		}
 
 		current_tax_amount = flt(current_tax_amount, precision("tax_amount", tax));
-		
+
 		// store tax breakup for each item
 		tax.item_wise_tax_detail[item.item_code || item.item_name] = [tax_rate, current_tax_amount];
-		
+
 		return current_tax_amount;
 	},
-	
+
 	_cleanup: function() {
 		$.each(this.frm.tax_doclist, function(i, tax) {
 			$.each(["tax_amount_for_current_item", "grand_total_for_current_item",
-				"tax_fraction_for_current_item", "grand_total_fraction_for_current_item"], 
+				"tax_fraction_for_current_item", "grand_total_fraction_for_current_item"],
 				function(i, fieldname) { delete tax[fieldname]; });
-			
+
 			tax.item_wise_tax_detail = JSON.stringify(tax.item_wise_tax_detail);
 		});
 	},
@@ -706,17 +686,17 @@
 			this.frm.doc.total_advance = flt(frappe.utils.sum(
 				$.map(advance_doclist, function(adv) { return adv.allocated_amount })
 			), precision("total_advance"));
-			
+
 			this.calculate_outstanding_amount();
 		}
 	},
-	
+
 	_set_in_company_currency: function(item, print_field, base_field) {
 		// set values in base currency
 		item[base_field] = flt(item[print_field] * this.frm.doc.conversion_rate,
 			precision(base_field, item));
 	},
-	
+
 	get_terms: function() {
 		var me = this;
 		if(this.frm.doc.tc_name) {
@@ -752,4 +732,4 @@
 				.appendTo($(this.frm.fields_dict.other_charges_calculation.wrapper).empty());
 		}
 	},
-});
\ No newline at end of file
+});
diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py
index b0cb540..9af6b86 100644
--- a/erpnext/selling/doctype/customer/customer.py
+++ b/erpnext/selling/doctype/customer/customer.py
@@ -27,7 +27,7 @@
 
 	def validate_values(self):
 		if frappe.defaults.get_global_default('cust_master_name') == 'Naming Series' and not self.naming_series:
-			frappe.throw("Series is Mandatory.", frappe.MandatoryError)
+			frappe.throw(_("Series is mandatory"), frappe.MandatoryError)
 
 	def validate(self):
 		self.validate_values()
@@ -66,7 +66,7 @@
 			c.is_primary_contact = 1
 			try:
 				c.save()
-			except NameError, e:
+			except NameError:
 				pass
 
 	def on_update(self):
@@ -86,7 +86,7 @@
 
 	def validate_name_with_customer_group(self):
 		if frappe.db.exists("Customer Group", self.name):
-			frappe.throw("A Customer Group exists with same name please change the Customer name or rename the Customer Group")
+			frappe.throw(_("A Customer Group exists with same name please change the Customer name or rename the Customer Group"))
 
 	def delete_customer_address(self):
 		addresses = frappe.db.sql("""select name, lead from `tabAddress`
diff --git a/erpnext/selling/doctype/lead/lead.py b/erpnext/selling/doctype/lead/lead.py
index c400e55..5689d6d 100644
--- a/erpnext/selling/doctype/lead/lead.py
+++ b/erpnext/selling/doctype/lead/lead.py
@@ -27,11 +27,11 @@
 		self.set_status()
 
 		if self.source == 'Campaign' and not self.campaign_name and session['user'] != 'Guest':
-			frappe.throw("Please specify campaign name")
+			frappe.throw(_("Campaign Name is required"))
 
 		if self.email_id:
 			if not validate_email_add(self.email_id):
-				frappe.throw('Please enter valid email id.')
+				frappe.throw(_('{0} is not a valid email id').format(self.email_id))
 
 	def on_update(self):
 		self.check_email_id_is_unique()
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index d4054dd..0551aaa 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -145,7 +145,7 @@
 			if quotation:
 				doc = frappe.get_doc("Quotation", quotation)
 				if doc.docstatus==2:
-					frappe.throw(quotation + ": " + frappe._("Quotation is cancelled."))
+					frappe.throw(_("Quotation {0} is cancelled").format(quotation))
 
 				doc.set_status(update=True)
 
diff --git a/erpnext/setup/doctype/customer_group/customer_group.py b/erpnext/setup/doctype/customer_group/customer_group.py
index 0eefebe..57f9197 100644
--- a/erpnext/setup/doctype/customer_group/customer_group.py
+++ b/erpnext/setup/doctype/customer_group/customer_group.py
@@ -17,6 +17,4 @@
 
 	def validate_name_with_customer(self):
 		if frappe.db.exists("Customer", self.name):
-			frappe.msgprint(_("An Customer exists with same name (%s), \
-				please change the Customer Group name or rename the Customer") %
-				self.name, raise_exception=1)
+			frappe.msgprint(_("An Customer exists with same name"), raise_exception=1)
diff --git a/erpnext/setup/doctype/features_setup/features_setup.json b/erpnext/setup/doctype/features_setup/features_setup.json
index 8122da0..fee7c17 100644
--- a/erpnext/setup/doctype/features_setup/features_setup.json
+++ b/erpnext/setup/doctype/features_setup/features_setup.json
@@ -1,241 +1,241 @@
 {
- "creation": "2012-12-20 12:50:49.000000", 
- "docstatus": 0, 
- "doctype": "DocType", 
+ "creation": "2012-12-20 12:50:49.000000",
+ "docstatus": 0,
+ "doctype": "DocType",
  "fields": [
   {
-   "fieldname": "materials", 
-   "fieldtype": "Section Break", 
-   "label": "Materials", 
+   "fieldname": "materials",
+   "fieldtype": "Section Break",
+   "label": "Materials",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "To track item in sales and purchase documents based on their serial nos. This is can also used to track warranty details of the product.", 
-   "fieldname": "fs_item_serial_nos", 
-   "fieldtype": "Check", 
-   "label": "Item Serial Nos", 
+   "description": "To track item in sales and purchase documents based on their serial nos. This is can also used to track warranty details of the product.",
+   "fieldname": "fs_item_serial_nos",
+   "fieldtype": "Check",
+   "label": "Item Serial Nos",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "To track items in sales and purchase documents with batch nos<br><b>Preferred Industry: Chemicals etc</b>", 
-   "fieldname": "fs_item_batch_nos", 
-   "fieldtype": "Check", 
-   "label": "Item Batch Nos", 
+   "description": "To track items in sales and purchase documents with batch nos<br><b>Preferred Industry: Chemicals etc</b>",
+   "fieldname": "fs_item_batch_nos",
+   "fieldtype": "Check",
+   "label": "Item Batch Nos",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "To track brand name in the following documents<br>\nDelivery Note, Enuiry, Material Request, Item, Purchase Order, Purchase Voucher, Purchaser Receipt, Quotation, Sales Invoice, Sales BOM, Sales Order, Serial No", 
-   "fieldname": "fs_brands", 
-   "fieldtype": "Check", 
-   "label": "Brands", 
+   "description": "To track brand name in the following documents Delivery Note, Opportunity, Material Request, Item, Purchase Order, Purchase Voucher, Purchaser Receipt, Quotation, Sales Invoice, Sales BOM, Sales Order, Serial No",
+   "fieldname": "fs_brands",
+   "fieldtype": "Check",
+   "label": "Brands",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "To track items using barcode. You will be able to enter items in Delivery Note and Sales Invoice by scanning barcode of item.", 
-   "fieldname": "fs_item_barcode", 
-   "fieldtype": "Check", 
-   "label": "Item Barcode", 
+   "description": "To track items using barcode. You will be able to enter items in Delivery Note and Sales Invoice by scanning barcode of item.",
+   "fieldname": "fs_item_barcode",
+   "fieldtype": "Check",
+   "label": "Item Barcode",
    "permlevel": 0
-  }, 
+  },
   {
-   "fieldname": "column_break0", 
-   "fieldtype": "Column Break", 
+   "fieldname": "column_break0",
+   "fieldtype": "Column Break",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "1. To maintain the customer wise item code and to make them searchable based on their code use this option", 
-   "fieldname": "fs_item_advanced", 
-   "fieldtype": "Check", 
-   "label": "Item Advanced", 
+   "description": "1. To maintain the customer wise item code and to make them searchable based on their code use this option",
+   "fieldname": "fs_item_advanced",
+   "fieldtype": "Check",
+   "label": "Item Advanced",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "If Sale BOM is defined, the actual BOM of the Pack is displayed as table.\nAvailable in Delivery Note and Sales Order", 
-   "fieldname": "fs_packing_details", 
-   "fieldtype": "Check", 
-   "label": "Packing Details", 
+   "description": "If Sale BOM is defined, the actual BOM of the Pack is displayed as table. Available in Delivery Note and Sales Order",
+   "fieldname": "fs_packing_details",
+   "fieldtype": "Check",
+   "label": "Packing Details",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "To get Item Group in details table", 
-   "fieldname": "fs_item_group_in_details", 
-   "fieldtype": "Check", 
-   "label": "Item Groups in Details", 
+   "description": "To get Item Group in details table",
+   "fieldname": "fs_item_group_in_details",
+   "fieldtype": "Check",
+   "label": "Item Groups in Details",
    "permlevel": 0
-  }, 
+  },
   {
-   "fieldname": "sales_and_purchase", 
-   "fieldtype": "Section Break", 
-   "label": "Sales and Purchase", 
+   "fieldname": "sales_and_purchase",
+   "fieldtype": "Section Break",
+   "label": "Sales and Purchase",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "All export related fields like currency, conversion rate, export total, export grand total etc are available in <br>\nDelivery Note, POS, Quotation, Sales Invoice, Sales Order etc.", 
-   "fieldname": "fs_exports", 
-   "fieldtype": "Check", 
-   "label": "Exports", 
+   "description": "All export related fields like currency, conversion rate, export total, export grand total etc are available in Delivery Note, POS, Quotation, Sales Invoice, Sales Order etc.",
+   "fieldname": "fs_exports",
+   "fieldtype": "Check",
+   "label": "Exports",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "All import related fields like currency, conversion rate, import total, import grand total etc are available in <br>\nPurchase Receipt, Supplier Quotation, Purchase Invoice, Purchase Order etc.", 
-   "fieldname": "fs_imports", 
-   "fieldtype": "Check", 
-   "label": "Imports", 
+   "description": "All import related fields like currency, conversion rate, import total, import grand total etc are available in Purchase Receipt, Supplier Quotation, Purchase Invoice, Purchase Order etc.",
+   "fieldname": "fs_imports",
+   "fieldtype": "Check",
+   "label": "Imports",
    "permlevel": 0
-  }, 
+  },
   {
-   "fieldname": "column_break1", 
-   "fieldtype": "Column Break", 
+   "fieldname": "column_break1",
+   "fieldtype": "Column Break",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "Field available in Delivery Note, Quotation, Sales Invoice, Sales Order", 
-   "fieldname": "fs_discounts", 
-   "fieldtype": "Check", 
-   "label": "Sales Discounts", 
+   "description": "Field available in Delivery Note, Quotation, Sales Invoice, Sales Order",
+   "fieldname": "fs_discounts",
+   "fieldtype": "Check",
+   "label": "Sales Discounts",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "Discount Fields will be available in Purchase Order, Purchase Receipt, Purchase Invoice", 
-   "fieldname": "fs_purchase_discounts", 
-   "fieldtype": "Check", 
-   "label": "Purchase Discounts", 
+   "description": "Discount Fields will be available in Purchase Order, Purchase Receipt, Purchase Invoice",
+   "fieldname": "fs_purchase_discounts",
+   "fieldtype": "Check",
+   "label": "Purchase Discounts",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "To track any installation or commissioning related work after sales", 
-   "fieldname": "fs_after_sales_installations", 
-   "fieldtype": "Check", 
-   "label": "After Sale Installations", 
+   "description": "To track any installation or commissioning related work after sales",
+   "fieldname": "fs_after_sales_installations",
+   "fieldtype": "Check",
+   "label": "After Sale Installations",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "Available in \nBOM, Delivery Note, Purchase Invoice, Production Order, Purchase Order, Purchase Receipt, Sales Invoice, Sales Order, Stock Entry, Timesheet", 
-   "fieldname": "fs_projects", 
-   "fieldtype": "Check", 
-   "label": "Projects", 
+   "description": "Available in BOM, Delivery Note, Purchase Invoice, Production Order, Purchase Order, Purchase Receipt, Sales Invoice, Sales Order, Stock Entry, Timesheet",
+   "fieldname": "fs_projects",
+   "fieldtype": "Check",
+   "label": "Projects",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "If you have Sales Team and Sale Partners (Channel Partners)  they can be tagged and maintain their contribution in the sales activity", 
-   "fieldname": "fs_sales_extras", 
-   "fieldtype": "Check", 
-   "label": "Sales Extras", 
+   "description": "If you have Sales Team and Sale Partners (Channel Partners)  they can be tagged and maintain their contribution in the sales activity",
+   "fieldname": "fs_sales_extras",
+   "fieldtype": "Check",
+   "label": "Sales Extras",
    "permlevel": 0
-  }, 
+  },
   {
-   "fieldname": "accounts", 
-   "fieldtype": "Section Break", 
-   "label": "Accounts", 
+   "fieldname": "accounts",
+   "fieldtype": "Section Break",
+   "label": "Accounts",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "Check if you need automatic recurring invoices. After submitting any sales invoice, Recurring section will be visible.", 
-   "fieldname": "fs_recurring_invoice", 
-   "fieldtype": "Check", 
-   "label": "Recurring Invoice", 
+   "description": "Check if you need automatic recurring invoices. After submitting any sales invoice, Recurring section will be visible.",
+   "fieldname": "fs_recurring_invoice",
+   "fieldtype": "Check",
+   "label": "Recurring Invoice",
    "permlevel": 0
-  }, 
+  },
   {
-   "fieldname": "column_break2", 
-   "fieldtype": "Column Break", 
+   "fieldname": "column_break2",
+   "fieldtype": "Column Break",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "To enable <b>Point of Sale</b> features", 
-   "fieldname": "fs_pos", 
-   "fieldtype": "Check", 
-   "label": "Point of Sale", 
+   "description": "To enable <b>Point of Sale</b> features",
+   "fieldname": "fs_pos",
+   "fieldtype": "Check",
+   "label": "Point of Sale",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "To enable <b>Point of Sale</b> view", 
-   "fieldname": "fs_pos_view", 
-   "fieldtype": "Check", 
-   "label": "POS View", 
+   "description": "To enable <b>Point of Sale</b> view",
+   "fieldname": "fs_pos_view",
+   "fieldtype": "Check",
+   "label": "POS View",
    "permlevel": 0
-  }, 
+  },
   {
-   "fieldname": "production", 
-   "fieldtype": "Section Break", 
-   "label": "Manufacturing", 
+   "fieldname": "production",
+   "fieldtype": "Section Break",
+   "label": "Manufacturing",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "If you involve in manufacturing activity<br>\nEnables item <b>Is Manufactured</b>", 
-   "fieldname": "fs_manufacturing", 
-   "fieldtype": "Check", 
-   "label": "Manufacturing", 
+   "description": "If you involve in manufacturing activity. Enables Item 'Is Manufactured'",
+   "fieldname": "fs_manufacturing",
+   "fieldtype": "Check",
+   "label": "Manufacturing",
    "permlevel": 0
-  }, 
+  },
   {
-   "fieldname": "column_break3", 
-   "fieldtype": "Column Break", 
+   "fieldname": "column_break3",
+   "fieldtype": "Column Break",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "If you follow Quality Inspection<br>\nEnables item QA Required and QA No in Purchase Receipt", 
-   "fieldname": "fs_quality", 
-   "fieldtype": "Check", 
-   "label": "Quality", 
+   "description": "If you follow Quality Inspection. Enables Item QA Required and QA No in Purchase Receipt",
+   "fieldname": "fs_quality",
+   "fieldtype": "Check",
+   "label": "Quality",
    "permlevel": 0
-  }, 
+  },
   {
-   "fieldname": "miscelleneous", 
-   "fieldtype": "Section Break", 
-   "label": "Miscelleneous", 
+   "fieldname": "miscelleneous",
+   "fieldtype": "Section Break",
+   "label": "Miscelleneous",
    "permlevel": 0
-  }, 
+  },
   {
-   "description": "If you have long print formats, this feature can be used to split the page to be printed on multiple pages with all headers and footers on each page", 
-   "fieldname": "fs_page_break", 
-   "fieldtype": "Check", 
-   "label": "Page Break", 
+   "description": "If you have long print formats, this feature can be used to split the page to be printed on multiple pages with all headers and footers on each page",
+   "fieldname": "fs_page_break",
+   "fieldtype": "Check",
+   "label": "Page Break",
    "permlevel": 0
-  }, 
+  },
   {
-   "fieldname": "column_break4", 
-   "fieldtype": "Column Break", 
+   "fieldname": "column_break4",
+   "fieldtype": "Column Break",
    "permlevel": 0
-  }, 
+  },
   {
-   "fieldname": "fs_more_info", 
-   "fieldtype": "Check", 
-   "label": "More Info", 
+   "fieldname": "fs_more_info",
+   "fieldtype": "Check",
+   "label": "More Info",
    "permlevel": 0
   }
- ], 
- "icon": "icon-glass", 
- "idx": 1, 
- "issingle": 1, 
- "modified": "2013-12-24 11:40:19.000000", 
- "modified_by": "Administrator", 
- "module": "Setup", 
- "name": "Features Setup", 
- "name_case": "Title Case", 
- "owner": "Administrator", 
+ ],
+ "icon": "icon-glass",
+ "idx": 1,
+ "issingle": 1,
+ "modified": "2013-12-24 11:40:19.000000",
+ "modified_by": "Administrator",
+ "module": "Setup",
+ "name": "Features Setup",
+ "name_case": "Title Case",
+ "owner": "Administrator",
  "permissions": [
   {
-   "create": 1, 
-   "email": 1, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 0, 
-   "role": "System Manager", 
-   "submit": 0, 
+   "create": 1,
+   "email": 1,
+   "permlevel": 0,
+   "print": 1,
+   "read": 1,
+   "report": 0,
+   "role": "System Manager",
+   "submit": 0,
    "write": 1
-  }, 
+  },
   {
-   "create": 1, 
-   "email": 1, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 0, 
-   "role": "Administrator", 
-   "submit": 0, 
+   "create": 1,
+   "email": 1,
+   "permlevel": 0,
+   "print": 1,
+   "read": 1,
+   "report": 0,
+   "role": "Administrator",
+   "submit": 0,
    "write": 1
   }
  ]
-}
\ No newline at end of file
+}
diff --git a/erpnext/setup/doctype/naming_series/naming_series.py b/erpnext/setup/doctype/naming_series/naming_series.py
index e93af3c..d44cd4b 100644
--- a/erpnext/setup/doctype/naming_series/naming_series.py
+++ b/erpnext/setup/doctype/naming_series/naming_series.py
@@ -15,11 +15,11 @@
 		return {
 			"transactions": "\n".join([''] + sorted(list(set(
 				frappe.db.sql_list("""select parent
-					from `tabDocField` where fieldname='naming_series'""") 
-				+ frappe.db.sql_list("""select dt from `tabCustom Field` 
+					from `tabDocField` where fieldname='naming_series'""")
+				+ frappe.db.sql_list("""select dt from `tabCustom Field`
 					where fieldname='naming_series'""")
 				)))),
-			"prefixes": "\n".join([''] + [i[0] for i in 
+			"prefixes": "\n".join([''] + [i[0] for i in
 				frappe.db.sql("""select name from tabSeries order by name""")])
 		}
 
@@ -86,16 +86,16 @@
 		dt = DocType()
 
 		parent = list(set(
-			frappe.db.sql_list("""select dt.name 
-				from `tabDocField` df, `tabDocType` dt 
+			frappe.db.sql_list("""select dt.name
+				from `tabDocField` df, `tabDocType` dt
 				where dt.name = df.parent and df.fieldname='naming_series' and dt.name != %s""",
 				self.select_doc_for_series)
-			+ frappe.db.sql_list("""select dt.name 
-				from `tabCustom Field` df, `tabDocType` dt 
+			+ frappe.db.sql_list("""select dt.name
+				from `tabCustom Field` df, `tabDocType` dt
 				where dt.name = df.dt and df.fieldname='naming_series' and dt.name != %s""",
 				self.select_doc_for_series)
 			))
-		sr = [[frappe.get_meta(p).get_field("naming_series").options, p] 
+		sr = [[frappe.get_meta(p).get_field("naming_series").options, p]
 			for p in parent]
 		options = self.scrub_options_list(self.set_options.split("\n"))
 		for series in options:
@@ -104,19 +104,12 @@
 				if i[0]:
 					existing_series = [d.split('.')[0] for d in i[0].split("\n")]
 					if series.split(".")[0] in existing_series:
-						throw("{oops}! {sr} {series} {msg} {existing_series}. {select}".format(**{
-							"oops": _("Oops"),
-							"sr": _("Series Name"),
-							"series": series,
-							"msg": _("is already in use in"),
-							"existing_series": i[1],
-							"select": _("Please select a new one")
-						}))
+						frappe.throw(_("Series {0} already used in {1}").format(series,i[1]))
 
 	def validate_series_name(self, n):
 		import re
 		if not re.match("^[a-zA-Z0-9-/.#]*$", n):
-			throw('Special Characters except "-" and "/" not allowed in naming series')
+			throw(_('Special Characters except "-" and "/" not allowed in naming series'))
 
 	def get_options(self, arg=''):
 		return frappe.get_meta(self.select_doc_for_series).get_field("naming_series").options
@@ -124,7 +117,7 @@
 	def get_current(self, arg=None):
 		"""get series current"""
 		if self.prefix:
-			self.current_value = frappe.db.get_value("Series", 
+			self.current_value = frappe.db.get_value("Series",
 				self.prefix.split('.')[0], "current")
 
 	def insert_series(self, series):
@@ -136,7 +129,7 @@
 		if self.prefix:
 			prefix = self.prefix.split('.')[0]
 			self.insert_series(prefix)
-			frappe.db.sql("update `tabSeries` set current = %s where name = %s", 
+			frappe.db.sql("update `tabSeries` set current = %s where name = %s",
 				(self.current_value, prefix))
 			msgprint(_("Series Updated Successfully"))
 		else:
@@ -149,8 +142,8 @@
 		make_property_setter(doctype, "naming_series", "reqd", 1, "Check")
 
 		# set values for mandatory
-		frappe.db.sql("""update `tab{doctype}` set naming_series={s} where 
-			ifnull(naming_series, '')=''""".format(doctype=doctype, s="%s"), 
+		frappe.db.sql("""update `tab{doctype}` set naming_series={s} where
+			ifnull(naming_series, '')=''""".format(doctype=doctype, s="%s"),
 			get_default_naming_series(doctype))
 
 		if hide_name_field:
@@ -165,10 +158,10 @@
 			make_property_setter(doctype, fieldname, "reqd", 1, "Check")
 
 			# set values for mandatory
-			frappe.db.sql("""update `tab{doctype}` set `{fieldname}`=`name` where 
+			frappe.db.sql("""update `tab{doctype}` set `{fieldname}`=`name` where
 				ifnull({fieldname}, '')=''""".format(doctype=doctype, fieldname=fieldname))
 
 def get_default_naming_series(doctype):
 	naming_series = frappe.get_meta(doctype).get_field("naming_series").options or ""
 	naming_series = naming_series.split("\n")
-	return naming_series[0] or naming_series[1]
\ No newline at end of file
+	return naming_series[0] or naming_series[1]
diff --git a/erpnext/setup/doctype/sales_person/sales_person.py b/erpnext/setup/doctype/sales_person/sales_person.py
index 6389722..bbd5690 100644
--- a/erpnext/setup/doctype/sales_person/sales_person.py
+++ b/erpnext/setup/doctype/sales_person/sales_person.py
@@ -10,19 +10,19 @@
 class SalesPerson(NestedSet):
 	nsm_parent_field = 'parent_sales_person';
 
-	def validate(self): 
+	def validate(self):
 		for d in self.get('target_details'):
 			if not flt(d.target_qty) and not flt(d.target_amount):
 				frappe.throw(_("Either target qty or target amount is mandatory."))
-	
+
 	def on_update(self):
 		super(SalesPerson, self).on_update()
 		self.validate_one_root()
-	
+
 	def get_email_id(self):
 		if self.employee:
 			user = frappe.db.get_value("Employee", self.employee, "user_id")
 			if not user:
-				frappe.throw("User ID not set for Employee %s" % self.employee)
+				frappe.throw(_("User ID not set for Employee {0}").format(self.employee))
 			else:
-				return frappe.db.get_value("User", user, "email") or user
\ No newline at end of file
+				return frappe.db.get_value("User", user, "email") or user
diff --git a/erpnext/setup/utils.py b/erpnext/setup/utils.py
index 63d18d2..efbc12f 100644
--- a/erpnext/setup/utils.py
+++ b/erpnext/setup/utils.py
@@ -11,8 +11,7 @@
 	if not currency:
 		currency = frappe.db.get_default("currency")
 	if not currency:
-		throw(_('Please specify Default Currency in Company Master \
-			and Global Defaults'))
+		throw(_('Please specify Default Currency in Company Master and Global Defaults'))
 
 	return currency
 
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index 45c571c..bdbc0dc 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -109,8 +109,7 @@
 			self.is_pro_applicable = "No"
 
 		if self.is_pro_applicable == 'Yes' and self.is_stock_item == 'No':
-			frappe.throw(_("As Production Order can be made for this item, \
-				it must be a stock item."))
+			frappe.throw(_("As Production Order can be made for this item, it must be a stock item."))
 
 		if self.has_serial_no == 'Yes' and self.is_stock_item == 'No':
 			msgprint(_("'Has Serial No' can not be 'Yes' for non-stock item"), raise_exception=1)
@@ -123,15 +122,13 @@
 				and t2.docstatus = 1 and t1.docstatus =1 """, self.name)
 
 			if bom_mat and bom_mat[0][0]:
-				frappe.throw(_("Item must be a purchase item, \
-					as it is present in one or many Active BOMs"))
+				frappe.throw(_("Item must be a purchase item, as it is present in one or many Active BOMs"))
 
 		if self.is_manufactured_item != "Yes":
 			bom = frappe.db.sql("""select name from `tabBOM` where item = %s
 				and is_active = 1""", (self.name,))
 			if bom and bom[0][0]:
-				frappe.throw(_("""Allow Bill of Materials should be 'Yes'. Because one or many \
-					active BOMs present for this item"""))
+				frappe.throw(_("""Allow Bill of Materials should be 'Yes'. Because one or many active BOMs present for this item"""))
 
 	def fill_customer_code(self):
 		""" Append all the customer codes and insert into "customer_code" field of item table """
diff --git a/erpnext/stock/doctype/item_price/item_price.py b/erpnext/stock/doctype/item_price/item_price.py
index 8916628..56b3632 100644
--- a/erpnext/stock/doctype/item_price/item_price.py
+++ b/erpnext/stock/doctype/item_price/item_price.py
@@ -17,41 +17,27 @@
 		self.check_duplicate_item()
 		self.update_price_list_details()
 		self.update_item_details()
-		
+
 	def validate_item(self):
 		if not frappe.db.exists("Item", self.item_code):
-			throw("{doctype}: {item} {not_found}".format(**{
-				"doctype": _("Item"), 
-				"item": self.item_code, 
-				"not_found": _(" not found")
-			}))
+			throw(_("Item {0} not found").format(self.item_code))
 
 	def validate_price_list(self):
 		enabled = frappe.db.get_value("Price List", self.price_list, "enabled")
 		if not enabled:
-			throw("{message}: {price_list} {disabled}".format(**{
-				"message": _("Price List"),
-				"price_list": self.price_list,
-				"disabled": _("is disabled.")
-			}))
+			throw(_("Price List {0} is disabled").format(self.price_list))
 
 	def check_duplicate_item(self):
-		if frappe.db.sql("""select name from `tabItem Price` 
-			where item_code=%s and price_list=%s and name!=%s""", 
+		if frappe.db.sql("""select name from `tabItem Price`
+			where item_code=%s and price_list=%s and name!=%s""",
 			(self.item_code, self.price_list, self.name)):
-				throw("{duplicate_item}: {item_code}, {already}: {price_list}".format(**{
-					"duplicate_item": _("Duplicate Item"),
-					"item_code": self.item_code,
-					"already": _("already available in Price List"),
-					"price_list": self.price_list
-				}), ItemPriceDuplicateItem)
+			frappe.throw(_("Item {0} appears multiple times in Price List {1}").format(self.item_code, self.price_list))
 
 	def update_price_list_details(self):
 		self.buying, self.selling, self.currency = \
-			frappe.db.get_value("Price List", {"name": self.price_list, "enabled": 1}, 
+			frappe.db.get_value("Price List", {"name": self.price_list, "enabled": 1},
 				["buying", "selling", "currency"])
 
 	def update_item_details(self):
-		self.item_name, self.item_description = frappe.db.get_value("Item", 
+		self.item_name, self.item_description = frappe.db.get_value("Item",
 			self.item_code, ["item_name", "description"])
-				
\ No newline at end of file
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index db97611..8811988 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -8,7 +8,7 @@
 import frappe
 
 from frappe.utils import cstr, flt
-from frappe import msgprint, _
+from frappe import _
 
 from erpnext.controllers.buying_controller import BuyingController
 class MaterialRequest(BuyingController):
@@ -43,9 +43,7 @@
 				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):
-					frappe.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))
+					frappe.throw(_("Material Request of maximum {0} can be made for Item {1} against Sales Order {2}").format(actual_so_qty - already_indented, item, so_no))
 
 	def validate_schedule_date(self):
 		for d in self.get('indent_details'):
diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py
index 37838ec..9533e57 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.py
+++ b/erpnext/stock/doctype/serial_no/serial_no.py
@@ -27,8 +27,7 @@
 
 	def validate(self):
 		if self.get("__islocal") and self.warehouse:
-			frappe.throw(_("New Serial No cannot have Warehouse. Warehouse must be \
-				set by Stock Entry or Purchase Receipt"), SerialNoCannotCreateDirectError)
+			frappe.throw(_("New Serial No cannot have Warehouse. Warehouse must be set by Stock Entry or Purchase Receipt"), SerialNoCannotCreateDirectError)
 
 		self.set_maintenance_status()
 		self.validate_warehouse()
@@ -166,8 +165,7 @@
 		if self.status == 'Delivered':
 			frappe.throw(_("Delivered Serial No ") + self.name + _(" can not be deleted"))
 		if self.warehouse:
-			frappe.throw(_("Cannot delete Serial No in warehouse. \
-				First remove from warehouse, then delete.") + ": " + self.name)
+			frappe.throw(_("Cannot delete Serial No in warehouse. First remove from warehouse, then delete.") + ": " + self.name)
 
 	def before_rename(self, old, new, merge=False):
 		if merge:
diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
index 1cc9c17..07778a4 100644
--- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
@@ -14,45 +14,45 @@
 	def setup(self):
 		self.head_row = ["Item Code", "Warehouse", "Quantity", "Valuation Rate"]
 		self.entries = []
-		
+
 	def validate(self):
 		self.validate_data()
 		self.validate_expense_account()
-		
+
 	def on_submit(self):
 		self.insert_stock_ledger_entries()
 		self.make_gl_entries()
-		
+
 	def on_cancel(self):
 		self.delete_and_repost_sle()
 		self.make_cancel_gl_entries()
-		
+
 	def validate_data(self):
 		if not self.reconciliation_json:
 			return
-			
+
 		data = json.loads(self.reconciliation_json)
-		
+
 		# strip out extra columns (if any)
 		data = [row[:4] for row in data]
-		
+
 		if self.head_row not in data:
 			msgprint(_("""Wrong Template: Unable to find head row."""),
 				raise_exception=1)
-		
+
 		# remove the help part and save the json
 		head_row_no = 0
 		if data.index(self.head_row) != 0:
 			head_row_no = data.index(self.head_row)
 			data = data[head_row_no:]
 			self.reconciliation_json = json.dumps(data)
-				
+
 		def _get_msg(row_num, msg):
 			return _("Row # ") + ("%d: " % (row_num+head_row_no+2)) + _(msg)
-		
+
 		self.validation_messages = []
 		item_warehouse_combinations = []
-		
+
 		# validate no of rows
 		rows = data[1:]
 		if len(rows) > 100:
@@ -64,69 +64,66 @@
 				self.validation_messages.append(_get_msg(row_num, "Duplicate entry"))
 			else:
 				item_warehouse_combinations.append([row[0], row[1]])
-			
+
 			self.validate_item(row[0], row_num+head_row_no+2)
 			# note: warehouse will be validated through link validation
-			
+
 			# if both not specified
 			if row[2] == "" and row[3] == "":
 				self.validation_messages.append(_get_msg(row_num,
 					"Please specify either Quantity or Valuation Rate or both"))
-			
+
 			# do not allow negative quantity
 			if flt(row[2]) < 0:
-				self.validation_messages.append(_get_msg(row_num, 
+				self.validation_messages.append(_get_msg(row_num,
 					"Negative Quantity is not allowed"))
-			
+
 			# do not allow negative valuation
 			if flt(row[3]) < 0:
-				self.validation_messages.append(_get_msg(row_num, 
+				self.validation_messages.append(_get_msg(row_num,
 					"Negative Valuation Rate is not allowed"))
-		
+
 		# throw all validation messages
 		if self.validation_messages:
 			for msg in self.validation_messages:
 				msgprint(msg)
-			
+
 			raise frappe.ValidationError
-						
+
 	def validate_item(self, item_code, row_num):
 		from erpnext.stock.doctype.item.item import validate_end_of_life, \
 			validate_is_stock_item, validate_cancelled_item
-		
+
 		# using try except to catch all validation msgs and display together
-		
+
 		try:
 			item = frappe.get_doc("Item", item_code)
-			
+
 			# end of life and stock item
 			validate_end_of_life(item_code, item.end_of_life, verbose=0)
 			validate_is_stock_item(item_code, item.is_stock_item, verbose=0)
-		
+
 			# item should not be serialized
 			if item.has_serial_no == "Yes":
-				raise frappe.ValidationError, (_("Serialized Item: '") + item_code +
-					_("""' can not be managed using Stock Reconciliation.\
-					You can add/delete Serial No directly, \
-					to modify stock of this item."""))
-		
+				raise frappe.ValidationError, _("Serialized Item {0} cannot be updated using Stock Reconciliation").format(item_code)
+
 			# docstatus should be < 2
 			validate_cancelled_item(item_code, item.docstatus, verbose=0)
-				
+
 		except Exception, e:
 			self.validation_messages.append(_("Row # ") + ("%d: " % (row_num)) + cstr(e))
-			
+
 	def insert_stock_ledger_entries(self):
 		"""	find difference between current and expected entries
 			and create stock ledger entries based on the difference"""
 		from erpnext.stock.utils import get_valuation_method
 		from erpnext.stock.stock_ledger import get_previous_sle
-			
+
 		row_template = ["item_code", "warehouse", "qty", "valuation_rate"]
-		
+
 		if not self.reconciliation_json:
 			msgprint(_("""Stock Reconciliation file not uploaded"""), raise_exception=1)
-		
+
 		data = json.loads(self.reconciliation_json)
 		for row_num, row in enumerate(data[data.index(self.head_row)+1:]):
 			row = frappe._dict(zip(row_template, row))
@@ -141,22 +138,22 @@
 			# check valuation rate mandatory
 			if row.qty != "" and not row.valuation_rate and \
 					flt(previous_sle.get("qty_after_transaction")) <= 0:
-				frappe.throw(_("As existing qty for item: ") + row.item_code + 
+				frappe.throw(_("As existing qty for item: ") + row.item_code +
 					_(" at warehouse: ") + row.warehouse +
 					_(" is less than equals to zero in the system, valuation rate is mandatory for this item"))
-			
+
 			change_in_qty = row.qty != "" and \
 				(flt(row.qty) - flt(previous_sle.get("qty_after_transaction")))
-			
+
 			change_in_rate = row.valuation_rate != "" and \
 				(flt(row.valuation_rate) - flt(previous_sle.get("valuation_rate")))
-			
+
 			if get_valuation_method(row.item_code) == "Moving Average":
 				self.sle_for_moving_avg(row, previous_sle, change_in_qty, change_in_rate)
-					
+
 			else:
 				self.sle_for_fifo(row, previous_sle, change_in_qty, change_in_rate)
-					
+
 	def sle_for_moving_avg(self, row, previous_sle, change_in_qty, change_in_rate):
 		"""Insert Stock Ledger Entries for Moving Average valuation"""
 		def _get_incoming_rate(qty, valuation_rate, previous_qty, previous_valuation_rate):
@@ -167,73 +164,73 @@
 					valuation_rate = previous_valuation_rate
 				return (qty * valuation_rate - previous_qty * previous_valuation_rate) \
 					/ flt(qty - previous_qty)
-		
+
 		if change_in_qty:
 			# if change in qty, irrespective of change in rate
 			incoming_rate = _get_incoming_rate(flt(row.qty), flt(row.valuation_rate),
 				flt(previous_sle.get("qty_after_transaction")),
 				flt(previous_sle.get("valuation_rate")))
-				
+
 			row["voucher_detail_no"] = "Row: " + cstr(row.row_num) + "/Actual Entry"
 			self.insert_entries({"actual_qty": change_in_qty, "incoming_rate": incoming_rate}, row)
-			
+
 		elif change_in_rate and flt(previous_sle.get("qty_after_transaction")) > 0:
-			# if no change in qty, but change in rate 
+			# if no change in qty, but change in rate
 			# and positive actual stock before this reconciliation
 			incoming_rate = _get_incoming_rate(
 				flt(previous_sle.get("qty_after_transaction"))+1, flt(row.valuation_rate),
-				flt(previous_sle.get("qty_after_transaction")), 
+				flt(previous_sle.get("qty_after_transaction")),
 				flt(previous_sle.get("valuation_rate")))
-				
+
 			# +1 entry
 			row["voucher_detail_no"] = "Row: " + cstr(row.row_num) + "/Valuation Adjustment +1"
 			self.insert_entries({"actual_qty": 1, "incoming_rate": incoming_rate}, row)
-			
+
 			# -1 entry
 			row["voucher_detail_no"] = "Row: " + cstr(row.row_num) + "/Valuation Adjustment -1"
 			self.insert_entries({"actual_qty": -1}, row)
-		
+
 	def sle_for_fifo(self, row, previous_sle, change_in_qty, change_in_rate):
 		"""Insert Stock Ledger Entries for FIFO valuation"""
 		previous_stock_queue = json.loads(previous_sle.get("stock_queue") or "[]")
 		previous_stock_qty = sum((batch[0] for batch in previous_stock_queue))
 		previous_stock_value = sum((batch[0] * batch[1] for batch in \
 			previous_stock_queue))
-			
+
 		def _insert_entries():
 			if previous_stock_queue != [[row.qty, row.valuation_rate]]:
 				# make entry as per attachment
 				if row.qty:
 					row["voucher_detail_no"] = "Row: " + cstr(row.row_num) + "/Actual Entry"
-					self.insert_entries({"actual_qty": row.qty, 
+					self.insert_entries({"actual_qty": row.qty,
 						"incoming_rate": flt(row.valuation_rate)}, row)
-				
+
 				# Make reverse entry
 				if previous_stock_qty:
 					row["voucher_detail_no"] = "Row: " + cstr(row.row_num) + "/Reverse Entry"
-					self.insert_entries({"actual_qty": -1 * previous_stock_qty, 
-						"incoming_rate": previous_stock_qty < 0 and 
+					self.insert_entries({"actual_qty": -1 * previous_stock_qty,
+						"incoming_rate": previous_stock_qty < 0 and
 							flt(row.valuation_rate) or 0}, row)
-					
-					
+
+
 		if change_in_qty:
 			if row.valuation_rate == "":
 				# dont want change in valuation
 				if previous_stock_qty > 0:
 					# set valuation_rate as previous valuation_rate
 					row.valuation_rate = previous_stock_value / flt(previous_stock_qty)
-			
+
 			_insert_entries()
-					
+
 		elif change_in_rate and previous_stock_qty > 0:
-			# if no change in qty, but change in rate 
+			# if no change in qty, but change in rate
 			# and positive actual stock before this reconciliation
-			
+
 			row.qty = previous_stock_qty
 			_insert_entries()
-					
+
 	def insert_entries(self, opts, row):
-		"""Insert Stock Ledger Entries"""		
+		"""Insert Stock Ledger Entries"""
 		args = frappe._dict({
 			"doctype": "Stock Ledger Entry",
 			"item_code": row.item_code,
@@ -253,19 +250,19 @@
 
 		# append to entries
 		self.entries.append(args)
-		
+
 	def delete_and_repost_sle(self):
 		"""	Delete Stock Ledger Entries related to this voucher
 			and repost future Stock Ledger Entries"""
-				
-		existing_entries = frappe.db.sql("""select distinct item_code, warehouse 
-			from `tabStock Ledger Entry` where voucher_type=%s and voucher_no=%s""", 
+
+		existing_entries = frappe.db.sql("""select distinct item_code, warehouse
+			from `tabStock Ledger Entry` where voucher_type=%s and voucher_no=%s""",
 			(self.doctype, self.name), as_dict=1)
-				
+
 		# delete entries
-		frappe.db.sql("""delete from `tabStock Ledger Entry` 
+		frappe.db.sql("""delete from `tabStock Ledger Entry`
 			where voucher_type=%s and voucher_no=%s""", (self.doctype, self.name))
-		
+
 		# repost future entries for selected item_code, warehouse
 		for entries in existing_entries:
 			update_entries_after({
@@ -274,29 +271,26 @@
 				"posting_date": self.posting_date,
 				"posting_time": self.posting_time
 			})
-			
+
 	def get_gl_entries(self, warehouse_account=None):
 		if not self.cost_center:
 			msgprint(_("Please enter Cost Center"), raise_exception=1)
-			
-		return super(StockReconciliation, self).get_gl_entries(warehouse_account, 		
+
+		return super(StockReconciliation, self).get_gl_entries(warehouse_account,
 			self.expense_account, self.cost_center)
-		
+
 	def validate_expense_account(self):
 		if not cint(frappe.defaults.get_global_default("auto_accounting_for_stock")):
 			return
-			
+
 		if not self.expense_account:
 			msgprint(_("Please enter Expense Account"), raise_exception=1)
 		elif not frappe.db.sql("""select * from `tabStock Ledger Entry`"""):
-			if frappe.db.get_value("Account", self.expense_account, 
+			if frappe.db.get_value("Account", self.expense_account,
 					"report_type") == "Profit and Loss":
-				msgprint(_("""Expense Account can not be a PL Account, as this stock \
-					reconciliation is an opening entry. \
-					Please select 'Temporary Account (Liabilities)' or relevant account"""), 
-					raise_exception=1)
-		
+				frappe.throw(_("'Profit and Loss' type Account {0} used be set for Opening Entry").format(self.expense_account))
+
 @frappe.whitelist()
 def upload():
 	from frappe.utils.datautils import read_csv_content_from_uploaded_file
-	return read_csv_content_from_uploaded_file()
\ No newline at end of file
+	return read_csv_content_from_uploaded_file()
diff --git a/erpnext/stock/doctype/warehouse/warehouse.py b/erpnext/stock/doctype/warehouse/warehouse.py
index 9bb7109..dcb00f3 100644
--- a/erpnext/stock/doctype/warehouse/warehouse.py
+++ b/erpnext/stock/doctype/warehouse/warehouse.py
@@ -65,8 +65,7 @@
 			if parent_account:
 				self.create_account_under = parent_account
 			else:
-				frappe.throw(_("Please enter account group under which account \
-					for warehouse ") + self.name +_(" will be created"))
+				frappe.throw(_("Please enter parent account group for warehouse account"))
 
 	def on_trash(self):
 		# delete bin
@@ -75,8 +74,7 @@
 		for d in bins:
 			if d['actual_qty'] or d['reserved_qty'] or d['ordered_qty'] or \
 					d['indented_qty'] or d['projected_qty'] or d['planned_qty']:
-				throw("""Warehouse: %s can not be deleted as qty exists for item: %s"""
-					% (self.name, d['item_code']))
+				throw(_("Warehouse {0} can not be deleted as quantity exists for Item {1}").format(self.name, d['item_code']))
 			else:
 				frappe.db.sql("delete from `tabBin` where name = %s", d['name'])
 
@@ -87,8 +85,7 @@
 
 		if frappe.db.sql("""select name from `tabStock Ledger Entry`
 				where warehouse = %s""", self.name):
-			throw(_("""Warehouse can not be deleted as stock ledger entry
-				exists for this warehouse."""))
+			throw(_("Warehouse can not be deleted as stock ledger entry exists for this warehouse."))
 
 	def before_rename(self, olddn, newdn, merge=False):
 		# Add company abbr if not provided
diff --git a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
index afc08e8..fb051e3 100644
--- a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
+++ b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py
@@ -11,19 +11,19 @@
 from erpnext.stock.utils import get_valid_serial_nos
 
 class MaintenanceSchedule(TransactionBase):
-	
+
 	def get_item_details(self, item_code):
-		item = frappe.db.sql("""select item_name, description from `tabItem` 
+		item = frappe.db.sql("""select item_name, description from `tabItem`
 			where name=%s""", (item_code), as_dict=1)
 		ret = {
 			'item_name': item and item[0]['item_name'] or '',
 			'description' : item and item[0]['description'] or ''
 		}
 		return ret
-		
+
 	def generate_schedule(self):
 		self.set('maintenance_schedule_detail', [])
-		frappe.db.sql("""delete from `tabMaintenance Schedule Detail` 
+		frappe.db.sql("""delete from `tabMaintenance Schedule Detail`
 			where parent=%s""", (self.name))
 		count = 1
 		for d in self.get('item_maintenance_detail'):
@@ -41,7 +41,7 @@
 				count = count + 1
 				child.sales_person = d.sales_person
 				child.save(1)
-				
+
 		self.on_update()
 
 	def on_submit(self):
@@ -61,8 +61,8 @@
 				sp = frappe.get_doc("Sales Person", d.sales_person)
 				email_map[d.sales_person] = sp.get_email_id()
 
-			scheduled_date = frappe.db.sql("""select scheduled_date from 
-				`tabMaintenance Schedule Detail` where sales_person=%s and item_code=%s and 
+			scheduled_date = frappe.db.sql("""select scheduled_date from
+				`tabMaintenance Schedule Detail` where sales_person=%s and item_code=%s and
 				parent=%s""", (d.sales_person, d.item_code, self.name), as_dict=1)
 
 			for key in scheduled_date:
@@ -80,10 +80,10 @@
 						"ref_name": self.name
 					}).insert(ignore_permissions=1)
 
-		frappe.db.set(self, 'status', 'Submitted')		
+		frappe.db.set(self, 'status', 'Submitted')
 
 	def create_schedule_list(self, start_date, end_date, no_of_visit, sales_person):
-		schedule_list = []		
+		schedule_list = []
 		start_date_copy = start_date
 		date_diff = (getdate(end_date) - getdate(start_date)).days
 		add_by = date_diff / no_of_visit
@@ -92,7 +92,7 @@
 			if (getdate(start_date_copy) < getdate(end_date)):
 				start_date_copy = add_days(start_date_copy, add_by)
 				if len(schedule_list) < no_of_visit:
-					schedule_date = self.validate_schedule_date_for_holiday_list(getdate(start_date_copy), 
+					schedule_date = self.validate_schedule_date_for_holiday_list(getdate(start_date_copy),
 						sales_person)
 					if schedule_date > getdate(end_date):
 						schedule_date = getdate(end_date)
@@ -112,17 +112,17 @@
 
 		if fy_details and fy_details[0]:
 			# check holiday list in employee master
-			holiday_list = frappe.db.sql_list("""select h.holiday_date from `tabEmployee` emp, 
-				`tabSales Person` sp, `tabHoliday` h, `tabHoliday List` hl 
-				where sp.name=%s and emp.name=sp.employee 
-				and hl.name=emp.holiday_list and 
-				h.parent=hl.name and 
+			holiday_list = frappe.db.sql_list("""select h.holiday_date from `tabEmployee` emp,
+				`tabSales Person` sp, `tabHoliday` h, `tabHoliday List` hl
+				where sp.name=%s and emp.name=sp.employee
+				and hl.name=emp.holiday_list and
+				h.parent=hl.name and
 				hl.fiscal_year=%s""", (sales_person, fy_details[0]))
 			if not holiday_list:
 				# check global holiday list
-				holiday_list = frappe.db.sql("""select h.holiday_date from 
-					`tabHoliday` h, `tabHoliday List` hl 
-					where h.parent=hl.name and ifnull(hl.is_default, 0) = 1 
+				holiday_list = frappe.db.sql("""select h.holiday_date from
+					`tabHoliday` h, `tabHoliday List` hl
+					where h.parent=hl.name and ifnull(hl.is_default, 0) = 1
 					and hl.fiscal_year=%s""", fy_details[0])
 
 			if not validated and holiday_list:
@@ -140,14 +140,14 @@
 
 		period = (getdate(args['end_date']) - getdate(args['start_date'])).days + 1
 
-		if (args['periodicity'] == 'Yearly' or args['periodicity'] == 'Half Yearly' or 
+		if (args['periodicity'] == 'Yearly' or args['periodicity'] == 'Half Yearly' or
 			args['periodicity'] == 'Quarterly') and period < 365:
 			throw(cstr(args['periodicity']) + " periodicity can be set for period of atleast 1 year or more only")
 		elif args['periodicity'] == 'Monthly' and period < 30:
 			throw("Monthly periodicity can be set for period of atleast 1 month or more")
 		elif args['periodicity'] == 'Weekly' and period < 7:
 			throw("Weekly periodicity can be set for period of atleast 1 week or more")
-	
+
 	def get_no_of_visits(self, arg):
 		args = eval(arg)
 		self.validate_period(arg)
@@ -159,19 +159,19 @@
 		elif args['periodicity'] == 'Monthly':
 			count = period/30
 		elif args['periodicity'] == 'Quarterly':
-			count = period/91	 
+			count = period/91
 		elif args['periodicity'] == 'Half Yearly':
 			count = period/182
 		elif args['periodicity'] == 'Yearly':
 			count = period/365
-		
+
 		ret = {'no_of_visits' : count}
 		return ret
 
 	def validate_maintenance_detail(self):
 		if not self.get('item_maintenance_detail'):
 			throw(_("Please enter Maintaince Details first"))
-		
+
 		for d in self.get('item_maintenance_detail'):
 			if not d.item_code:
 				throw(_("Please select item code"))
@@ -181,23 +181,23 @@
 				throw(_("Please mention no of visits required"))
 			elif not d.sales_person:
 				throw(_("Please select Incharge Person's name"))
-			
+
 			if getdate(d.start_date) >= getdate(d.end_date):
 				throw(_("Start date should be less than end date for item") + " " + d.item_code)
-	
+
 	def validate_sales_order(self):
 		for d in self.get('item_maintenance_detail'):
 			if d.prevdoc_docname:
-				chk = frappe.db.sql("""select ms.name from `tabMaintenance Schedule` ms, 
-					`tabMaintenance Schedule Item` msi where msi.parent=ms.name and 
+				chk = frappe.db.sql("""select ms.name from `tabMaintenance Schedule` ms,
+					`tabMaintenance Schedule Item` msi where msi.parent=ms.name and
 					msi.prevdoc_docname=%s and ms.docstatus=1""", d.prevdoc_docname)
 				if chk:
 					throw("Maintenance Schedule against " + d.prevdoc_docname + " already exist")
-	
+
 	def validate(self):
 		self.validate_maintenance_detail()
 		self.validate_sales_order()
-	
+
 	def on_update(self):
 		frappe.db.set(self, 'status', 'Draft')
 
@@ -209,21 +209,20 @@
 
 	def validate_serial_no(self, serial_nos, amc_start_date):
 		for serial_no in serial_nos:
-			sr_details = frappe.db.get_value("Serial No", serial_no, 
+			sr_details = frappe.db.get_value("Serial No", serial_no,
 				["warranty_expiry_date", "amc_expiry_date", "status", "delivery_date"], as_dict=1)
-			
+
 			if sr_details.warranty_expiry_date and sr_details.warranty_expiry_date>=amc_start_date:
-				throw("""Serial No: %s is already under warranty upto %s. 
+				throw("""Serial No: %s is already under warranty upto %s.
 					Please check AMC Start Date.""" % (serial_no, sr_details.warranty_expiry_date))
-					
+
 			if sr_details.amc_expiry_date and sr_details.amc_expiry_date >= amc_start_date:
 				throw("""Serial No: %s is already under AMC upto %s.
 					Please check AMC Start Date.""" % (serial_no, sr_details.amc_expiry_date))
-					
+
 			if sr_details.status=="Delivered" and sr_details.delivery_date and \
 				sr_details.delivery_date >= amc_start_date:
-					throw(_("Maintenance start date can not be before \
-						delivery date for serial no: ") + serial_no)
+					throw(_("Maintenance start date can not be before delivery date for Serial No {0}").format(serial_no))
 
 	def validate_schedule(self):
 		item_lst1 =[]
@@ -231,26 +230,25 @@
 		for d in self.get('item_maintenance_detail'):
 			if d.item_code not in item_lst1:
 				item_lst1.append(d.item_code)
-		
+
 		for m in self.get('maintenance_schedule_detail'):
 			if m.item_code not in item_lst2:
 				item_lst2.append(m.item_code)
-		
+
 		if len(item_lst1) != len(item_lst2):
-			throw(_("Maintenance Schedule is not generated for all the items. \
-				Please click on 'Generate Schedule'"))
+			throw(_("Maintenance Schedule is not generated for all the items. Please click on 'Generate Schedule'"))
 		else:
 			for x in item_lst1:
 				if x not in item_lst2:
-					throw(_("Maintenance Schedule is not generated for item ") + x + 
+					throw(_("Maintenance Schedule is not generated for item ") + x +
 						_(". Please click on 'Generate Schedule'"))
-	
+
 	def check_serial_no_added(self):
 		serial_present =[]
 		for d in self.get('item_maintenance_detail'):
 			if d.serial_no:
 				serial_present.append(d.item_code)
-		
+
 		for m in self.get('maintenance_schedule_detail'):
 			if serial_present:
 				if m.item_code in serial_present and not m.serial_no:
@@ -270,13 +268,13 @@
 @frappe.whitelist()
 def make_maintenance_visit(source_name, target_doc=None):
 	from frappe.model.mapper import get_mapped_doc
-	
+
 	def update_status(source, target, parent):
 		target.maintenance_type = "Scheduled"
-	
+
 	doclist = get_mapped_doc("Maintenance Schedule", source_name, {
 		"Maintenance Schedule": {
-			"doctype": "Maintenance Visit", 
+			"doctype": "Maintenance Visit",
 			"field_map": {
 				"name": "maintenance_schedule"
 			},
@@ -284,15 +282,15 @@
 				"docstatus": ["=", 1]
 			},
 			"postprocess": update_status
-		}, 
+		},
 		"Maintenance Schedule Item": {
-			"doctype": "Maintenance Visit Purpose", 
+			"doctype": "Maintenance Visit Purpose",
 			"field_map": {
-				"parent": "prevdoc_docname", 
+				"parent": "prevdoc_docname",
 				"parenttype": "prevdoc_doctype",
 				"sales_person": "service_person"
 			}
 		}
 	}, target_doc)
 
-	return doclist
\ No newline at end of file
+	return doclist
