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 4f91c56..4493d52 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,80 +1,11 @@
 // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
+cur_frm.cscript.tax_table = "Purchase Taxes and Charges";
+
 {% include "public/js/controllers/accounts.js" %}
 
-cur_frm.cscript.refresh = function(doc, cdt, cdn) {
-	cur_frm.set_footnote(frappe.markdown(cur_frm.meta.description));
-}
-
-// For customizing print
-cur_frm.pformat.net_total = function(doc) {
-	return '';
-}
-
-cur_frm.pformat.grand_total = function(doc) {
-	return '';
-}
-
-cur_frm.pformat.in_words = function(doc) {
-	return '';
-}
-
-cur_frm.pformat.taxes= 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>';
-	}
-
-	function convert_rate(val) {
-		var new_val = flt(val)/flt(doc.conversion_rate);
-		return new_val;
-	}
-
-	function print_hide(fieldname) {
-		var doc_field = frappe.meta.get_docfield(doc.doctype, fieldname, doc.name);
-		return doc_field.print_hide;
-	}
-
-	var cl = doc.taxes || [];
-
-	// 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'))
-		out += make_row('Net Total', doc.net_total, 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'))
-		out += make_row('Grand Total', doc.grand_total, 1);
-
-	if(doc.in_words && !print_hide('in_words')) {
-		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 + '</td></tr>';
-	}
-
-	out +='</table></td></tr></table></div>';
-	return out;
-}
-
-cur_frm.cscript.add_deduct_tax = function(doc, cdt, cdn) {
+frappe.ui.form.on("Purchase Taxes and Charges", "add_deduct_tax", function(doc, cdt, cdn) {
 	var d = locals[cdt][cdn];
 
 	if(!d.category && d.add_deduct_tax) {
@@ -85,96 +16,5 @@
 		msgprint(__("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) {
-		msgprint(__("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(__("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(__("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, 'taxes');
-
-	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) {
-		msgprint(__("Please select charge type first"));
-		d.row_id = '';
-	}
-	else if((d.charge_type == 'Actual' || d.charge_type == 'On Net Total') && d.row_id) {
-		msgprint(__("Can refer row only if the 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(__("Cannot refer row number greater than or equal to current row number for this Charge type"));
-			d.row_id = '';
-		}
-	}
-	validated = false;
-	refresh_field('row_id', d.name, 'taxes');
-}
-
-cur_frm.set_query("account_head", "taxes", function(doc) {
-	return {
-		query: "erpnext.controllers.queries.tax_account_query",
-		filters: {
-			"account_type": ["Tax", "Chargeable", "Expense Account"],
-			"company": doc.company
-		}
-	}
-});
-
-cur_frm.fields_dict['taxes'].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) {
-		msgprint(__("Please select Charge Type first"));
-		d.rate = '';
-	}
-	validated = false;
-	refresh_field('rate', d.name, 'taxes');
-}
-
-cur_frm.cscript.tax_amount = function(doc, cdt, cdn) {
-	var d = locals[cdt][cdn];
-
-	if(!d.charge_type && d.tax_amount) {
-		msgprint(__("Please select Charge Type first"));
-		d.tax_amount = '';
-	}
-	else if(d.charge_type && d.tax_amount) {
-		msgprint(__("Cannot directly set amount. For 'Actual' charge type, use the rate field"));
-		d.tax_amount = '';
-	}
-
-	validated = false;
-	refresh_field('tax_amount', d.name, 'taxes');
+	refresh_field('add_deduct_tax', d.name, 'taxes');
 }
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 8fd8f01..58a80a8 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,174 +1,11 @@
 // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
+cur_frm.cscript.tax_table = "Sales Taxes and Charges";
+
 {% include "public/js/controllers/accounts.js" %}
 
 cur_frm.cscript.onload = function(doc, cdt, cdn) {
 	if(doc.doctype === "Sales Taxes and Charges Master")
 		erpnext.add_applicable_territory();
 }
-
-cur_frm.cscript.refresh = function(doc, cdt, cdn) {
-	cur_frm.set_footnote(frappe.markdown(cur_frm.meta.description));
-}
-
-// For customizing print
-cur_frm.pformat.net_total = function(doc) {
-	return '';
-}
-
-cur_frm.pformat.discount_amount = function(doc) {
-	return '';
-}
-
-cur_frm.pformat.grand_total = function(doc) {
-	return '';
-}
-
-cur_frm.pformat.rounded_total = function(doc) {
-	return '';
-}
-
-cur_frm.pformat.in_words = function(doc) {
-	return '';
-}
-
-cur_frm.pformat.taxes= 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:50%;text-align:right;">' + format_currency(val, doc.currency) + '</td>'
-			+ '</tr>';
-	}
-
-	function convert_rate(val) {
-		var new_val = flt(val)/flt(doc.conversion_rate);
-		return new_val;
-	}
-
-	function print_hide(fieldname) {
-		var doc_field = frappe.meta.get_docfield(doc.doctype, fieldname, doc.name);
-		return doc_field.print_hide;
-	}
-
-	out ='';
-	if (!doc.print_without_amount) {
-		var cl = doc.taxes || [];
-
-		// 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')) {
-			out += make_row('Net Total', doc.net_total, 1);
-		}
-
-		// add rows
-		if(cl.length){
-			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)
-			out += make_row('Discount Amount', doc.discount_amount, 0);
-
-		// grand total
-		if(!print_hide('grand_total'))
-			out += make_row('Grand Total', doc.grand_total, 1);
-
-		if(!print_hide('rounded_total'))
-			out += make_row('Rounded Total', doc.rounded_total, 1);
-
-		if(doc.in_words && !print_hide('in_words')) {
-			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 + '</td></tr>';
-		}
-		out += '</table></td></tr></table></div>';
-	}
-	return out;
-}
-
-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')) {
-		msgprint(__("Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row"));
-		d.charge_type = '';
-	}
-	validated = false;
-	refresh_field('charge_type', d.name, 'taxes');
-	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) {
-		msgprint(__("Please select Charge Type first"));
-		d.row_id = '';
-	}
-	else if((d.charge_type == 'Actual' || d.charge_type == 'On Net Total') && d.row_id) {
-		msgprint(__("Can refer row only if the 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(__("Cannot refer row number greater than or equal to current row number for this Charge type"));
-			d.row_id = '';
-		}
-	}
-	validated = false;
-	refresh_field('row_id', d.name, 'taxes');
-}
-
-/*---------------------- Get rate if account_head has account_type as TAX or CHARGEABLE-------------------------------------*/
-
-cur_frm.fields_dict['taxes'].grid.get_field("account_head").get_query = function(doc,cdt,cdn) {
-	return{
-		query: "erpnext.controllers.queries.tax_account_query",
-    	filters: {
-			"account_type": ["Tax", "Chargeable", "Income Account"],
-			"company": doc.company
-		}
-	}
-}
-
-cur_frm.fields_dict['taxes'].grid.get_field("cost_center").get_query = function(doc) {
-	return{
-		'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) {
-		msgprint(__("Please select Charge Type first"));
-		d.rate = '';
-	}
-	validated = false;
-	refresh_field('rate', d.name, 'taxes');
-}
-
-cur_frm.cscript.tax_amount = function(doc, cdt, cdn) {
-	var d = locals[cdt][cdn];
-	if(!d.charge_type && d.tax_amount) {
-		msgprint(__("Please select Charge Type first"));
-		d.tax_amount = '';
-	}
-	// else if(d.charge_type && d.tax_amount) {
-	// 	msgprint(__("Cannot directly set amount. For 'Actual' charge type, use the rate field"));
-	// 	d.tax_amount = '';
-	// }
-	validated = false;
-	refresh_field('tax_amount', d.name, 'taxes');
-};
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.js b/erpnext/buying/doctype/purchase_common/purchase_common.js
index 6759550..f98dab7 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.js
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.js
@@ -90,20 +90,6 @@
 		this.price_list_rate(doc, cdt, cdn);
 	},
 
-	rate: function(doc, cdt, cdn) {
-		var item = frappe.get_doc(cdt, cdn);
-		frappe.model.round_floats_in(item, ["rate", "discount_percentage"]);
-
-		if(item.price_list_rate) {
-			item.discount_percentage = flt((1 - item.rate / item.price_list_rate) * 100.0,
-				precision("discount_percentage", item));
-		} else {
-			item.discount_percentage = 0.0;
-		}
-
-		this.calculate_taxes_and_totals();
-	},
-
 	uom: function(doc, cdt, cdn) {
 		var me = this;
 		var item = frappe.get_doc(cdt, cdn);
@@ -293,3 +279,8 @@
 		}
 	});
 }
+
+
+frappe.ui.form.on("Purchase Taxes and Charges", "rate", function(frm, cdt, cdn) {
+	cur_frm.cscript.calculate_taxes_and_totals();
+})
diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py
index 504c446..7d19fde 100644
--- a/erpnext/controllers/taxes_and_totals.py
+++ b/erpnext/controllers/taxes_and_totals.py
@@ -290,6 +290,8 @@
 		tax.tax_amount = flt(tax.tax_amount, tax.precision("tax_amount"))
 		tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount, tax.precision("tax_amount"))
 
+		self._set_in_company_currency(tax, ["total", "tax_amount", "tax_amount_after_discount_amount"]);
+
 	def adjust_discount_amount_loss(self, tax):
 		discount_amount_loss = self.doc.grand_total - flt(self.doc.discount_amount) - tax.total
 		tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount +
diff --git a/erpnext/projects/doctype/time_log/time_log.js b/erpnext/projects/doctype/time_log/time_log.js
index 5f7e846..eb2e1a0 100644
--- a/erpnext/projects/doctype/time_log/time_log.js
+++ b/erpnext/projects/doctype/time_log/time_log.js
@@ -77,7 +77,6 @@
 			},
 			callback: function(r) {
 				if(!r.exc) {
-					console.log(r.message)
 					cur_frm.set_value("workstation", r.message)
 				}
 			}
diff --git a/erpnext/public/js/controllers/accounts.js b/erpnext/public/js/controllers/accounts.js
index 03e1890..4b15811 100644
--- a/erpnext/public/js/controllers/accounts.js
+++ b/erpnext/public/js/controllers/accounts.js
@@ -1,3 +1,9 @@
+// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+// License: GNU General Public License v3. See license.txt
+
+frappe.ui.form.on(cur_frm.doctype, "refresh", function(frm) {
+	frm.set_footnote(frappe.markdown(frm.meta.description));
+}
 
 // get tax rate
 cur_frm.cscript.account_head = function(doc, cdt, cdn) {
@@ -8,7 +14,7 @@
 	} else if(d.account_head && d.charge_type!=="Actual") {
 		frappe.call({
 			type:"GET",
-			method: "erpnext.controllers.accounts_controller.get_tax_rate", 
+			method: "erpnext.controllers.accounts_controller.get_tax_rate",
 			args: {"account_head":d.account_head},
 			callback: function(r) {
 			  frappe.model.set_value(cdt, cdn, "rate", r.message || 0);
@@ -16,3 +22,139 @@
 		})
 	}
 }
+
+
+var validate_taxes_and_charges = function(cdt, cdn) {
+	var d = locals[cdt][cdn];
+	if(!d.charge_type && (d.row_id || d.rate || d.tax_amount)) {
+		msgprint(__("Please select Charge Type first"));
+		d.row_id = ""
+		d.rate = d.tax_amount = 0.0
+	} else if((d.charge_type == 'Actual' || d.charge_type == 'On Net Total') && d.row_id) {
+		msgprint(__("Can refer row only if the 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.idx == 1) {
+			msgprint(__("Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row"));
+			d.charge_type = '';
+		} else if (d.row_i && d.row_id >= d.idx) {
+			msgprint(__("Cannot refer row number greater than or equal to current row number for this Charge type"));
+			d.row_id = "";
+		}
+	}
+	validated = false;
+	refresh_field('row_id', d.name, 'taxes');
+}
+
+frappe.ui.form.on(cur_frm.cscript.tax_table, "row_id", function(frm, cdt, cdn) {
+	validate_taxes_and_charges(cdt, cdn);
+})
+
+frappe.ui.form.on(cur_frm.cscript.tax_table, "rate", function(frm, cdt, cdn) {
+	validate_taxes_and_charges(cdt, cdn);
+})
+
+frappe.ui.form.on(cur_frm.cscript.tax_table, "tax_amount", function(frm, cdt, cdn) {
+	validate_taxes_and_charges(cdt, cdn);
+})
+
+frappe.ui.form.on(cur_frm.cscript.tax_table, "charge_type", function(frm, cdt, cdn) {
+	validate_taxes_and_charges(cdt, cdn);
+})
+
+
+cur_frm.set_query("account_head", "taxes", function(doc) {
+	if(cur_frm.cscript.tax_table == "Sales Taxes and Charges") {
+		var account_type = ["Tax", "Chargeable", "Expense Account"];
+	} else {
+		var account_type = ["Tax", "Chargeable", "Income Account"];
+	}
+
+	return {
+		query: "erpnext.controllers.queries.tax_account_query",
+		filters: {
+			"account_type": account_type,
+			"company": doc.company
+		}
+	}
+});
+
+cur_frm.set_query("cost_center", "taxes", function(doc) {
+	return {
+		filters: {
+			'company': doc.company,
+			'group_or_ledger': "Ledger"
+		}
+	}
+}
+
+// For customizing print
+cur_frm.pformat.print_total = function(doc) { return ''; }
+cur_frm.pformat.discount_amount = function(doc) { return ''; }
+cur_frm.pformat.grand_total = function(doc) { return ''; }
+cur_frm.pformat.rounded_total = function(doc) { return ''; }
+cur_frm.pformat.in_words = function(doc) { return ''; }
+
+cur_frm.pformat.taxes= 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:50%;text-align:right;">' + format_currency(val, doc.currency) + '</td>'
+			+ '</tr>';
+	}
+
+	function convert_rate(val) {
+		var new_val = flt(val)/flt(doc.conversion_rate);
+		return new_val;
+	}
+
+	function print_hide(fieldname) {
+		var doc_field = frappe.meta.get_docfield(doc.doctype, fieldname, doc.name);
+		return doc_field.print_hide;
+	}
+
+	out ='';
+	if (!doc.print_without_amount) {
+		var cl = doc.taxes || [];
+
+		// 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('print_total')) {
+			out += make_row('Net Total', doc.print_total, 1);
+		}
+
+		// add rows
+		if(cl.length){
+			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)
+			out += make_row('Discount Amount', doc.discount_amount, 0);
+
+		// grand total
+		if(!print_hide('grand_total'))
+			out += make_row('Grand Total', doc.grand_total, 1);
+
+		if(!print_hide('rounded_total'))
+			out += make_row('Rounded Total', doc.rounded_total, 1);
+
+		if(doc.in_words && !print_hide('in_words')) {
+			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 + '</td></tr>';
+		}
+		out += '</table></td></tr></table></div>';
+	}
+	return out;
+}
diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js
index d9e3e43..f5307c7 100644
--- a/erpnext/public/js/controllers/taxes_and_totals.js
+++ b/erpnext/public/js/controllers/taxes_and_totals.js
@@ -67,16 +67,17 @@
 				item.net_amount = item.amount;
 				item.item_tax_amount = 0.0;
 
-				this.set_in_company_currency(item, ["price_list_rate", "rate", "amount", "net_rate", "net_amount"]);
+				me.set_in_company_currency(item, ["price_list_rate", "rate", "amount", "net_rate", "net_amount"]);
 			});
 		}
 	},
 
 	set_in_company_currency: function(doc, fields) {
+		var me = this;
 		$.each(fields, function(i, f) {
 			doc["base_"+f] = flt(flt(doc[f], precision(f, doc)) * me.frm.doc.conversion_rate, precision("base_" + f, doc));
 		})
-	}
+	},
 
 	initialize_taxes: function() {
 		var me = this;
@@ -99,6 +100,8 @@
 	},
 
 	determine_exclusive_rate: function() {
+		var me = this;
+
 		var has_inclusive_tax = false;
 		$.each(me.frm.doc["taxes"] || [], function(i, row) {
 			if(cint(row.included_in_print_rate)) has_inclusive_tax = true;
@@ -106,7 +109,6 @@
 		if(has_inclusive_tax==false || !in_list(["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"], this.frm.doc.doctype))
 			return;
 
-		var me = this;
 		$.each(me.frm.doc["items"] || [], function(n, item) {
 			var item_tax_map = me._load_item_tax_rate(item.item_tax_rate);
 			var cumulated_tax_fraction = 0.0;
@@ -132,7 +134,7 @@
 
 				item.net_rate = flt(item.net_amount / item.qty, precision("net_rate", item));
 
-				this.set_in_company_currency(item, ["net_rate", "net_amount"]);
+				me.set_in_company_currency(item, ["net_rate", "net_amount"]);
 
 				// if(item.discount_percentage == 100) {
 				// 	item.base_price_list_rate = item.base_rate;
@@ -295,7 +297,7 @@
 		// store tax breakup for each item
 		var key = item.item_code || item.item_name;
 		var item_wise_tax_amount = current_tax_amount * this.frm.doc.conversion_rate;
-		if (tax.item_wise_tax_detail.get(key))
+		if (tax.item_wise_tax_detail && tax.item_wise_tax_detail[key])
 			item_wise_tax_amount += tax.item_wise_tax_detail[key][1]
 
 		tax.item_wise_tax_detail[key] = [tax_rate,flt(item_wise_tax_amount, precision("base_tax_amount", tax))]
@@ -305,8 +307,9 @@
 	round_off_totals: function(tax) {
 		tax.total = flt(tax.total, precision("total", tax));
 		tax.tax_amount = flt(tax.tax_amount, precision("tax_amount", tax));
-		tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount,
-			precision("tax_amount", tax));
+		tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount, precision("tax_amount", tax));
+
+		this.set_in_company_currency(tax, ["total", "tax_amount", "tax_amount_after_discount_amount"]);
 	},
 
 	adjust_discount_amount_loss: function(tax) {
@@ -330,7 +333,7 @@
 			this.frm.doc.taxes_and_charges_added = this.frm.doc.taxes_and_charges_deducted = 0.0;
 			if(tax_count) {
 				$.each(this.frm.doc["taxes"] || [], function(i, tax) {
-					if in_list(["Valuation and Total", "Total"], tax.category) {
+					if (in_list(["Valuation and Total", "Total"], tax.category)) {
 						if(tax.add_deduct_tax == "Add") {
 							me.frm.doc.taxes_and_charges_added += flt(tax.tax_amount);
 						} else {
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 6e6ea23..519b04c 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -274,8 +274,7 @@
 		this.apply_pricing_rule(frappe.get_doc(cdt, cdn), true);
 	},
 
-	// tax rate
-	rate: function(doc, cdt, cdn) {
+	tax_amount: function(doc, cdt, cdn) {
 		this.calculate_taxes_and_totals();
 	},
 
@@ -638,3 +637,16 @@
 		}
 	}
 });
+
+frappe.ui.form.on(cur_frm.doctype + "Item", "rate", function(frm, cdt, cdn) {
+	var item = frappe.get_doc(cdt, cdn);
+	frappe.model.round_floats_in(item, ["rate", "price_list_rate"]);
+
+	if(item.price_list_rate) {
+		item.discount_percentage = flt((1 - item.rate / item.price_list_rate) * 100.0, precision("discount_percentage", item));
+	} else {
+		item.discount_percentage = 0.0;
+	}
+
+	cur_frm.cscript.calculate_taxes_and_totals();
+})
diff --git a/erpnext/selling/doctype/quotation/quotation.js b/erpnext/selling/doctype/quotation/quotation.js
index c63939d..570c16a 100644
--- a/erpnext/selling/doctype/quotation/quotation.js
+++ b/erpnext/selling/doctype/quotation/quotation.js
@@ -151,7 +151,6 @@
 		})
 	});
 	dialog.show();
-
 }
 
 cur_frm.cscript.on_submit = function(doc, cdt, cdn) {
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index 3a01ca0..13796c6 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -154,20 +154,6 @@
 		}
 	},
 
-	rate: function(doc, cdt, cdn) {
-		var item = frappe.get_doc(cdt, cdn);
-		frappe.model.round_floats_in(item, ["rate", "price_list_rate"]);
-
-		if(item.price_list_rate) {
-			item.discount_percentage = flt((1 - item.rate / item.price_list_rate) * 100.0,
-				precision("discount_percentage", item));
-		} else {
-			item.discount_percentage = 0.0;
-		}
-
-		this.calculate_taxes_and_totals();
-	},
-
 	discount_amount: function() {
 		this.calculate_taxes_and_totals();
 	},
@@ -432,3 +418,7 @@
 		})
 	}
 })
+
+frappe.ui.form.on("Sales Taxes and Charges", "rate", function(frm, cdt, cdn) {
+	cur_frm.cscript.calculate_taxes_and_totals();
+})
