Apply default taxes on loading of document
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 9568c90..7c366c1 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -196,7 +196,7 @@
 
 			# fetch charges
 			if self.taxes_and_charges and not len(self.get("taxes")):
-				self.set_taxes("taxes", "taxes_and_charges")
+				self.set_taxes()
 
 	def get_advances(self):
 		super(SalesInvoice, self).get_advances(self.debit_to, "Customer", self.customer,
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 6612cb5..2643883 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -140,30 +140,29 @@
 							"discount_percentage", "base_rate", "rate"]:
 								item.set(field, ret.get(field))
 
-	def set_taxes(self, tax_parentfield, tax_master_field):
-		if not self.meta.get_field(tax_parentfield):
+	def set_taxes(self):
+		if not self.meta.get_field("taxes"):
 			return
 
-		tax_master_doctype = self.meta.get_field(tax_master_field).options
+		tax_master_doctype = self.meta.get_field("taxes_and_charges").options
 
-		if not self.get(tax_parentfield):
-			if not self.get(tax_master_field):
+		if not self.get("taxes"):
+			if not self.get("taxes_and_charges"):
 				# get the default tax master
-				self.set(tax_master_field, frappe.db.get_value(tax_master_doctype, {"is_default": 1}))
+				self.set("taxes_and_charges", frappe.db.get_value(tax_master_doctype, {"is_default": 1}))
 
-			self.append_taxes_from_master(tax_parentfield, tax_master_field, tax_master_doctype)
+			self.append_taxes_from_master(tax_master_doctype)
 
-	def append_taxes_from_master(self, tax_parentfield, tax_master_field, tax_master_doctype=None):
-		if self.get(tax_master_field):
+	def append_taxes_from_master(self, tax_master_doctype=None):
+		if self.get("taxes_and_charges"):
 			if not tax_master_doctype:
-				tax_master_doctype = self.meta.get_field(tax_master_field).options
+				tax_master_doctype = self.meta.get_field("taxes_and_charges").options
 
-			self.extend(tax_parentfield,
-				get_taxes_and_charges(tax_master_doctype, self.get(tax_master_field), tax_parentfield))
+			self.extend("taxes", get_taxes_and_charges(tax_master_doctype, self.get("taxes_and_charges")))
 
 	def set_other_charges(self):
 		self.set("taxes", [])
-		self.set_taxes("taxes", "taxes_and_charges")
+		self.set_taxes()
 
 	def validate_enabled_taxes_and_charges(self):
 		taxes_and_charges_doctype = self.meta.get_options("taxes_and_charges")
@@ -335,14 +334,19 @@
 @frappe.whitelist()
 def get_tax_rate(account_head):
 	return frappe.db.get_value("Account", account_head, "tax_rate")
+	
+@frappe.whitelist()
+def get_default_taxes_and_charges(master_doctype):
+	default_tax = frappe.db.get_value(master_doctype, {"is_default": 1})
+	return get_taxes_and_charges(master_doctype, default_tax)
 
 @frappe.whitelist()
-def get_taxes_and_charges(master_doctype, master_name, tax_parentfield):
+def get_taxes_and_charges(master_doctype, master_name):
 	from frappe.model import default_fields
 	tax_master = frappe.get_doc(master_doctype, master_name)
 
 	taxes_and_charges = []
-	for i, tax in enumerate(tax_master.get(tax_parentfield)):
+	for i, tax in enumerate(tax_master.get("taxes")):
 		tax = tax.as_dict()
 
 		for fieldname in default_fields:
diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py
index b9aee62..8fa8fa3 100644
--- a/erpnext/controllers/buying_controller.py
+++ b/erpnext/controllers/buying_controller.py
@@ -44,8 +44,6 @@
 			self.update_if_missing(get_party_details(self.supplier, party_type="Supplier"))
 
 		self.set_missing_item_details()
-		if self.get("__islocal"):
-			self.set_taxes("taxes", "taxes_and_charges")
 
 	def set_supplier_from_item_default(self):
 		if self.meta.get_field("supplier") and not self.supplier:
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index f0a2f08..2dde685 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -42,8 +42,6 @@
 		# set contact and address details for customer, if they are not mentioned
 		self.set_missing_lead_customer_details()
 		self.set_price_list_and_item_details()
-		if self.get("__islocal"):
-			self.set_taxes("taxes", "taxes_and_charges")
 
 	def set_missing_lead_customer_details(self):
 		if getattr(self, "customer", None):
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 106b3cc..0e444cc 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -41,6 +41,11 @@
 
 	onload_post_render: function() {
 		var me = this;
+		if(this.frm.doc.__islocal && !(this.frm.doc.taxes || []).length
+			&& !(this.frm.doc.__onload ? this.frm.doc.__onload.load_after_mapping : false)) {
+				this.apply_default_taxes();
+		}
+		
 		if(this.frm.doc.__islocal && this.frm.doc.company && this.frm.doc["items"] && !this.frm.doc.is_pos) {
 			this.calculate_taxes_and_totals();
 		}
@@ -58,6 +63,23 @@
 		erpnext.pos.make_pos_btn(this.frm);
 		this.setup_sms();
 	},
+	
+	apply_default_taxes: function() {
+		var me = this;
+		return frappe.call({
+			method: "erpnext.controllers.accounts_controller.get_default_taxes_and_charges",
+			args: {
+				"master_doctype": frappe.meta.get_docfield(me.frm.doc.doctype, "taxes_and_charges",
+					me.frm.doc.name).options
+			},
+			callback: function(r) {
+				if(!r.exc) {
+					me.frm.set_value("taxes", r.message);
+					me.calculate_taxes_and_totals();
+				}
+			}
+		});
+	},
 
 	setup_sms: function() {
 		var me = this;
@@ -646,7 +668,6 @@
 					"master_doctype": frappe.meta.get_docfield(this.frm.doc.doctype, "taxes_and_charges",
 						this.frm.doc.name).options,
 					"master_name": this.frm.doc.taxes_and_charges,
-					"tax_parentfield": "taxes"
 				},
 				callback: function(r) {
 					if(!r.exc) {
diff --git a/erpnext/shopping_cart/cart.py b/erpnext/shopping_cart/cart.py
index 401f047..0b09eb7 100644
--- a/erpnext/shopping_cart/cart.py
+++ b/erpnext/shopping_cart/cart.py
@@ -256,7 +256,7 @@
 	quotation.set("taxes", [])
 
 	# append taxes
-	quotation.append_taxes_from_master("taxes", "taxes_and_charges")
+	quotation.append_taxes_from_master()
 
 def get_lead_or_customer():
 	customer = frappe.db.get_value("Contact", {"email_id": frappe.session.user}, "customer")