diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py
index 99d4f24..d8d3881 100644
--- a/erpnext/accounts/doctype/account/account.py
+++ b/erpnext/accounts/doctype/account/account.py
@@ -5,7 +5,7 @@
 import webnotes
 
 from webnotes.utils import flt, fmt_money, cstr, cint
-from webnotes import msgprint, _
+from webnotes import msgprint, throw, _
 
 get_value = webnotes.conn.get_value
 
@@ -43,7 +43,7 @@
 				msgprint(_("Please enter Master Name once the account is created."))
 			elif not webnotes.conn.exists(self.doc.master_type or self.doc.account_type, 
 					self.doc.master_name):
-				webnotes.throw(_("Invalid Master Name"))
+				throw(_("Invalid Master Name"))
 			
 	def validate_parent(self):
 		"""Fetch Parent Details and validation for account not to be created under ledger"""
@@ -51,14 +51,19 @@
 			par = webnotes.conn.sql("""select name, group_or_ledger, is_pl_account, debit_or_credit 
 				from tabAccount where name =%s""", self.doc.parent_account)
 			if not par:
-				msgprint("Parent account does not exists", raise_exception=1)
+				throw(_("Parent account does not exists"))
 			elif par[0][0] == self.doc.name:
-				msgprint("You can not assign itself as parent account", raise_exception=1)
+				throw(_("You can not assign itself as parent account"))
 			elif par[0][1] != 'Group':
-				msgprint("Parent account can not be a ledger", raise_exception=1)
+				throw(_("Parent account can not be a ledger"))
 			elif self.doc.debit_or_credit and par[0][3] != self.doc.debit_or_credit:
-				msgprint("You can not move a %s account under %s account" % 
-					(self.doc.debit_or_credit, par[0][3]), raise_exception=1)
+				throw("{msg} {debit_or_credit} {under} {account} {acc}".format(**{
+					"msg": _("You cannot move a"),
+					"debit_or_credit": self.doc.debit_or_credit,
+					"under": _("account under"),
+					"account": par[0][3],
+					"acc": _("account")
+				}))
 			
 			if not self.doc.is_pl_account:
 				self.doc.is_pl_account = par[0][2]
@@ -70,22 +75,25 @@
 		if webnotes.conn.sql("""select count(*) from tabAccount where
 			company=%s and ifnull(parent_account,'')='' and docstatus != 2""",
 			self.doc.company)[0][0] > 4:
-			webnotes.msgprint("One company cannot have more than 4 root Accounts",
-				raise_exception=1)
+			throw(_("One company cannot have more than 4 root Accounts"))
 	
 	def validate_duplicate_account(self):
 		if self.doc.fields.get('__islocal') or not self.doc.name:
 			company_abbr = webnotes.conn.get_value("Company", self.doc.company, "abbr")
 			if webnotes.conn.sql("""select name from tabAccount where name=%s""", 
 				(self.doc.account_name + " - " + company_abbr)):
-					msgprint("Account Name: %s already exists, please rename" 
-						% self.doc.account_name, raise_exception=1)
+					throw("{name}: {acc_name} {exist}, {rename}".format(**{
+						"name": _("Account Name"),
+						"acc_name": self.doc.account_name,
+						"exist": _("already exists"),
+						"rename": _("please rename")
+					}))
 				
 	def validate_root_details(self):
 		#does not exists parent
 		if webnotes.conn.exists("Account", self.doc.name):
 			if not webnotes.conn.get_value("Account", self.doc.name, "parent_account"):
-				webnotes.msgprint("Root cannot be edited.", raise_exception=1)
+				throw(_("Root cannot be edited."))
 				
 	def validate_frozen_accounts_modifier(self):
 		old_value = webnotes.conn.get_value("Account", self.doc.name, "freeze_account")
@@ -94,15 +102,18 @@
 				'frozen_accounts_modifier')
 			if not frozen_accounts_modifier or \
 				frozen_accounts_modifier not in webnotes.user.get_roles():
-					webnotes.throw(_("You are not authorized to set Frozen value"))
+					throw(_("You are not authorized to set Frozen value"))
 			
 	def convert_group_to_ledger(self):
 		if self.check_if_child_exists():
-			msgprint("Account: %s has existing child. You can not convert this account to ledger" % 
-				(self.doc.name), raise_exception=1)
+			throw("{acc}: {account_name} {child}. {msg}".format(**{
+				"acc": _("Account"),
+				"account_name": self.doc.name,
+				"child": _("has existing child"),
+				"msg": _("You can not convert this account to ledger")
+			}))
 		elif self.check_gle_exists():
-			msgprint("Account with existing transaction can not be converted to ledger.", 
-				raise_exception=1)
+			throw(_("Account with existing transaction can not be converted to ledger."))
 		else:
 			self.doc.group_or_ledger = 'Ledger'
 			self.doc.save()
@@ -110,11 +121,9 @@
 
 	def convert_ledger_to_group(self):
 		if self.check_gle_exists():
-			msgprint("Account with existing transaction can not be converted to group.", 
-				raise_exception=1)
+			throw(_("Account with existing transaction can not be converted to group."))
 		elif self.doc.master_type or self.doc.account_type:
-			msgprint("Cannot covert to Group because Master Type or Account Type is selected.", 
-				raise_exception=1)
+			throw(_("Cannot covert to Group because Master Type or Account Type is selected."))
 		else:
 			self.doc.group_or_ledger = 'Group'
 			self.doc.save()
@@ -130,9 +139,9 @@
 	
 	def validate_mandatory(self):
 		if not self.doc.debit_or_credit:
-			msgprint("Debit or Credit field is mandatory", raise_exception=1)
+			throw(_("Debit or Credit field is mandatory"))
 		if not self.doc.is_pl_account:
-			msgprint("Is PL Account field is mandatory", raise_exception=1)
+			throw(_("Is PL Account field is mandatory"))
 			
 	def validate_warehouse_account(self):
 		if not cint(webnotes.defaults.get_global_default("auto_accounting_for_stock")):
@@ -146,11 +155,11 @@
 				if self.doc.master_name:
 					self.validate_warehouse(self.doc.master_name)
 				else:
-					webnotes.throw(_("Master Name is mandatory if account type is Warehouse"))
+					throw(_("Master Name is mandatory if account type is Warehouse"))
 		
 	def validate_warehouse(self, warehouse):
 		if webnotes.conn.get_value("Stock Ledger Entry", {"warehouse": warehouse}):
-			webnotes.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):
@@ -183,22 +192,21 @@
 		# 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():
-			msgprint("""Total Outstanding amount (%s) for <b>%s</b> can not be \
+			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.doc.name, fmt_money(credit_limit), credit_limit_from), raise_exception=1)
+				self.doc.name, fmt_money(credit_limit), credit_limit_from))
 			
 	def validate_trash(self):
 		"""checks gl entries and if child exists"""
 		if not self.doc.parent_account:
-			msgprint("Root account can not be deleted", raise_exception=1)
+			throw(_("Root account can not be deleted"))
 			
 		if self.check_gle_exists():
-			msgprint("""Account with existing transaction (Sales Invoice / Purchase Invoice / \
-				Journal Voucher) can not be deleted""", raise_exception=1)
+			throw("""Account with existing transaction (Sales Invoice / Purchase Invoice / \
+				Journal Voucher) can not be deleted""")
 		if self.check_if_child_exists():
-			msgprint("Child account exists for this account. You can not delete this account.",
-			 	raise_exception=1)
+			throw(_("Child account exists for this account. You can not delete this account."))
 
 	def on_trash(self): 
 		self.validate_trash()
@@ -212,13 +220,13 @@
 		# Validate properties before merging
 		if merge:
 			if not webnotes.conn.exists("Account", new):
-				webnotes.throw(_("Account ") + new +_(" does not exists"))
+				throw(_("Account ") + new +_(" does not exists"))
 				
 			val = list(webnotes.conn.get_value("Account", new_account, 
 				["group_or_ledger", "debit_or_credit", "is_pl_account"]))
 			
 			if val != [self.doc.group_or_ledger, self.doc.debit_or_credit, self.doc.is_pl_account]:
-				webnotes.throw(_("""Merging is only possible if following \
+				throw(_("""Merging is only possible if following \
 					properties are same in both records.
 					Group or Ledger, Debit or Credit, Is PL Account"""))
 					
diff --git a/erpnext/accounts/doctype/cost_center/cost_center.js b/erpnext/accounts/doctype/cost_center/cost_center.js
index fbab418..a18efaa 100644
--- a/erpnext/accounts/doctype/cost_center/cost_center.js
+++ b/erpnext/accounts/doctype/cost_center/cost_center.js
@@ -54,9 +54,9 @@
 		function() { wn.set_route("Accounts Browser", "Cost Center"); }, 'icon-sitemap')
 }
 
-cur_frm.cscript.parent_cost_center = function(doc,cdt,cdn){
+cur_frm.cscript.parent_cost_center = function(doc, cdt, cdn) {
 	if(!doc.company){
-		alert(wn._('Please enter company name first'));
+		msgprint(wn._('Please enter company name first'));
 	}
 }
 
diff --git a/erpnext/accounts/doctype/pos_setting/pos_setting.txt b/erpnext/accounts/doctype/pos_setting/pos_setting.txt
index 1c9e0bf..c00e75e 100755
--- a/erpnext/accounts/doctype/pos_setting/pos_setting.txt
+++ b/erpnext/accounts/doctype/pos_setting/pos_setting.txt
@@ -2,7 +2,7 @@
  {
   "creation": "2013-05-24 12:15:51", 
   "docstatus": 0, 
-  "modified": "2014-01-15 16:23:58", 
+  "modified": "2014-01-29 13:08:24", 
   "modified_by": "Administrator", 
   "owner": "Administrator"
  }, 
@@ -22,6 +22,8 @@
   "permlevel": 0
  }, 
  {
+  "cancel": 0, 
+  "delete": 0, 
   "doctype": "DocPerm", 
   "email": 1, 
   "name": "__common__", 
@@ -191,9 +193,9 @@
  }, 
  {
   "doctype": "DocField", 
-  "fieldname": "charge", 
+  "fieldname": "taxes_and_charges", 
   "fieldtype": "Link", 
-  "label": "Charge", 
+  "label": "Taxes and Charges", 
   "oldfieldname": "charge", 
   "oldfieldtype": "Link", 
   "options": "Sales Taxes and Charges Master", 
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
index dda6219..bc99228 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
@@ -3,7 +3,7 @@
 
 cur_frm.cscript.tname = "Purchase Invoice Item";
 cur_frm.cscript.fname = "entries";
-cur_frm.cscript.other_fname = "purchase_tax_details";
+cur_frm.cscript.other_fname = "other_charges";
 
 wn.provide("erpnext.accounts");
 {% include 'buying/doctype/purchase_common/purchase_common.js' %};
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index db42a12..db44831 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -325,7 +325,7 @@
 	
 		# tax table gl entries
 		valuation_tax = {}
-		for tax in self.doclist.get({"parentfield": "purchase_tax_details"}):
+		for tax in self.doclist.get({"parentfield": "other_charges"}):
 			if tax.category in ("Total", "Valuation and Total") and flt(tax.tax_amount):
 				gl_entries.append(
 					self.get_gl_dict({
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.txt b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.txt
index 45f7e90..d0eb1b3 100755
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.txt
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.txt
@@ -2,7 +2,7 @@
  {
   "creation": "2013-05-21 16:16:39", 
   "docstatus": 0, 
-  "modified": "2014-01-28 18:46:48", 
+  "modified": "2014-01-29 15:26:54", 
   "modified_by": "Administrator", 
   "owner": "Administrator"
  }, 
@@ -342,7 +342,7 @@
  }, 
  {
   "doctype": "DocField", 
-  "fieldname": "purchase_tax_details", 
+  "fieldname": "other_charges", 
   "fieldtype": "Table", 
   "label": "Purchase Taxes and Charges", 
   "oldfieldname": "purchase_tax_details", 
@@ -352,9 +352,9 @@
  }, 
  {
   "doctype": "DocField", 
-  "fieldname": "tax_calculation", 
+  "fieldname": "other_charges_calculation", 
   "fieldtype": "HTML", 
-  "label": "Tax Calculation", 
+  "label": "Taxes and Charges Calculation", 
   "oldfieldtype": "HTML", 
   "print_hide": 1, 
   "read_only": 0
diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
index 8a8b4a7..e276219 100644
--- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
@@ -130,7 +130,7 @@
 			["_Test Account Discount - _TC", 168.03, 1512.30],
 		]
 		
-		for i, tax in enumerate(wrapper.doclist.get({"parentfield": "purchase_tax_details"})):
+		for i, tax in enumerate(wrapper.doclist.get({"parentfield": "other_charges"})):
 			self.assertEqual(tax.account_head, expected_values[i][0])
 			self.assertEqual(tax.tax_amount, expected_values[i][1])
 			self.assertEqual(tax.total, expected_values[i][2])
@@ -165,7 +165,7 @@
 			["_Test Account Discount - _TC", 168.03, 1512.30],
 		]
 
-		for i, tax in enumerate(wrapper.doclist.get({"parentfield": "purchase_tax_details"})):
+		for i, tax in enumerate(wrapper.doclist.get({"parentfield": "other_charges"})):
 			self.assertEqual(tax.account_head, expected_values[i][0])
 			self.assertEqual(tax.tax_amount, expected_values[i][1])
 			self.assertEqual(tax.total, expected_values[i][2])
@@ -258,7 +258,7 @@
 		# taxes
 		{
 			"doctype": "Purchase Taxes and Charges",
-			"parentfield": "purchase_tax_details",
+			"parentfield": "other_charges",
 			"charge_type": "Actual",
 			"account_head": "_Test Account Shipping Charges - _TC",
 			"cost_center": "_Test Cost Center - _TC",
@@ -269,7 +269,7 @@
 		},
 		{
 			"doctype": "Purchase Taxes and Charges",
-			"parentfield": "purchase_tax_details",
+			"parentfield": "other_charges",
 			"charge_type": "On Net Total",
 			"account_head": "_Test Account Customs Duty - _TC",
 			"cost_center": "_Test Cost Center - _TC",
@@ -280,7 +280,7 @@
 		},
 		{
 			"doctype": "Purchase Taxes and Charges",
-			"parentfield": "purchase_tax_details",
+			"parentfield": "other_charges",
 			"charge_type": "On Net Total",
 			"account_head": "_Test Account Excise Duty - _TC",
 			"cost_center": "_Test Cost Center - _TC",
@@ -291,7 +291,7 @@
 		},
 		{
 			"doctype": "Purchase Taxes and Charges",
-			"parentfield": "purchase_tax_details",
+			"parentfield": "other_charges",
 			"charge_type": "On Previous Row Amount",
 			"account_head": "_Test Account Education Cess - _TC",
 			"cost_center": "_Test Cost Center - _TC",
@@ -303,7 +303,7 @@
 		},
 		{
 			"doctype": "Purchase Taxes and Charges",
-			"parentfield": "purchase_tax_details",
+			"parentfield": "other_charges",
 			"charge_type": "On Previous Row Amount",
 			"account_head": "_Test Account S&H Education Cess - _TC",
 			"cost_center": "_Test Cost Center - _TC",
@@ -315,7 +315,7 @@
 		},
 		{
 			"doctype": "Purchase Taxes and Charges",
-			"parentfield": "purchase_tax_details",
+			"parentfield": "other_charges",
 			"charge_type": "On Previous Row Total",
 			"account_head": "_Test Account CST - _TC",
 			"cost_center": "_Test Cost Center - _TC",
@@ -327,7 +327,7 @@
 		},
 		{
 			"doctype": "Purchase Taxes and Charges",
-			"parentfield": "purchase_tax_details",
+			"parentfield": "other_charges",
 			"charge_type": "On Net Total",
 			"account_head": "_Test Account VAT - _TC",
 			"cost_center": "_Test Cost Center - _TC",
@@ -338,7 +338,7 @@
 		},
 		{
 			"doctype": "Purchase Taxes and Charges",
-			"parentfield": "purchase_tax_details",
+			"parentfield": "other_charges",
 			"charge_type": "On Previous Row Total",
 			"account_head": "_Test Account Discount - _TC",
 			"cost_center": "_Test Cost Center - _TC",
@@ -380,7 +380,7 @@
 		# taxes
 		{
 			"doctype": "Purchase Taxes and Charges",
-			"parentfield": "purchase_tax_details",
+			"parentfield": "other_charges",
 			"charge_type": "Actual",
 			"account_head": "_Test Account Shipping Charges - _TC",
 			"cost_center": "_Test Cost Center - _TC",
@@ -391,7 +391,7 @@
 		},
 		{
 			"doctype": "Purchase Taxes and Charges",
-			"parentfield": "purchase_tax_details",
+			"parentfield": "other_charges",
 			"charge_type": "Actual",
 			"account_head": "_Test Account VAT - _TC",
 			"cost_center": "_Test Cost Center - _TC",
@@ -402,7 +402,7 @@
 		},
 		{
 			"doctype": "Purchase Taxes and Charges",
-			"parentfield": "purchase_tax_details",
+			"parentfield": "other_charges",
 			"charge_type": "Actual",
 			"account_head": "_Test Account Customs Duty - _TC",
 			"cost_center": "_Test Cost Center - _TC",
diff --git a/erpnext/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js b/erpnext/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js
index b589651..933382e 100644
--- a/erpnext/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js
+++ b/erpnext/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js
@@ -1,17 +1,10 @@
 // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-// 
-
-//--------- ONLOAD -------------
 {% include "public/js/controllers/accounts.js" %}
 
-cur_frm.cscript.onload = function(doc, cdt, cdn) {
-   
-}
-
 cur_frm.cscript.refresh = function(doc, cdt, cdn) {
-   cur_frm.set_footnote(wn.markdown(cur_frm.meta.description));
+	cur_frm.set_footnote(wn.markdown(cur_frm.meta.description));
 }
 
 // For customizing print
@@ -27,120 +20,123 @@
 	return '';
 }
 
-cur_frm.pformat.purchase_tax_details= function(doc){
- 
-  //function to make row of table
-  var make_row = function(title,val,bold){
-    var bstart = '<b>'; var bend = '</b>';
-    return '<tr><td style="width:50%;">'+(bold?bstart:'')+title+(bold?bend:'')+'</td>'
-     +'<td style="width:25%;text-align:right;"></td>'
-     +'<td style="width:25%;text-align:right;">'+format_currency(val, doc.currency)+'</td>'
-     +'</tr>'
-  }
+cur_frm.pformat.other_charges= function(doc) {
 
-  function convert_rate(val){
-    var new_val = flt(val)/flt(doc.conversion_rate);
-    return new_val;
-  }
-  
-  function print_hide(fieldname) {
-	var doc_field = wn.meta.get_docfield(doc.doctype, fieldname, doc.name);
-	return doc_field.print_hide;
-  }
-
-  var cl = getchildren('Purchase Taxes and Charges',doc.name,'purchase_tax_details');
-
-  // outer table  
-  var out='<div><table class="noborder" style="width:100%">\
-		<tr><td style="width: 60%"></td><td>';
-  
-  // main table
-  out +='<table class="noborder" style="width:100%">';
-  if(!print_hide('net_total_import')) {
-	out += make_row('Net Total', doc.net_total_import, 1);
-  }
-  
-  // add rows
-  if(cl.length){
-    for(var i=0;i<cl.length;i++){
-      out += make_row(cl[i].description,convert_rate(cl[i].tax_amount),0);
-    }
-  }
-	// grand total
-	if(!print_hide('grand_total_import')) {
-		out += make_row('Grand Total', doc.grand_total_import, 1);
+	//function to make row of table
+	var make_row = function(title, val, bold) {
+		var bstart = '<b>'; var bend = '</b>';
+		return '<tr><td style="width:50%;">' + (bold?bstart:'') + title + (bold?bend:'') + '</td>'
+			+ '<td style="width:25%;text-align:right;"></td>'
+			+ '<td style="width:25%;text-align:right;">' + format_currency(val, doc.currency) + '</td>'
+			+ '</tr>';
 	}
-  if(doc.in_words_import && !print_hide('in_words_import')){
-    out +='</table></td></tr>';
-    out += '<tr><td colspan = "2">';
-    out += '<table><tr><td style="width:25%;"><b>In Words</b></td>';
-    out+= '<td style="width:50%;">'+doc.in_words_import+'</td></tr>';
-  }
-  out +='</table></td></tr></table></div>';   
-  return out;
+
+	function convert_rate(val) {
+		var new_val = flt(val)/flt(doc.conversion_rate);
+		return new_val;
+	}
+
+	function print_hide(fieldname) {
+		var doc_field = wn.meta.get_docfield(doc.doctype, fieldname, doc.name);
+		return doc_field.print_hide;
+	}
+
+	var cl = getchildren('Purchase Taxes and Charges', doc.name, 'other_charges');
+
+	// outer table
+	var out='<div><table class="noborder" style="width:100%">\
+	<tr><td style="width: 60%"></td><td>';
+
+	// main table
+	out +='<table class="noborder" style="width:100%">';
+	if(!print_hide('net_total_import'))
+		out += make_row('Net Total', doc.net_total_import, 1);
+
+	// add rows
+	if(cl.length){
+		for(var i=0; i<cl.length; i++) {
+			out += make_row(cl[i].description, convert_rate(cl[i].tax_amount), 0);
+		}
+	}
+
+	// grand total
+	if(!print_hide('grand_total_import'))
+		out += make_row('Grand Total', doc.grand_total_import, 1);
+
+	if(doc.in_words_import && !print_hide('in_words_import')) {
+		out += '</table></td></tr>';
+		out += '<tr><td colspan = "2">';
+		out += '<table><tr><td style="width:25%;"><b>In Words</b></td>';
+		out += '<td style="width:50%;">' + doc.in_words_import + '</td></tr>';
+	}
+
+	out +='</table></td></tr></table></div>';
+	return out;
 }
 
 cur_frm.cscript.add_deduct_tax = function(doc, cdt, cdn) {
-  var d = locals[cdt][cdn];
-  if(!d.category && d.add_deduct_tax){
-    alert(wn._("Please select Category first"));
-    d.add_deduct_tax = '';
-  }
-  else if(d.category != 'Total' && d.add_deduct_tax == 'Deduct') {
-	console.log([d.category, d.add_deduct_tax]);
-    msgprint(wn._("You cannot deduct when category is for 'Valuation' or 'Valuation and Total'"));
-    d.add_deduct_tax = '';
-  }
+	var d = locals[cdt][cdn];
 
+	if(!d.category && d.add_deduct_tax) {
+		msgprint(wn._("Please select Category first"));
+		d.add_deduct_tax = '';
+	}
+	else if(d.category != 'Total' && d.add_deduct_tax == 'Deduct') {
+		msgprint(wn._("You cannot deduct when category is for 'Valuation' or 'Valuation and Total'"));
+		d.add_deduct_tax = '';
+	}
 }
 
 cur_frm.cscript.charge_type = function(doc, cdt, cdn) {
-  var d = locals[cdt][cdn];
-  if(!d.category && d.charge_type){
-    alert(wn._("Please select Category first"));
-    d.charge_type = '';
-  }  
-  else if(d.idx == 1 && (d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total')){
-    alert(wn._("You cannot select Charge Type as 'On Previous Row Amount' or 'On Previous Row Total' for first row"));
-    d.charge_type = '';
-  }
-  else if((d.category == 'Valuation' || d.category == 'Valuation and Total') && (d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total')){
-    alert(wn._("You cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for valuation. You can select only 'Total' option for previous row amount or previous row total"))
-    d.charge_type = '';
-  }
-  validated = false;
-  refresh_field('charge_type',d.name,'purchase_tax_details');
+	var d = locals[cdt][cdn];
 
-  cur_frm.cscript.row_id(doc, cdt, cdn);
-  cur_frm.cscript.rate(doc, cdt, cdn);
-  cur_frm.cscript.tax_amount(doc, cdt, cdn);
+	if(!d.category && d.charge_type) {
+		msgprint(wn._("Please select Category first"));
+		d.charge_type = '';
+	}
+	else if(d.idx == 1 && (d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total')) {
+		msgprint(wn._("You cannot select Charge Type as 'On Previous Row Amount' or 'On Previous Row Total' for first row"));
+		d.charge_type = '';
+	}
+	else if((d.category == 'Valuation' || d.category == 'Valuation and Total') && (d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total')) {
+		msgprint(wn._("You cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for valuation. You can select only 'Total' option for previous row amount or previous row total"));
+		d.charge_type = '';
+	}
+
+	validated = false;
+	refresh_field('charge_type', d.name, 'other_charges');
+
+	cur_frm.cscript.row_id(doc, cdt, cdn);
+	cur_frm.cscript.rate(doc, cdt, cdn);
+	cur_frm.cscript.tax_amount(doc, cdt, cdn);
 }
 
 
 cur_frm.cscript.row_id = function(doc, cdt, cdn) {
-  var d = locals[cdt][cdn];
-  if(!d.charge_type && d.row_id){
-    alert(wn._("Please select Charge Type first"));
-    d.row_id = '';
-  }
-  else if((d.charge_type == 'Actual' || d.charge_type == 'On Net Total') && d.row_id) {
-    alert(wn._("You can Enter Row only if your Charge Type is 'On Previous Row Amount' or ' Previous Row Total'"));
-    d.row_id = '';
-  }
-  else if((d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total') && d.row_id){
-    if(d.row_id >= d.idx){
-      alert(wn._("You cannot Enter Row no. greater than or equal to current row no. for this Charge type"));
-      d.row_id = '';
-    }
-  }
-  validated = false;
-  refresh_field('row_id',d.name,'purchase_tax_details');
+	var d = locals[cdt][cdn];
+
+	if(!d.charge_type && d.row_id) {
+		msgprint(wn._("Please select Charge Type first"));
+		d.row_id = '';
+	}
+	else if((d.charge_type == 'Actual' || d.charge_type == 'On Net Total') && d.row_id) {
+		msgprint(wn._("You can Enter Row only if your Charge Type is 'On Previous Row Amount' or ' Previous Row Total'"));
+		d.row_id = '';
+	}
+	else if((d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total') && d.row_id) {
+		if(d.row_id >= d.idx){
+			msgprint(wn._("You cannot Enter Row no. greater than or equal to current row no. for this Charge type"));
+			d.row_id = '';
+		}
+	}
+	validated = false;
+	refresh_field('row_id', d.name, 'other_charges');
 }
 
-cur_frm.set_query("account_head", "purchase_tax_details", function(doc) {
+cur_frm.set_query("account_head", "other_charges", function(doc) {
 	return {
 		query: "erpnext.controllers.queries.tax_account_query",
-    	filters: {
+		filters: {
 			"account_type": ["Tax", "Chargeable", "Expense Account"],
 			"debit_or_credit": "Debit",
 			"company": doc.company
@@ -148,35 +144,38 @@
 	}
 });
 
-cur_frm.fields_dict['purchase_tax_details'].grid.get_field("cost_center").get_query = function(doc) {
-  return {
-    filters: {
-      'company': doc.company,
-      'group_or_ledger': "Ledger"
-    }
-  }
+cur_frm.fields_dict['other_charges'].grid.get_field("cost_center").get_query = function(doc) {
+	return {
+		filters: {
+			'company': doc.company,
+			'group_or_ledger': "Ledger"
+		}
+	}
 }
 
 cur_frm.cscript.rate = function(doc, cdt, cdn) {
-  var d = locals[cdt][cdn];
-  if(!d.charge_type && d.rate) {
-    alert(wn._("Please select Charge Type first"));
-    d.rate = '';
-  }
-  validated = false;
-  refresh_field('rate',d.name,'purchase_tax_details');
+	var d = locals[cdt][cdn];
+
+	if(!d.charge_type && d.rate) {
+		msgprint(wn._("Please select Charge Type first"));
+		d.rate = '';
+	}
+	validated = false;
+	refresh_field('rate', d.name, 'other_charges');
 }
 
 cur_frm.cscript.tax_amount = function(doc, cdt, cdn) {
-  var d = locals[cdt][cdn];
-  if(!d.charge_type && d.tax_amount){
-    alert(wn._("Please select Charge Type first"));
-    d.tax_amount = '';
-  }
-  else if(d.charge_type && d.tax_amount) {
-    alert(wn._("You cannot directly enter Amount and if your Charge Type is Actual enter your amount in Rate"));
-    d.tax_amount = '';
-  }
-  validated = false;
-  refresh_field('tax_amount',d.name,'purchase_tax_details');
-}
+	var d = locals[cdt][cdn];
+
+	if(!d.charge_type && d.tax_amount) {
+		msgprint(wn._("Please select Charge Type first"));
+		d.tax_amount = '';
+	}
+	else if(d.charge_type && d.tax_amount) {
+		msgprint(wn._("You cannot directly enter Amount and if your Charge Type is Actual enter your amount in Rate"));
+		d.tax_amount = '';
+	}
+
+	validated = false;
+	refresh_field('tax_amount', d.name, 'other_charges');
+}
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.txt b/erpnext/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.txt
index bdaf00c..adb5f5a 100644
--- a/erpnext/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.txt
+++ b/erpnext/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.txt
@@ -2,7 +2,7 @@
  {
   "creation": "2013-01-10 16:34:08", 
   "docstatus": 0, 
-  "modified": "2014-01-20 17:49:14", 
+  "modified": "2014-01-29 12:26:38", 
   "modified_by": "Administrator", 
   "owner": "wasim@webnotestech.com"
  }, 
@@ -70,7 +70,7 @@
  }, 
  {
   "doctype": "DocField", 
-  "fieldname": "purchase_tax_details", 
+  "fieldname": "other_charges", 
   "fieldtype": "Table", 
   "label": "Purchase Taxes and Charges", 
   "oldfieldname": "purchase_tax_details", 
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 5c092cf..cfa1aa7 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -194,7 +194,7 @@
 				self.doc.customer = pos.customer
 				self.set_customer_defaults()
 
-			for fieldname in ('territory', 'naming_series', 'currency', 'charge', 'letter_head', 'tc_name',
+			for fieldname in ('territory', 'naming_series', 'currency', 'taxes_and_charges', 'letter_head', 'tc_name',
 				'selling_price_list', 'company', 'select_print_heading', 'cash_bank_account'):
 					if (not for_validate) or (for_validate and not self.doc.fields.get(fieldname)):
 						self.doc.fields[fieldname] = pos.get(fieldname)
@@ -214,7 +214,7 @@
 				self.doc.terms = webnotes.conn.get_value("Terms and Conditions", self.doc.tc_name, "terms")
 			
 			# fetch charges
-			if self.doc.charge and not len(self.doclist.get({"parentfield": "other_charges"})):
+			if self.doc.taxes_and_charges and not len(self.doclist.get({"parentfield": "other_charges"})):
 				self.set_taxes("other_charges", "taxes_and_charges")
 
 	def get_customer_account(self):
diff --git a/erpnext/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js b/erpnext/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js
index 0e9b3db..6234563 100644
--- a/erpnext/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js
+++ b/erpnext/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-//--------- ONLOAD -------------
-
 {% include "public/js/controllers/accounts.js" %}
 
 cur_frm.cscript.onload = function(doc, cdt, cdn) {
@@ -11,7 +9,7 @@
 }
 
 cur_frm.cscript.refresh = function(doc, cdt, cdn) {
-	 cur_frm.set_footnote(wn.markdown(cur_frm.meta.description));
+	cur_frm.set_footnote(wn.markdown(cur_frm.meta.description));
 }
 
 // For customizing print
@@ -40,11 +38,11 @@
 	var make_row = function(title, val, bold){
 		var bstart = '<b>'; var bend = '</b>';
 		return '<tr><td style="width:50%;">' + (bold?bstart:'') + title + (bold?bend:'') + '</td>'
-		 +'<td style="width:50%;text-align:right;">' + format_currency(val, doc.currency) + '</td>'
-		 +'</tr>'
+			+ '<td style="width:50%;text-align:right;">' + format_currency(val, doc.currency) + '</td>'
+			+ '</tr>';
 	}
 
-	function convert_rate(val){
+	function convert_rate(val) {
 		var new_val = flt(val)/flt(doc.conversion_rate);
 		return new_val;
 	}
@@ -71,31 +69,28 @@
 
 		// add rows
 		if(cl.length){
-			for(var i=0;i<cl.length;i++){
+			for(var i=0;i<cl.length;i++) {
 				if(convert_rate(cl[i].tax_amount)!=0 && !cl[i].included_in_print_rate)
 					out += make_row(cl[i].description, convert_rate(cl[i].tax_amount), 0);
 			}
 		}
 
 		// Discount Amount
-		if(!print_hide('discount_amount') && doc.discount_amount) {
+		if(!print_hide('discount_amount') && doc.discount_amount)
 			out += make_row('Discount Amount', convert_rate(doc.discount_amount), 0);
-		}
 
 		// grand total
-		if(!print_hide('grand_total_export')) {
+		if(!print_hide('grand_total_export'))
 			out += make_row('Grand Total', doc.grand_total_export, 1);
-		}
 		
-		if(!print_hide('rounded_total_export')) {
+		if(!print_hide('rounded_total_export'))
 			out += make_row('Rounded Total', doc.rounded_total_export, 1);
-		}
 
-		if(doc.in_words_export && !print_hide('in_words_export')){
+		if(doc.in_words_export && !print_hide('in_words_export')) {
 			out +='</table></td></tr>';
 			out += '<tr><td colspan = "2">';
-			out += '<table><tr><td style="width:25%;"><b>In Words</b></td>'
-			out += '<td style="width:50%;">' + doc.in_words_export + '</td></tr>'
+			out += '<table><tr><td style="width:25%;"><b>In Words</b></td>';
+			out += '<td style="width:50%;">' + doc.in_words_export + '</td></tr>';
 		}
 		out += '</table></td></tr></table></div>';	 
 	}
@@ -104,8 +99,8 @@
 
 cur_frm.cscript.charge_type = function(doc, cdt, cdn) {
 	var d = locals[cdt][cdn];
-	if(d.idx == 1 && (d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total')){
-		alert(wn._("You cannot select Charge Type as 'On Previous Row Amount' or 'On Previous Row Total' for first row"));
+	if(d.idx == 1 && (d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total')) {
+		msgprint(wn._("You cannot select Charge Type as 'On Previous Row Amount' or 'On Previous Row Total' for first row"));
 		d.charge_type = '';
 	}
 	validated = false;
@@ -117,17 +112,17 @@
 
 cur_frm.cscript.row_id = function(doc, cdt, cdn) {
 	var d = locals[cdt][cdn];
-	if(!d.charge_type && d.row_id){
-		alert(wn._("Please select Charge Type first"));
+	if(!d.charge_type && d.row_id) {
+		msgprint(wn._("Please select Charge Type first"));
 		d.row_id = '';
 	}
 	else if((d.charge_type == 'Actual' || d.charge_type == 'On Net Total') && d.row_id) {
-		alert(wn._("You can Enter Row only if your Charge Type is 'On Previous Row Amount' or ' Previous Row Total'"));
+		msgprint(wn._("You can Enter Row only if your Charge Type is 'On Previous Row Amount' or ' Previous Row Total'"));
 		d.row_id = '';
 	}
-	else if((d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total') && d.row_id){
+	else if((d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total') && d.row_id) {
 		if(d.row_id >= d.idx){
-			alert(wn._("You cannot Enter Row no. greater than or equal to current row no. for this Charge type"));
+			msgprint(wn._("You cannot Enter Row no. greater than or equal to current row no. for this Charge type"));
 			d.row_id = '';
 		}
 	}
@@ -158,7 +153,7 @@
 cur_frm.cscript.rate = function(doc, cdt, cdn) {
 	var d = locals[cdt][cdn];
 	if(!d.charge_type && d.rate) {
-		alert(wn._("Please select Charge Type first"));
+		msgprint(wn._("Please select Charge Type first"));
 		d.rate = '';
 	}
 	validated = false;
@@ -167,12 +162,12 @@
 
 cur_frm.cscript.tax_amount = function(doc, cdt, cdn) {
 	var d = locals[cdt][cdn];
-	if(!d.charge_type && d.tax_amount){
-		alert(wn._("Please select Charge Type first"));
+	if(!d.charge_type && d.tax_amount) {
+		msgprint(wn._("Please select Charge Type first"));
 		d.tax_amount = '';
 	}
 	else if(d.charge_type && d.tax_amount) {
-		alert(wn._("You cannot directly enter Amount and if your Charge Type is Actual enter your amount in Rate"));
+		msgprint(wn._("You cannot directly enter Amount and if your Charge Type is Actual enter your amount in Rate"));
 		d.tax_amount = '';
 	}
 	validated = false;
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index d9cb516..941c2ae 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -6,7 +6,7 @@
 import webnotes
 from webnotes.utils import nowdate, cstr, flt, now, getdate, add_months
 from webnotes.model.doc import addchild
-from webnotes import msgprint, _
+from webnotes import msgprint, throw, _
 from webnotes.utils import formatdate
 from erpnext.utilities import build_filter_conditions
 
@@ -41,12 +41,12 @@
 def validate_fiscal_year(date, fiscal_year, label="Date"):
 	years = [f[0] for f in get_fiscal_years(date, label=label)]
 	if fiscal_year not in years:
-		webnotes.msgprint(("%(label)s '%(posting_date)s': " + _("not within Fiscal Year") + \
+		throw(("%(label)s '%(posting_date)s': " + _("not within Fiscal Year") + \
 			": '%(fiscal_year)s'") % {
 				"label": label,
 				"posting_date": formatdate(date),
 				"fiscal_year": fiscal_year
-			}, raise_exception=1)
+			})
 
 @webnotes.whitelist()
 def get_balance_on(account=None, date=None):
@@ -169,8 +169,7 @@
 		and t1.docstatus=1 and t2.%(dr_or_cr)s = %(unadjusted_amt)s""" % args)
 	
 	if not ret:
-		msgprint(_("""Payment Entry has been modified after you pulled it. 
-			Please pull it again."""), raise_exception=1)
+		throw(_("""Payment Entry has been modified after you pulled it. Please pull it again."""))
 
 def update_against_doc(d, jv_obj):
 	"""
@@ -247,9 +246,9 @@
 	value = webnotes.conn.get_value("Company", company, fieldname)
 	
 	if not value:
-		msgprint(_("Please mention default value for '") + 
+		throw(_("Please mention default value for '") + 
 			_(webnotes.get_doctype("company").get_label(fieldname) + 
-			_("' in Company: ") + company), raise_exception=True)
+			_("' in Company: ") + company))
 			
 	return value
 
@@ -318,11 +317,11 @@
 				if action_for:
 					actual_expense = get_actual_expense(args)
 					if actual_expense > budget_amount:
-						webnotes.msgprint(action_for + _(" budget ") + cstr(budget_amount) + 
+						throw(action_for + _(" budget ") + cstr(budget_amount) + 
 							_(" for account ") + args.account + _(" against cost center ") + 
 							args.cost_center + _(" will exceed by ") + 
 							cstr(actual_expense - budget_amount) + _(" after this transaction.")
-							, raise_exception=BudgetError if action=="Stop" else False)
+							, exc=BudgetError if action=="Stop" else False)
 					
 def get_allocated_budget(distribution_id, posting_date, fiscal_year, yearly_budget):
 	if distribution_id:
diff --git a/erpnext/buying/Print Format/Purchase Order Classic/Purchase Order Classic.txt b/erpnext/buying/Print Format/Purchase Order Classic/Purchase Order Classic.txt
index ff8448f..f1514c9 100644
--- a/erpnext/buying/Print Format/Purchase Order Classic/Purchase Order Classic.txt
+++ b/erpnext/buying/Print Format/Purchase Order Classic/Purchase Order Classic.txt
@@ -9,7 +9,7 @@
  {
   "doc_type": "Purchase Order", 
   "doctype": "Print Format", 
-  "html": "<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: \"Georgia\", serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t}\n\n\t.common {\n\t\tfont-family: \"Georgia\", serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 10px 0px;\n\t}\n\n\ttable {\n\t\tborder-collapse: collapse;\n\t\twidth: 100%;\n\t\tvertical-align: top;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table thead {\n\t\tborder-bottom: 1px solid black;\n\t}\n\n\ttable.header-table h3 {\n\t\tcolor: gray;\n\t}\n\n\ttable.header-table thead td {\n\t\tpadding: 5px 0px;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t'Purchase Order',\n\t\t\t\tdoc.name,\n\t\t\t\t'po_details',\n\t\t\t\t'Purchase Order Item',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',\n\t\t\t\t\t'import_rate', 'import_amount'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',\n\t\t\t\t\t'UoM', 'Basic Rate', 'Amount'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t'3%', '10%', '15%', '32%', '5%',\n\t\t\t\t\t'5%', '15%', '15%'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = '';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t'<div style = \"page-break-after: always;\" \\\n\t\t\t\t\t\tclass = \"page_break\"></div>\\\n\t\t\t\t\t\t<div class=\"page-settings\"></div>';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren('Purchase Taxes and Charges', doc.name, 'purchase_tax_details');\n\t\t\tvar rows = '<table width=100%>\\n';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t'<tr>\\n' +\n\t\t\t\t\t\t'\\t<td>' + oc[i].description + '</td>\\n' +\n\t\t\t\t\t\t'\\t<td style=\"width: 38%; text-align: right;\">' + format_currency(oc[i].tax_amount / (doc.conversion_rate || 1), doc.currency) + '</td>\\n' +\n\t\t\t\t\t'</tr>\\n';\n\t\t\t}\n\t\t\treturn rows + '</table>\\n';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class='common page-header'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class='header-table' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td><script>'<h1>' + (doc.select_print_heading || 'Purchase Order') + '</h1>'</script></td></tr>\n\t\t\t<tr><td><h3><script>cur_frm.docname</script></h3></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=22%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.supplier_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Purchase Order Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class='common page-body'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class='common page-footer'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class='footer-table' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style='padding-right: 10px;'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td style=\"width: 38%; text-align: right;\"><script>\n\t\t\t\t\t\t\t\tformat_currency(doc.net_total_import, doc.currency)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr style='font-weight: bold'>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td style=\"width: 38%; text-align: right;\"><script>\n\t\t\t\t\t\t\t\tformat_currency(doc.grand_total_import, doc.currency)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_import</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n", 
+  "html": "<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: \"Georgia\", serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t}\n\n\t.common {\n\t\tfont-family: \"Georgia\", serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 10px 0px;\n\t}\n\n\ttable {\n\t\tborder-collapse: collapse;\n\t\twidth: 100%;\n\t\tvertical-align: top;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table thead {\n\t\tborder-bottom: 1px solid black;\n\t}\n\n\ttable.header-table h3 {\n\t\tcolor: gray;\n\t}\n\n\ttable.header-table thead td {\n\t\tpadding: 5px 0px;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t'Purchase Order',\n\t\t\t\tdoc.name,\n\t\t\t\t'po_details',\n\t\t\t\t'Purchase Order Item',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',\n\t\t\t\t\t'import_rate', 'import_amount'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',\n\t\t\t\t\t'UoM', 'Basic Rate', 'Amount'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t'3%', '10%', '15%', '32%', '5%',\n\t\t\t\t\t'5%', '15%', '15%'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = '';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t'<div style = \"page-break-after: always;\" \\\n\t\t\t\t\t\tclass = \"page_break\"></div>\\\n\t\t\t\t\t\t<div class=\"page-settings\"></div>';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren('Purchase Taxes and Charges', doc.name, 'other_charges');\n\t\t\tvar rows = '<table width=100%>\\n';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t'<tr>\\n' +\n\t\t\t\t\t\t'\\t<td>' + oc[i].description + '</td>\\n' +\n\t\t\t\t\t\t'\\t<td style=\"width: 38%; text-align: right;\">' + format_currency(oc[i].tax_amount / (doc.conversion_rate || 1), doc.currency) + '</td>\\n' +\n\t\t\t\t\t'</tr>\\n';\n\t\t\t}\n\t\t\treturn rows + '</table>\\n';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class='common page-header'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class='header-table' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td><script>'<h1>' + (doc.select_print_heading || 'Purchase Order') + '</h1>'</script></td></tr>\n\t\t\t<tr><td><h3><script>cur_frm.docname</script></h3></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=22%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.supplier_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Purchase Order Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class='common page-body'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class='common page-footer'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class='footer-table' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style='padding-right: 10px;'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td style=\"width: 38%; text-align: right;\"><script>\n\t\t\t\t\t\t\t\tformat_currency(doc.net_total_import, doc.currency)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr style='font-weight: bold'>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td style=\"width: 38%; text-align: right;\"><script>\n\t\t\t\t\t\t\t\tformat_currency(doc.grand_total_import, doc.currency)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_import</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n", 
   "module": "Buying", 
   "name": "__common__", 
   "print_format_type": "Client", 
diff --git a/erpnext/buying/Print Format/Purchase Order Modern/Purchase Order Modern.txt b/erpnext/buying/Print Format/Purchase Order Modern/Purchase Order Modern.txt
index 3be7eb0..9e0693a 100644
--- a/erpnext/buying/Print Format/Purchase Order Modern/Purchase Order Modern.txt
+++ b/erpnext/buying/Print Format/Purchase Order Modern/Purchase Order Modern.txt
@@ -9,7 +9,7 @@
  {
   "doc_type": "Purchase Order", 
   "doctype": "Print Format", 
-  "html": "<!--\n    Sample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: \"Helvetica\", \"Arial\", sans-serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n        line-height: 150%;\n\t}\n\n\t.common {\n\t\tfont-family: \"Helvetica\", \"Arial\", sans-serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 10px 0px;\n\t}\n\n\ttable {\n\t\tborder-collapse: collapse;\n\t\twidth: 100%;\n\t\tvertical-align: top;\n\t\tborder-style: none !important;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t\tborder-style: none !important;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table h1 {\n\t\ttext-transform: uppercase;\n\t\tcolor: white;\n\t\tfont-size: 55px;\n\t\tfont-style: italic;\n\t}\n\n\ttable.header-table thead tr:nth-child(1) div {\n\t\theight: 24px;\n\t\tbackground-color: #696969;\n\t\tvertical-align: middle;\n\t\tpadding: 12px 0px 0px 0px;\n\t\twidth: 100%;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\tdiv.page-body table tr td {\n\t\tbackground-color: #DCDCDC !important;\n\t}\n\n\tdiv.page-body table tr:nth-child(1) td {\n\t\tbackground-color: #696969 !important;\n\t\tcolor: white !important;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n\n\ttable.footer-table tfoot td {\n\t\tbackground-color: #696969;\n\t\theight: 10px;\n\t}\n\n\t.imp-details {\n\t\tbackground-color: #DCDCDC;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t'Purchase Order',\n\t\t\t\tdoc.name,\n\t\t\t\t'po_details',\n\t\t\t\t'Purchase Order Item',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',\n\t\t\t\t\t'import_rate', 'import_amount'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',\n\t\t\t\t\t'UoM', 'Basic Rate', 'Amount'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t'3%', '10%', '15%', '32%', '5%',\n\t\t\t\t\t'5%', '15%', '15%'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = '';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t'<div style = \"page-break-after: always;\" \\\n\t\t\t\t\t\tclass = \"page_break\"></div>\\\n\t\t\t\t\t\t<div class=\"page-settings\"></div>';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren('Purchase Taxes and Charges', doc.name, 'purchase_tax_details');\n\t\t\tvar rows = '<table width=100%>\\n';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t'<tr>\\n' +\n\t\t\t\t\t\t'\\t<td>' + oc[i].description + '</td>\\n' +\n\t\t\t\t\t\t'\\t<td style=\"width: 38%; text-align: right;\">' + format_currency(oc[i].tax_amount / (doc.conversion_rate || 1), doc.currency) + '</td>\\n' +\n\t\t\t\t\t'</tr>\\n';\n\t\t\t}\n\t\t\treturn rows + '</table>\\n';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class='common page-header'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class='header-table' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td colspan=2><div><script>'<h1>' + (doc.select_print_heading || 'Purchase Order') + '</h1>'</script></div></td></tr>\n\t\t\t<tr><td colspan=2><div style=\"height:15px\"></div></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=22%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.supplier_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr class='imp-details'>\n\t\t\t\t\t\t<td><b>Purchase Order No.</b></td>\n\t\t\t\t\t\t<td><script>cur_frm.docname</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Purchase Order Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class='common page-body'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class='common page-footer'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class='footer-table' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style='padding-right: 10px;'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td style=\"width: 38%; text-align: right;\"><script>\n\t\t\t\t\t\t\t\tformat_currency(doc.net_total_import, doc.currency)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr style='font-weight: bold' class='imp-details'>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td style=\"width: 38%; text-align: right;\"><script>\n\t\t\t\t\t\t\t\tformat_currency(doc.grand_total_import, doc.currency)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_import</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\t<tr><td colspan=2><div></div></td><tr>\n\t\t</tfoot>\n\t</table>\n</div>\n", 
+  "html": "<!--\n    Sample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: \"Helvetica\", \"Arial\", sans-serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n        line-height: 150%;\n\t}\n\n\t.common {\n\t\tfont-family: \"Helvetica\", \"Arial\", sans-serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 10px 0px;\n\t}\n\n\ttable {\n\t\tborder-collapse: collapse;\n\t\twidth: 100%;\n\t\tvertical-align: top;\n\t\tborder-style: none !important;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t\tborder-style: none !important;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table h1 {\n\t\ttext-transform: uppercase;\n\t\tcolor: white;\n\t\tfont-size: 55px;\n\t\tfont-style: italic;\n\t}\n\n\ttable.header-table thead tr:nth-child(1) div {\n\t\theight: 24px;\n\t\tbackground-color: #696969;\n\t\tvertical-align: middle;\n\t\tpadding: 12px 0px 0px 0px;\n\t\twidth: 100%;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\tdiv.page-body table tr td {\n\t\tbackground-color: #DCDCDC !important;\n\t}\n\n\tdiv.page-body table tr:nth-child(1) td {\n\t\tbackground-color: #696969 !important;\n\t\tcolor: white !important;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n\n\ttable.footer-table tfoot td {\n\t\tbackground-color: #696969;\n\t\theight: 10px;\n\t}\n\n\t.imp-details {\n\t\tbackground-color: #DCDCDC;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t'Purchase Order',\n\t\t\t\tdoc.name,\n\t\t\t\t'po_details',\n\t\t\t\t'Purchase Order Item',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',\n\t\t\t\t\t'import_rate', 'import_amount'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',\n\t\t\t\t\t'UoM', 'Basic Rate', 'Amount'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t'3%', '10%', '15%', '32%', '5%',\n\t\t\t\t\t'5%', '15%', '15%'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = '';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t'<div style = \"page-break-after: always;\" \\\n\t\t\t\t\t\tclass = \"page_break\"></div>\\\n\t\t\t\t\t\t<div class=\"page-settings\"></div>';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren('Purchase Taxes and Charges', doc.name, 'other_charges');\n\t\t\tvar rows = '<table width=100%>\\n';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t'<tr>\\n' +\n\t\t\t\t\t\t'\\t<td>' + oc[i].description + '</td>\\n' +\n\t\t\t\t\t\t'\\t<td style=\"width: 38%; text-align: right;\">' + format_currency(oc[i].tax_amount / (doc.conversion_rate || 1), doc.currency) + '</td>\\n' +\n\t\t\t\t\t'</tr>\\n';\n\t\t\t}\n\t\t\treturn rows + '</table>\\n';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class='common page-header'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class='header-table' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td colspan=2><div><script>'<h1>' + (doc.select_print_heading || 'Purchase Order') + '</h1>'</script></div></td></tr>\n\t\t\t<tr><td colspan=2><div style=\"height:15px\"></div></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=22%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.supplier_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr class='imp-details'>\n\t\t\t\t\t\t<td><b>Purchase Order No.</b></td>\n\t\t\t\t\t\t<td><script>cur_frm.docname</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Purchase Order Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class='common page-body'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class='common page-footer'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class='footer-table' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style='padding-right: 10px;'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td style=\"width: 38%; text-align: right;\"><script>\n\t\t\t\t\t\t\t\tformat_currency(doc.net_total_import, doc.currency)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr style='font-weight: bold' class='imp-details'>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td style=\"width: 38%; text-align: right;\"><script>\n\t\t\t\t\t\t\t\tformat_currency(doc.grand_total_import, doc.currency)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_import</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\t<tr><td colspan=2><div></div></td><tr>\n\t\t</tfoot>\n\t</table>\n</div>\n", 
   "module": "Buying", 
   "name": "__common__", 
   "print_format_type": "Client", 
diff --git a/erpnext/buying/Print Format/Purchase Order Spartan/Purchase Order Spartan.txt b/erpnext/buying/Print Format/Purchase Order Spartan/Purchase Order Spartan.txt
index 908ee78..79016a7 100644
--- a/erpnext/buying/Print Format/Purchase Order Spartan/Purchase Order Spartan.txt
+++ b/erpnext/buying/Print Format/Purchase Order Spartan/Purchase Order Spartan.txt
@@ -9,7 +9,7 @@
  {
   "doc_type": "Purchase Order", 
   "doctype": "Print Format", 
-  "html": "<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: \"Arial\", sans-serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t}\n\n\t.common {\n\t\tfont-family: \"Arial\", sans-serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 0px;\n\t}\n\n\ttable {\n\t\twidth: 100% !important;\n\t\tvertical-align: top;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t}\n\n\ttable, td {\n\t\tborder-collapse: collapse !important;\n\t\tpadding: 0px;\n\t\tmargin: 0px !important;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table h3 {\n\t\tcolor: gray;\n\t}\n\n\ttable.header-table thead td {\n\t\tpadding: 5px;\n\t}\n\n\ttable.header-table > thead,\n\ttable.header-table > tbody > tr > td,\n\ttable.footer-table > tbody > tr > td {\n\t\tborder: 1px solid black;\n\t\tpadding: 5px;\n\t}\n\n\ttable.footer-table > tbody,\n\ttable.header-table > thead {\n\t\tborder-bottom: 3px solid black;\n\t}\n\n\ttable.header-table > thead {\n\t\tborder-top: 3px solid black;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\tdiv.page-body td {\n\t\tbackground-color: white !important;\n\t\tborder: 1px solid black !important;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t'Purchase Order',\n\t\t\t\tdoc.name,\n\t\t\t\t'po_details',\n\t\t\t\t'Purchase Order Item',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',\n\t\t\t\t\t'import_rate', 'import_amount'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',\n\t\t\t\t\t'UoM', 'Basic Rate', 'Amount'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t'3%', '10%', '15%', '32%', '5%',\n\t\t\t\t\t'5%', '15%', '15%'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = '';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t'<div style = \"page-break-after: always;\" \\\n\t\t\t\t\t\tclass = \"page_break\"></div>\\\n\t\t\t\t\t\t<div class=\"page-settings\"></div>';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren('Purchase Taxes and Charges', doc.name, 'purchase_tax_details');\n\t\t\tvar rows = '<table width=100%>\\n';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t'<tr>\\n' +\n\t\t\t\t\t\t'\\t<td>' + oc[i].description + '</td>\\n' + \n\t\t\t\t\t\t'\\t<td style=\"width: 38%; text-align: right;\">' + format_currency(oc[i].tax_amount / (doc.conversion_rate || 1), doc.currency) + '</td>\\n' +\n\t\t\t\t\t'</tr>\\n';\n\t\t\t}\n\t\t\treturn rows + '</table>\\n';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class='common page-header'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class='header-table' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td colspan=2><script>'<h1>' + (doc.select_print_heading || 'Purchase Order') + '</h1>'</script></td></tr>\n\t\t\t<tr><td colspan=2><h3><script>cur_frm.docname</script></h3></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=22%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.supplier_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Purchase Order Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class='common page-body'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class='common page-footer'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class='footer-table' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style='padding-right: 10px;'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td style=\"width: 38%; text-align: right;\"><script>\n\t\t\t\t\t\t\t\tformat_currency(doc.net_total_import, doc.currency)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr style='font-weight: bold'>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td style=\"width: 38%; text-align: right;\"><script>\n\t\t\t\t\t\t\t\tformat_currency(doc.grand_total_import, doc.currency)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_import</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n", 
+  "html": "<!--\n\tSample Print Format for ERPNext\n\tPlease use at your own discretion\n\tFor suggestions and contributions:\n\t\thttps://github.com/webnotes/erpnext-print-templates\n\n\tFreely usable under MIT license\n-->\n\n<!-- Style Settings -->\n<style>\n\t/*\n\t\tcommon style for whole page\n\t\tThis should include:\n\t\t+ page size related settings\n\t\t+ font family settings\n\t\t+ line spacing settings\n\t*/\n\t@media screen {\n\t\tbody {\n\t\t\twidth: 8.3in;\n\t\t}\n\t}\n\n\thtml, body, div, span, td {\n\t\tfont-family: \"Arial\", sans-serif;\n\t\tfont-size: 12px;\n\t}\n\n\tbody {\n\t\tpadding: 10px;\n\t\tmargin: auto;\n\t\tfont-size: 12px;\n\t}\n\n\t.common {\n\t\tfont-family: \"Arial\", sans-serif !important;\n\t\tfont-size: 12px;\n\t\tpadding: 0px;\n\t}\n\n\ttable {\n\t\twidth: 100% !important;\n\t\tvertical-align: top;\n\t}\n\n\ttable td {\n\t\tpadding: 2px 0px;\n\t}\n\n\ttable, td {\n\t\tborder-collapse: collapse !important;\n\t\tpadding: 0px;\n\t\tmargin: 0px !important;\n\t}\n\t\n\ttable h1, h2, h3, h4, h5, h6 {\n\t\tpadding: 0px;\n\t\tmargin: 0px;\n\t}\n\n\ttable.header-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.header-table h3 {\n\t\tcolor: gray;\n\t}\n\n\ttable.header-table thead td {\n\t\tpadding: 5px;\n\t}\n\n\ttable.header-table > thead,\n\ttable.header-table > tbody > tr > td,\n\ttable.footer-table > tbody > tr > td {\n\t\tborder: 1px solid black;\n\t\tpadding: 5px;\n\t}\n\n\ttable.footer-table > tbody,\n\ttable.header-table > thead {\n\t\tborder-bottom: 3px solid black;\n\t}\n\n\ttable.header-table > thead {\n\t\tborder-top: 3px solid black;\n\t}\n\n\tdiv.page-body table td:nth-child(6),\n\tdiv.page-body table td:nth-child(7) {\n\t\ttext-align: right;\n\t}\n\n\tdiv.page-body td {\n\t\tbackground-color: white !important;\n\t\tborder: 1px solid black !important;\n\t}\n\n\ttable.footer-table td {\n\t\tvertical-align: top;\n\t}\n\n\ttable.footer-table td table td:nth-child(2),\n\ttable.footer-table td table td:nth-child(3) {\n\t\ttext-align: right;\n\t}\n</style>\n\n\n<!-- Javascript -->\n<script>\n\tsi_std = {\n\t\tprint_item_table: function() {\n\t\t\tvar table = print_table(\n\t\t\t\t'Purchase Order',\n\t\t\t\tdoc.name,\n\t\t\t\t'po_details',\n\t\t\t\t'Purchase Order Item',\n\t\t\t\t[// Here specify the table columns to be displayed\n\t\t\t\t\t'SR', 'item_code', 'item_name', 'description', 'qty', 'stock_uom',\n\t\t\t\t\t'import_rate', 'import_amount'\n\t\t\t\t],\n\t\t\t\t[// Here specify the labels of column headings\n\t\t\t\t\t'Sr', 'Item Code', 'Item Name', 'Description', 'Qty',\n\t\t\t\t\t'UoM', 'Basic Rate', 'Amount'\n\t\t\t\t],\n\t\t\t\t[// Here specify the column widths\n\t\t\t\t\t'3%', '10%', '15%', '32%', '5%',\n\t\t\t\t\t'5%', '15%', '15%'\n\t\t\t\t]\n\t\t\t);\n\n\t\t\t// This code takes care of page breaks\n\t\t\tif(table.appendChild) {\n\t\t\t\tout = table.innerHTML;\n\t\t\t} else {\n\t\t\t\tout = '';\n\t\t\t\tfor(var i=0; i < (table.length-1); i++) {\n\t\t\t\t\tout += table[i].innerHTML + \n\t\t\t\t\t\t'<div style = \"page-break-after: always;\" \\\n\t\t\t\t\t\tclass = \"page_break\"></div>\\\n\t\t\t\t\t\t<div class=\"page-settings\"></div>';\n\t\t\t\t}\n\t\t\t\tout += table[table.length-1].innerHTML;\n\t\t\t}\n\t\t\treturn out;\n\t\t},\n\n\n\t\tprint_other_charges: function(parent) {\n\t\t\tvar oc = getchildren('Purchase Taxes and Charges', doc.name, 'other_charges');\n\t\t\tvar rows = '<table width=100%>\\n';\n\t\t\tfor(var i=0; i<oc.length; i++) {\n\t\t\t\trows +=\n\t\t\t\t\t'<tr>\\n' +\n\t\t\t\t\t\t'\\t<td>' + oc[i].description + '</td>\\n' + \n\t\t\t\t\t\t'\\t<td style=\"width: 38%; text-align: right;\">' + format_currency(oc[i].tax_amount / (doc.conversion_rate || 1), doc.currency) + '</td>\\n' +\n\t\t\t\t\t'</tr>\\n';\n\t\t\t}\n\t\t\treturn rows + '</table>\\n';\n\t\t}\n\t};\n</script>\n\n\n<!-- Page Layout Settings -->\n<div class='common page-header'>\n\t<!-- \n\t\tPage Header will contain\n\t\t\t+ table 1\n\t\t\t\t+ table 1a\n\t\t\t\t\t- Name\n\t\t\t\t\t- Address\n\t\t\t\t\t- Contact\n\t\t\t\t\t- Mobile No\n\t\t\t\t+ table 1b\n\t\t\t\t\t- Voucher Date\n\t\t\t\t\t- Due Date\n\t-->\n\t<table class='header-table' cellspacing=0>\n\t\t<thead>\n\t\t\t<tr><td colspan=2><script>'<h1>' + (doc.select_print_heading || 'Purchase Order') + '</h1>'</script></td></tr>\n\t\t\t<tr><td colspan=2><h3><script>cur_frm.docname</script></h3></td></tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60%><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=22%><b>Name</b></td>\n\t\t\t\t\t\t<td><script>doc.supplier_name</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Address</b></td>\n\t\t\t\t\t\t<td><script>replace_newlines(doc.address_display)</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td><b>Contact</b></td>\n\t\t\t\t\t\t<td><script>doc.contact_display</script></td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody></table></td>\n\t\t\t\t<td><table width=100% cellspacing=0><tbody>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<td width=63%><b>Purchase Order Date</b></td>\n\t\t\t\t\t\t<td><script>date.str_to_user(doc.transaction_date)</script></td>\n\t\t\t\t\t<tr>\t\t\t\t\t\n\t\t\t\t</tbody></table></td>\n\t\t\t</tr>\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n<div class='common page-body'>\n\t<!-- \n\t\tPage Body will contain\n\t\t\t+ table 2\n\t\t\t\t- Sales Invoice Data\n\t-->\n\t<script>si_std.print_item_table()</script>\n</div>\n<div class='common page-footer'>\n\t<!-- \n\t\tPage Footer will contain\n\t\t\t+ table 3\n\t\t\t\t- Terms and Conditions\n\t\t\t\t- Total Rounded Amount Calculation\n\t\t\t\t- Total Rounded Amount in Words\n\t-->\n\t<table class='footer-table' width=100% cellspacing=0>\n\t\t<thead>\n\t\t\t\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr>\n\t\t\t\t<td width=60% style='padding-right: 10px;'>\n\t\t\t\t\t<b>Terms, Conditions &amp; Other Information:</b><br />\n\t\t\t\t\t<script>doc.terms</script>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<table cellspacing=0 width=100%><tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td>Net Total</td>\n\t\t\t\t\t\t\t<td style=\"width: 38%; text-align: right;\"><script>\n\t\t\t\t\t\t\t\tformat_currency(doc.net_total_import, doc.currency)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<tr><td colspan=3><script>si_std.print_other_charges()</script></td></tr>\n\t\t\t\t\t\t<tr style='font-weight: bold'>\n\t\t\t\t\t\t\t<td>Grand Total</td>\n\t\t\t\t\t\t\t<td style=\"width: 38%; text-align: right;\"><script>\n\t\t\t\t\t\t\t\tformat_currency(doc.grand_total_import, doc.currency)\n\t\t\t\t\t\t\t</script></td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody></table>\n\t\t\t\t\t<br /><b>In Words</b><br />\n\t\t\t\t\t<i><script>doc.in_words_import</script></i>\n\t\t\t\t</td>\n\t\t\t</tr>\t\t\n\t\t</tbody>\n\t\t<tfoot>\n\t\t\n\t\t</tfoot>\n\t</table>\n</div>\n", 
   "module": "Buying", 
   "name": "__common__", 
   "print_format_type": "Client", 
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.js b/erpnext/buying/doctype/purchase_common/purchase_common.js
index 1556634..6739e1e 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.js
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.js
@@ -62,14 +62,13 @@
 	},
 	
 	supplier: function() {
+		var me = this;
 		if(this.frm.doc.supplier || this.frm.doc.credit_to) {
 			if(!this.frm.doc.company) {
 				this.frm.set_value("supplier", null);
 				msgprint(wn._("Please specify Company"));
 			} else {
-				var me = this;
 				var buying_price_list = this.frm.doc.buying_price_list;
-
 				return this.frm.call({
 					doc: this.frm.doc,
 					method: "set_supplier_defaults",
@@ -77,6 +76,8 @@
 					callback: function(r) {
 						if(!r.exc) {
 							if(me.frm.doc.buying_price_list !== buying_price_list) me.buying_price_list();
+							if (me.frm.doc.taxes_and_charges)
+								me.frm.script_manager.trigger("taxes_and_charges")
 						}
 					}
 				});
@@ -241,21 +242,6 @@
 		}
 	},
 	
-	taxes_and_charges: function() {
-		var me = this;
-		if(this.frm.doc.taxes_and_charges) {
-			return this.frm.call({
-				doc: this.frm.doc,
-				method: "get_purchase_tax_details",
-				callback: function(r) {
-					if(!r.exc) {
-						me.calculate_taxes_and_totals();
-					}
-				}
-			});
-		}
-	},
-	
 	calculate_taxes_and_totals: function() {
 		this._super();
 		this.calculate_total_advance("Purchase Invoice", "advance_allocation_details");
@@ -398,13 +384,6 @@
 		}
 	},
 	
-	show_item_wise_taxes: function() {
-		if(this.frm.fields_dict.tax_calculation) {
-			$(this.get_item_wise_taxes_html())
-				.appendTo($(this.frm.fields_dict.tax_calculation.wrapper).empty());
-		}
-	},
-	
 	change_form_labels: function(company_currency) {
 		var me = this;
 		var field_label_map = {};
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js
index edf7c82..5213885 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.js
@@ -5,7 +5,7 @@
 
 cur_frm.cscript.tname = "Purchase Order Item";
 cur_frm.cscript.fname = "po_details";
-cur_frm.cscript.other_fname = "purchase_tax_details";
+cur_frm.cscript.other_fname = "other_charges";
 
 {% include 'buying/doctype/purchase_common/purchase_common.js' %};
 {% include 'accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js' %}
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.txt b/erpnext/buying/doctype/purchase_order/purchase_order.txt
index bce007c..2dbafd2 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.txt
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.txt
@@ -2,7 +2,7 @@
  {
   "creation": "2013-05-21 16:16:39", 
   "docstatus": 0, 
-  "modified": "2014-01-28 18:49:03", 
+  "modified": "2014-01-29 15:26:21", 
   "modified_by": "Administrator", 
   "owner": "Administrator"
  }, 
@@ -318,7 +318,7 @@
  }, 
  {
   "doctype": "DocField", 
-  "fieldname": "purchase_tax_details", 
+  "fieldname": "other_charges", 
   "fieldtype": "Table", 
   "label": "Purchase Taxes and Charges", 
   "no_copy": 0, 
@@ -328,9 +328,9 @@
  }, 
  {
   "doctype": "DocField", 
-  "fieldname": "tax_calculation", 
+  "fieldname": "other_charges_calculation", 
   "fieldtype": "HTML", 
-  "label": "Tax Calculation", 
+  "label": "Taxes and Charges Calculation", 
   "no_copy": 1, 
   "oldfieldtype": "HTML", 
   "print_hide": 1
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
index bc56abd..562e69d 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
@@ -4,7 +4,7 @@
 // define defaults for purchase common
 cur_frm.cscript.tname = "Supplier Quotation Item";
 cur_frm.cscript.fname = "quotation_items";
-cur_frm.cscript.other_fname = "purchase_tax_details";
+cur_frm.cscript.other_fname = "other_charges";
 
 // attach required files
 {% include 'buying/doctype/purchase_common/purchase_common.js' %};
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.txt b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.txt
index 324bd41..0a4a3ec 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.txt
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.txt
@@ -2,7 +2,7 @@
  {
   "creation": "2013-05-21 16:16:45", 
   "docstatus": 0, 
-  "modified": "2014-01-28 18:50:58", 
+  "modified": "2014-01-29 15:25:52", 
   "modified_by": "Administrator", 
   "owner": "Administrator"
  }, 
@@ -308,7 +308,7 @@
  }, 
  {
   "doctype": "DocField", 
-  "fieldname": "purchase_tax_details", 
+  "fieldname": "other_charges", 
   "fieldtype": "Table", 
   "label": "Purchase Taxes and Charges", 
   "no_copy": 0, 
@@ -318,9 +318,9 @@
  }, 
  {
   "doctype": "DocField", 
-  "fieldname": "tax_calculation", 
+  "fieldname": "other_charges_calculation", 
   "fieldtype": "HTML", 
-  "label": "Tax Calculation", 
+  "label": "Taxes and Charges Calculation", 
   "no_copy": 1, 
   "oldfieldtype": "HTML", 
   "print_hide": 1
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index f7b1e27..7ef771a 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -38,7 +38,7 @@
 
 		self.set_missing_item_details(get_item_details)
 		if self.doc.fields.get("__islocal"):
-			self.set_taxes("purchase_tax_details", "taxes_and_charges")
+			self.set_taxes("other_charges", "taxes_and_charges")
 
 	def set_supplier_from_item_default(self):
 		if self.meta.get_field("supplier") and not self.doc.supplier:
@@ -57,14 +57,10 @@
 		for w in warehouses:
 			validate_warehouse_company(w, self.doc.company)
 
-	def get_purchase_tax_details(self):
-		self.doclist = self.doc.clear_table(self.doclist, "purchase_tax_details")
-		self.set_taxes("purchase_tax_details", "taxes_and_charges")
-
 	def validate_stock_or_nonstock_items(self):
 		if not self.get_stock_items():
 			tax_for_valuation = [d.account_head for d in 
-				self.doclist.get({"parentfield": "purchase_tax_details"}) 
+				self.doclist.get({"parentfield": "other_charges"}) 
 				if d.category in ["Valuation", "Valuation and Total"]]
 			if tax_for_valuation:
 				webnotes.msgprint(_("""Tax Category can not be 'Valuation' or 'Valuation and Total' as all items are non-stock items"""), raise_exception=1)
@@ -79,7 +75,7 @@
 		 		self.doc.currency)
 		
 	def calculate_taxes_and_totals(self):
-		self.other_fname = "purchase_tax_details"
+		self.other_fname = "other_charges"
 		super(BuyingController, self).calculate_taxes_and_totals()
 		self.calculate_total_advance("Purchase Invoice", "advance_allocation_details")
 		
@@ -203,7 +199,7 @@
 				last_stock_item_idx = d.idx
 			
 		total_valuation_amount = sum([flt(d.tax_amount) for d in 
-			self.doclist.get({"parentfield": "purchase_tax_details"}) 
+			self.doclist.get({"parentfield": "other_charges"}) 
 			if d.category in ["Valuation", "Valuation and Total"]])
 			
 		
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index 2c1f078..bcfe0bc 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -50,10 +50,6 @@
 		self.set_price_list_currency("Selling")
 		self.set_missing_item_details(get_item_details)
 										
-	def get_other_charges(self):
-		self.doclist = self.doc.clear_table(self.doclist, "other_charges")
-		self.set_taxes("other_charges", "taxes_and_charges")
-		
 	def apply_shipping_rule(self):
 		if self.doc.shipping_rule:
 			shipping_rule = webnotes.bean("Shipping Rule", self.doc.shipping_rule)
diff --git a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.js b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.js
index 649c35d..59bf829 100644
--- a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.js
+++ b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.js
@@ -1,31 +1,27 @@
 // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-cur_frm.cscript.onload = function(doc,dt,dn){
-  if(!doc.posting_date) set_multiple(dt,dn,{posting_date:get_today()});
-  if(!doc.leave_transaction_type) set_multiple(dt,dn,{leave_transaction_type:'Allocation'});
-
+cur_frm.cscript.onload = function(doc, dt, dn){
+	if(!doc.posting_date)
+		set_multiple(dt, dn, {posting_date: get_today()});
+	if(!doc.leave_transaction_type)
+		set_multiple(dt, dn, {leave_transaction_type: 'Allocation'});
 }
 
-
-// Validation For To Date
-// ================================================================================================
 cur_frm.cscript.to_date = function(doc, cdt, cdn) {
-  return $c('runserverobj', args={'method':'to_date_validation','docs':wn.model.compress(make_doclist(doc.doctype, doc.name))},
-    function(r, rt) {
-    var doc = locals[cdt][cdn];
-    if (r.message) {
-      alert(wn._("To date cannot be before from date"));
-      doc.to_date = '';
-      refresh_field('to_date');
-    }
-    }
-  ); 
+	return $c('runserverobj', args={'method':'to_date_validation','docs':wn.model.compress(make_doclist(doc.doctype, doc.name))},
+		function(r, rt) {
+			var doc = locals[cdt][cdn];
+			if (r.message) {
+				msgprint(wn._("To date cannot be before from date"));
+				doc.to_date = '';
+				refresh_field('to_date');
+			}
+		}
+	);
 }
 
-// Allocation Type
-// ================================================================================================
 cur_frm.cscript.allocation_type = function (doc, cdt, cdn){
-  doc.no_of_days = '';
-  refresh_field('no_of_days');
-}
+	doc.no_of_days = '';
+	refresh_field('no_of_days');
+}
\ No newline at end of file
diff --git a/erpnext/public/js/transaction.js b/erpnext/public/js/transaction.js
index 0dfdd07..24fc332 100644
--- a/erpnext/public/js/transaction.js
+++ b/erpnext/public/js/transaction.js
@@ -708,4 +708,26 @@
 			});
 		}
 	},
+
+	taxes_and_charges: function() {
+		var me = this;
+		if(this.frm.doc.taxes_and_charges) {
+			return this.frm.call({
+				doc: this.frm.doc,
+				method: "get_other_charges",
+				callback: function(r) {
+					if(!r.exc) {
+						me.calculate_taxes_and_totals();
+					}
+				}
+			});
+		}
+	},
+
+	show_item_wise_taxes: function() {
+		if(this.frm.fields_dict.other_charges_calculation) {
+			$(this.get_item_wise_taxes_html())
+				.appendTo($(this.frm.fields_dict.other_charges_calculation.wrapper).empty());
+		}
+	},
 });
\ No newline at end of file
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index a9ed2b7..53be719 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -35,8 +35,8 @@
 					me.frm.set_query(opts[0], erpnext.queries[opts[1]]);
 			});
 		
-		if(this.frm.fields_dict.charge) {
-			this.frm.set_query("charge", function() {
+		if(this.frm.fields_dict.taxes_and_charges) {
+			this.frm.set_query("taxes_and_charges", function() {
 				return {
 					filters: [
 						['Sales Taxes and Charges Master', 'company', '=', me.frm.doc.company],
@@ -80,7 +80,7 @@
 					if(item.warehouse) filters["warehouse"] = item.warehouse
 					
 					return {
-						query : "controllers.queries.get_batch_no",
+						query : "erpnext.controllers.queries.get_batch_no",
 						filters: filters
 					}
 				}
@@ -119,6 +119,8 @@
 							(me.frm.doc.selling_price_list !== selling_price_list) ? 
 								me.selling_price_list() :
 								me.price_list_currency();
+							if (me.frm.doc.taxes_and_charges)
+								me.frm.script_manager.trigger("taxes_and_charges")
 						}
 					}
 				});
@@ -511,28 +513,6 @@
 		this.frm.doc.in_words = this.frm.doc.in_words_export = "";
 	},
 
-	show_item_wise_taxes: function() {
-		if(this.frm.fields_dict.other_charges_calculation) {
-			$(this.get_item_wise_taxes_html())
-				.appendTo($(this.frm.fields_dict.other_charges_calculation.wrapper).empty());
-		}
-	},
-	
-	taxes_and_charges: function() {
-		var me = this;
-		if(this.frm.doc.charge) {
-			return this.frm.call({
-				doc: this.frm.doc,
-				method: "get_other_charges",
-				callback: function(r) {
-					if(!r.exc) {
-						me.calculate_taxes_and_totals();
-					}
-				}
-			});
-		}
-	},
-	
 	shipping_rule: function() {
 		var me = this;
 		if(this.frm.doc.shipping_rule) {
diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js
index e894d0d..1e89dc1 100644
--- a/erpnext/stock/doctype/item/item.js
+++ b/erpnext/stock/doctype/item/item.js
@@ -23,7 +23,7 @@
 
 cur_frm.cscript.make_dashboard = function() {
 	cur_frm.dashboard.reset();
-	if(cur_frm.doc.__islocal) 
+	if(cur_frm.doc.__islocal)
 		return;
 }
 
@@ -34,26 +34,27 @@
 }
 
 cur_frm.cscript.item_code = function(doc) {
-	if(!doc.item_name) cur_frm.set_value("item_name", doc.item_code);
-	if(!doc.description) cur_frm.set_value("description", doc.item_code);
+	if(!doc.item_name)
+		cur_frm.set_value("item_name", doc.item_code);
+	if(!doc.description)
+		cur_frm.set_value("description", doc.item_code);
 }
 
 cur_frm.fields_dict['default_bom'].get_query = function(doc) {
-   //var d = locals[this.doctype][this.docname];
-    return{
-   		filters:{
-   			'item': doc.item_code,
-   			'is_active': 0
-   		}
-   }
+	return {
+		filters: {
+			'item': doc.item_code,
+			'is_active': 0
+		}
+	}
 }
 
 
 // Expense Account
 // ---------------------------------
-cur_frm.fields_dict['purchase_account'].get_query = function(doc){
-	return{
-		filters:{
+cur_frm.fields_dict['purchase_account'].get_query = function(doc) {
+	return {
+		filters: {
 			'debit_or_credit': "Debit",
 			'group_or_ledger': "Ledger"
 		}
@@ -63,8 +64,8 @@
 // Income Account
 // --------------------------------
 cur_frm.fields_dict['default_income_account'].get_query = function(doc) {
-	return{
-		filters:{
+	return {
+		filters: {
 			'debit_or_credit': "Credit",
 			'group_or_ledger': "Ledger",
 			'account_type': "Income Account"
@@ -76,7 +77,7 @@
 // Purchase Cost Center
 // -----------------------------
 cur_frm.fields_dict['cost_center'].get_query = function(doc) {
-	return{
+	return {
 		filters:{ 'group_or_ledger': "Ledger" }
 	}
 }
@@ -85,15 +86,15 @@
 // Sales Cost Center
 // -----------------------------
 cur_frm.fields_dict['default_sales_cost_center'].get_query = function(doc) {
-	return{
+	return {
 		filters:{ 'group_or_ledger': "Ledger" }
 	}
 }
 
 
 cur_frm.fields_dict['item_tax'].grid.get_field("tax_type").get_query = function(doc, cdt, cdn) {
-	return{
-		filters:[
+	return {
+		filters: [
 			['Account', 'account_type', 'in',
 				'Tax, Chargeable, Income Account, Expense Account'],
 			['Account', 'docstatus', '!=', 2]
@@ -102,12 +103,10 @@
 }
 
 cur_frm.cscript.tax_type = function(doc, cdt, cdn){
-  var d = locals[cdt][cdn];
-  return get_server_fields('get_tax_rate',d.tax_type,'item_tax',doc, cdt, cdn, 1);
+	var d = locals[cdt][cdn];
+	return get_server_fields('get_tax_rate', d.tax_type, 'item_tax', doc, cdt, cdn, 1);
 }
 
-
-//get query select item group
 cur_frm.fields_dict['item_group'].get_query = function(doc,cdt,cdn) {
 	return {
 		filters: [
@@ -116,44 +115,39 @@
 	}
 }
 
-// for description from attachment
-// takes the first attachment and creates
-// a table with both image and attachment in HTML
-// in the "alternate_description" field
 cur_frm.cscript.add_image = function(doc, dt, dn) {
 	if(!doc.image) {
 		msgprint(wn._('Please select an "Image" first'));
 		return;
 	}
 
-	doc.description_html = repl('<table style="width: 100%; table-layout: fixed;">'+
-	'<tr><td style="width:110px"><img src="%(imgurl)s" width="100px"></td>'+
-	'<td>%(desc)s</td></tr>'+
-	'</table>', {imgurl: wn.utils.get_file_link(doc.image), desc:doc.description});
+	doc.description_html = repl('<table style="width: 100%; table-layout: fixed;">' +
+		'<tr><td style="width:110px"><img src="%(imgurl)s" width="100px"></td>' +
+		'<td>%(desc)s</td></tr>' +
+		'</table>', {imgurl: wn.utils.get_file_link(doc.image), desc:doc.description});
 
 	refresh_field('description_html');
 }
+
 // Quotation to validation - either customer or lead mandatory
-cur_frm.cscript.weight_to_validate = function(doc,cdt,cdn){
-
-  if((doc.nett_weight || doc.gross_weight) && !doc.weight_uom)
-  {
-    alert(wn._('Weight is mentioned,\nPlease mention "Weight UOM" too'));
-    validated=0;
-  }
+cur_frm.cscript.weight_to_validate = function(doc, cdt, cdn){
+	if((doc.nett_weight || doc.gross_weight) && !doc.weight_uom) {
+		msgprint(wn._('Weight is mentioned,\nPlease mention "Weight UOM" too'));
+		validated = 0;
+	}
 }
 
-cur_frm.cscript.validate = function(doc,cdt,cdn){
-  cur_frm.cscript.weight_to_validate(doc,cdt,cdn);
+cur_frm.cscript.validate = function(doc, cdt, cdn){
+	cur_frm.cscript.weight_to_validate(doc, cdt, cdn);
 }
 
-cur_frm.fields_dict.item_customer_details.grid.get_field("customer_name").get_query = 
-function(doc,cdt,cdn) {
-		return{	query: "erpnext.controllers.queries.customer_query" } }
-	
-cur_frm.fields_dict.item_supplier_details.grid.get_field("supplier").get_query = 
-	function(doc,cdt,cdn) {
-		return{ query: "erpnext.controllers.queries.supplier_query" } }
+cur_frm.fields_dict.item_customer_details.grid.get_field("customer_name").get_query = function(doc, cdt, cdn) {
+	return { query: "erpnext.controllers.queries.customer_query" }
+}
+
+cur_frm.fields_dict.item_supplier_details.grid.get_field("supplier").get_query = function(doc, cdt, cdn) {
+	return { query: "erpnext.controllers.queries.supplier_query" }
+}
 
 cur_frm.cscript.copy_from_item_group = function(doc) {
 	wn.model.with_doc("Item Group", doc.item_group, function() {
@@ -172,9 +166,9 @@
 cur_frm.cscript.image = function() {
 	refresh_field("image_view");
 	
-	if(!cur_frm.doc.description_html) {
+	if(!cur_frm.doc.description_html)
 		cur_frm.cscript.add_image(cur_frm.doc);
-	} else {
+	else {
 		msgprint(wn._("You may need to update: ") + 
 			wn.meta.get_docfield(cur_frm.doc.doctype, "description_html").label);
 	}
diff --git a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
index 95026ad..523d555 100644
--- a/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
+++ b/erpnext/stock/doctype/landed_cost_wizard/landed_cost_wizard.py
@@ -39,13 +39,13 @@
 		
 		for pr in purchase_receipts:
 			pr_bean = webnotes.bean('Purchase Receipt', pr)
-			idx = max([d.idx for d in pr_bean.doclist.get({"parentfield": "purchase_tax_details"})])
+			idx = max([d.idx for d in pr_bean.doclist.get({"parentfield": "other_charges"})])
 			
 			for lc in self.doclist.get({"parentfield": "landed_cost_details"}):
 				amt = flt(lc.amount) * flt(pr_bean.doc.net_total)/ flt(total_amt)
 				
 				matched_row = pr_bean.doclist.get({
-					"parentfield": "purchase_tax_details", 
+					"parentfield": "other_charges", 
 					"category": "Valuation",
 					"add_deduct_tax": "Add",
 					"charge_type": "Actual",
@@ -53,7 +53,7 @@
 				})
 				
 				if not matched_row:	# add if not exists
-					ch = addchild(pr_bean.doc, 'purchase_tax_details', 'Purchase Taxes and Charges')
+					ch = addchild(pr_bean.doc, 'other_charges', 'Purchase Taxes and Charges')
 					ch.category = 'Valuation'
 					ch.add_deduct_tax = 'Add'
 					ch.charge_type = 'Actual'
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
index 5151c00..1a08cd2 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -3,7 +3,7 @@
 
 cur_frm.cscript.tname = "Purchase Receipt Item";
 cur_frm.cscript.fname = "purchase_receipt_details";
-cur_frm.cscript.other_fname = "purchase_tax_details";
+cur_frm.cscript.other_fname = "other_charges";
 
 {% include 'buying/doctype/purchase_common/purchase_common.js' %};
 {% include 'accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js' %}
@@ -106,27 +106,28 @@
 $.extend(cur_frm.cscript, new erpnext.stock.PurchaseReceiptController({frm: cur_frm}));
 
 cur_frm.fields_dict['supplier_address'].get_query = function(doc, cdt, cdn) {
-	return{
-		filters:{ 'supplier': doc.supplier}
+	return {
+		filters: { 'supplier': doc.supplier}
 	}
 }
 
 cur_frm.fields_dict['contact_person'].get_query = function(doc, cdt, cdn) {
-	return{
-		filters:{ 'supplier': doc.supplier}
+	return {
+		filters: { 'supplier': doc.supplier }
 	}
 }
 
-cur_frm.cscript.new_contact = function(){
+cur_frm.cscript.new_contact = function() {
 	tn = wn.model.make_new_doc_and_get_name('Contact');
 	locals['Contact'][tn].is_supplier = 1;
-	if(doc.supplier) locals['Contact'][tn].supplier = doc.supplier;
+	if(doc.supplier)
+		locals['Contact'][tn].supplier = doc.supplier;
 	loaddoc('Contact', tn);
 }
 
 cur_frm.fields_dict['purchase_receipt_details'].grid.get_field('project_name').get_query = function(doc, cdt, cdn) {
-	return{
-		filters:[
+	return {
+		filters: [
 			['Project', 'status', 'not in', 'Completed, Cancelled']
 		]
 	}
@@ -134,28 +135,25 @@
 
 cur_frm.fields_dict['purchase_receipt_details'].grid.get_field('batch_no').get_query= function(doc, cdt, cdn) {
 	var d = locals[cdt][cdn];
-	if(d.item_code){
-		return{
-			filters:{'item': d.item_code}
+	if(d.item_code) {
+		return {
+			filters: {'item': d.item_code}
 		}
 	}
-	else{
-		alert(wn._("Please enter Item Code."));
-	}
+	else
+		msgprint(wn._("Please enter Item Code."));
 }
 
-cur_frm.cscript.select_print_heading = function(doc,cdt,cdn){
-	if(doc.select_print_heading){
-		// print heading
+cur_frm.cscript.select_print_heading = function(doc, cdt, cdn) {
+	if(doc.select_print_heading)
 		cur_frm.pformat.print_heading = doc.select_print_heading;
-	}
 	else
 		cur_frm.pformat.print_heading = "Purchase Receipt";
 }
 
 cur_frm.fields_dict['select_print_heading'].get_query = function(doc, cdt, cdn) {
-	return{
-		filters:[
+	return {
+		filters: [
 			['Print Heading', 'docstatus', '!=', '2']
 		]
 	}
@@ -170,7 +168,6 @@
 }
 
 cur_frm.cscript.on_submit = function(doc, cdt, cdn) {
-	if(cint(wn.boot.notification_settings.purchase_receipt)) {
+	if(cint(wn.boot.notification_settings.purchase_receipt))
 		cur_frm.email_doc(wn.boot.notification_settings.purchase_receipt_message);
-	}
-}
+}
\ No newline at end of file
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.txt b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.txt
index e1ba362..28c2572 100755
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.txt
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.txt
@@ -2,7 +2,7 @@
  {
   "creation": "2013-05-21 16:16:39", 
   "docstatus": 0, 
-  "modified": "2014-01-28 18:52:19", 
+  "modified": "2014-01-29 15:25:14", 
   "modified_by": "Administrator", 
   "owner": "Administrator"
  }, 
@@ -346,7 +346,7 @@
  }, 
  {
   "doctype": "DocField", 
-  "fieldname": "purchase_tax_details", 
+  "fieldname": "other_charges", 
   "fieldtype": "Table", 
   "label": "Purchase Taxes and Charges", 
   "oldfieldname": "purchase_tax_details", 
@@ -355,9 +355,9 @@
  }, 
  {
   "doctype": "DocField", 
-  "fieldname": "tax_calculation", 
+  "fieldname": "other_charges_calculation", 
   "fieldtype": "HTML", 
-  "label": "Tax Calculation", 
+  "label": "Taxes and Charges Calculation", 
   "oldfieldtype": "HTML", 
   "print_hide": 1
  }, 
diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
index 89e77ce..c40b72b 100644
--- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
@@ -184,7 +184,7 @@
 			"charge_type": "Actual", 
 			"description": "Shipping Charges", 
 			"doctype": "Purchase Taxes and Charges", 
-			"parentfield": "purchase_tax_details",
+			"parentfield": "other_charges",
 			"rate": 100.0,
 			"tax_amount": 100.0,
 		},
@@ -195,7 +195,7 @@
 			"charge_type": "Actual", 
 			"description": "VAT", 
 			"doctype": "Purchase Taxes and Charges", 
-			"parentfield": "purchase_tax_details",
+			"parentfield": "other_charges",
 			"rate": 120.0,
 			"tax_amount": 120.0,
 		},
@@ -206,7 +206,7 @@
 			"charge_type": "Actual", 
 			"description": "Customs Duty", 
 			"doctype": "Purchase Taxes and Charges", 
-			"parentfield": "purchase_tax_details",
+			"parentfield": "other_charges",
 			"rate": 150.0,
 			"tax_amount": 150.0,
 		},
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 6bd9564..52436ee 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -7,7 +7,7 @@
 wn.require("assets/erpnext/js/controllers/stock_controller.js");
 wn.provide("erpnext.stock");
 
-erpnext.stock.StockEntry = erpnext.stock.StockController.extend({		
+erpnext.stock.StockEntry = erpnext.stock.StockController.extend({
 	setup: function() {
 		var me = this;
 		
@@ -54,11 +54,11 @@
 			}
 		}
 	},
-	
+
 	onload_post_render: function() {
 		this.set_default_account();
 	},
-	
+
 	refresh: function() {
 		var me = this;
 		erpnext.hide_naming_series();
@@ -79,11 +79,11 @@
 		}
 		
 	},
-	
+
 	on_submit: function() {
 		this.clean_up();
 	},
-	
+
 	after_cancel: function() {
 		this.clean_up();
 	},
@@ -114,7 +114,7 @@
 			});
 		}
 	},
-	
+
 	clean_up: function() {
 		// Clear Production Order record from locals, because it is updated via Stock Entry
 		if(this.frm.doc.production_order && 
@@ -123,7 +123,7 @@
 				this.frm.doc.production_order);
 		}
 	},
-	
+
 	get_items: function() {
 		if(this.frm.doc.production_order || this.frm.doc.bom_no) {
 			// if production order / bom is mentioned, get items
@@ -136,13 +136,13 @@
 			});
 		}
 	},
-	
+
 	qty: function(doc, cdt, cdn) {
 		var d = locals[cdt][cdn];
 		d.transfer_qty = flt(d.qty) * flt(d.conversion_factor);
 		refresh_field('mtn_details');
 	},
-	
+
 	production_order: function() {
 		var me = this;
 		this.toggle_enable_bom();
@@ -158,11 +158,11 @@
 			}
 		});
 	},
-	
+
 	toggle_enable_bom: function() {
 		this.frm.toggle_enable("bom_no", !this.frm.doc.production_order);
 	},
-	
+
 	get_doctype_docname: function() {
 		if(this.frm.doc.purpose === "Sales Return") {
 			if(this.frm.doc.delivery_note_no && this.frm.doc.sales_invoice_no) {
@@ -191,7 +191,7 @@
 			}
 		}
 	},
-	
+
 	add_excise_button: function() {
 		if(wn.boot.control_panel.country === "India")
 			this.frm.add_custom_button(wn._("Make Excise Invoice"), function() {
@@ -201,7 +201,7 @@
 				loaddoc('Journal Voucher', excise.name);
 			});
 	},
-	
+
 	make_return_jv: function() {
 		if(this.get_doctype_docname()) {
 			return this.frm.call({
@@ -233,7 +233,7 @@
 		if(!row.s_warehouse) row.s_warehouse = this.frm.doc.from_warehouse;
 		if(!row.t_warehouse) row.t_warehouse = this.frm.doc.to_warehouse;
 	},
-	
+
 	mtn_details_on_form_rendered: function(doc, grid_row) {
 		erpnext.setup_serial_no(grid_row)
 	}
@@ -288,12 +288,11 @@
 cur_frm.cscript.supplier = function(doc, cdt, cdn) {
 	if(doc.supplier) 
 		return get_server_fields('get_supp_addr', '', '', doc, cdt, cdn, 1);
-
 }
 
 cur_frm.fields_dict['production_order'].get_query = function(doc) {
-	return{
-		filters:[
+	return {
+		filters: [
 			['Production Order', 'docstatus', '=', 1],
 			['Production Order', 'qty', '>','`tabProduction Order`.produced_qty']
 		]
@@ -306,7 +305,7 @@
 
 // Overloaded query for link batch_no
 cur_frm.fields_dict['mtn_details'].grid.get_field('batch_no').get_query = function(doc, cdt, cdn) {
-	var d = locals[cdt][cdn];		
+	var d = locals[cdt][cdn];
 	if(d.item_code) {
 		return{
 			query: "erpnext.stock.doctype.stock_entry.stock_entry.get_batch_no",
@@ -371,7 +370,7 @@
 cur_frm.cscript.validate_items = function(doc) {
 	cl = getchildren('Stock Entry Detail', doc.name, 'mtn_details');
 	if (!cl.length) {
-		alert(wn._("Item table can not be blank"));
+		msgprint(wn._("Item table can not be blank"));
 		validated = false;
 	}
 }
@@ -385,9 +384,9 @@
 }
 
 cur_frm.fields_dict.customer.get_query = function(doc, cdt, cdn) {
-	return{ query: "erpnext.controllers.queries.customer_query" }
+	return { query: "erpnext.controllers.queries.customer_query" }
 }
 
 cur_frm.fields_dict.supplier.get_query = function(doc, cdt, cdn) {
-	return{	query: "erpnext.controllers.queries.supplier_query" }
-}
+	return { query: "erpnext.controllers.queries.supplier_query" }
+}
\ No newline at end of file
diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
index 1d7c2e4..1691349 100644
--- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
@@ -481,7 +481,7 @@
 			d.expense_head = "_Test Account Cost for Goods Sold - _TC"
 			d.cost_center = "_Test Cost Center - _TC"
 			
-		for d in pi.doclist.get({"parentfield": "purchase_tax_details"}):
+		for d in pi.doclist.get({"parentfield": "other_charges"}):
 			d.cost_center = "_Test Cost Center - _TC"
 		
 		pi.run_method("calculate_taxes_and_totals")
@@ -583,7 +583,7 @@
 		for d in pi.doclist.get({"parentfield": "entries"}):
 			d.expense_head = "_Test Account Cost for Goods Sold - _TC"
 			d.cost_center = "_Test Cost Center - _TC"
-		for d in pi.doclist.get({"parentfield": "purchase_tax_details"}):
+		for d in pi.doclist.get({"parentfield": "other_charges"}):
 			d.cost_center = "_Test Cost Center - _TC"
 		
 		pi.run_method("calculate_taxes_and_totals")
diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py
index a1ff0f8..0b4b903 100644
--- a/erpnext/utilities/transaction_base.py
+++ b/erpnext/utilities/transaction_base.py
@@ -115,7 +115,7 @@
 			sales_person.update({
 				"doctype": "Sales Team",
 				"parentfield": "sales_team",
-				"idx": i+1
+				"idx": i + 1
 			})
 			
 			# add child
@@ -138,11 +138,15 @@
 			supplier.default_price_list or self.doc.buying_price_list
 		
 		return out
-		
+
 	def set_supplier_defaults(self):
 		for fieldname, val in self.get_supplier_defaults().items():
 			if self.meta.get_field(fieldname):
 				self.doc.fields[fieldname] = val
+
+	def get_other_charges(self):
+		self.doclist = self.doc.clear_table(self.doclist, "other_charges")
+		self.set_taxes("other_charges", "taxes_and_charges")
 				
 	def get_lead_defaults(self):
 		out = self.get_default_address_and_contact("lead")
