diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 2e34980..af41ef5 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -317,23 +317,22 @@
 			if auto_accounting_for_stock and self.is_opening == "No" and \
 				item.item_code in stock_items and item.item_tax_amount:
 					# Post reverse entry for Stock-Received-But-Not-Billed if it is booked in Purchase Receipt
-					negative_expense_booked_in_pi = None
 					if item.purchase_receipt:
-						negative_expense_booked_in_pi = frappe.db.sql("""select name from `tabGL Entry`
+						negative_expense_booked_in_pr = frappe.db.sql("""select name from `tabGL Entry`
 							where voucher_type='Purchase Receipt' and voucher_no=%s and account=%s""",
 							(item.purchase_receipt, expenses_included_in_valuation))
 
-					if not negative_expense_booked_in_pi:
-						gl_entries.append(
-							self.get_gl_dict({
-								"account": stock_received_but_not_billed,
-								"against": self.supplier,
-								"debit": flt(item.item_tax_amount, self.precision("item_tax_amount", item)),
-								"remarks": self.remarks or "Accounting Entry for Stock"
-							})
-						)
+						if not negative_expense_booked_in_pr:
+							gl_entries.append(
+								self.get_gl_dict({
+									"account": stock_received_but_not_billed,
+									"against": self.supplier,
+									"debit": flt(item.item_tax_amount, self.precision("item_tax_amount", item)),
+									"remarks": self.remarks or "Accounting Entry for Stock"
+								})
+							)
 
-						negative_expense_to_be_booked += flt(item.item_tax_amount, self.precision("item_tax_amount", item))
+							negative_expense_to_be_booked += flt(item.item_tax_amount, self.precision("item_tax_amount", item))
 
 		if self.is_opening == "No" and negative_expense_to_be_booked and valuation_tax:
 			# credit valuation tax amount in "Expenses Included In Valuation"
diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
index 67286db..10e20af 100644
--- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
@@ -49,25 +49,9 @@
 		pi = frappe.copy_doc(test_records[1])
 		pi.insert()
 		pi.submit()
-
-		gl_entries = frappe.db.sql("""select account, debit, credit
-			from `tabGL Entry` where voucher_type='Purchase Invoice' and voucher_no=%s
-			order by account asc""", pi.name, as_dict=1)
-		self.assertTrue(gl_entries)
-
-		expected_values = dict((d[0], d) for d in [
-			["_Test Payable - _TC", 0, 720],
-			["Stock Received But Not Billed - _TC", 750.0, 0],
-			["Expenses Included In Valuation - _TC", 0.0, 250.0],
-			["_Test Account Shipping Charges - _TC", 100.0, 0],
-			["_Test Account VAT - _TC", 120.0, 0],
-		])
-
-		for i, gle in enumerate(gl_entries):
-			self.assertEquals(expected_values[gle.account][0], gle.account)
-			self.assertEquals(expected_values[gle.account][1], gle.debit)
-			self.assertEquals(expected_values[gle.account][2], gle.credit)
-
+		
+		self.check_gle_for_pi(pi.name)
+		
 		set_perpetual_inventory(0)
 
 	def test_gl_entries_with_auto_accounting_for_stock_against_pr(self):
@@ -83,9 +67,14 @@
 		pi.insert()
 		pi.submit()
 
+		self.check_gle_for_pi(pi.name)
+
+		set_perpetual_inventory(0)
+
+	def check_gle_for_pi(self, pi):
 		gl_entries = frappe.db.sql("""select account, debit, credit
 			from `tabGL Entry` where voucher_type='Purchase Invoice' and voucher_no=%s
-			order by account asc""", pi.name, as_dict=1)
+			order by account asc""", pi, as_dict=1)
 		self.assertTrue(gl_entries)
 
 		expected_values = dict((d[0], d) for d in [
@@ -100,8 +89,6 @@
 			self.assertEquals(expected_values[gle.account][1], gle.debit)
 			self.assertEquals(expected_values[gle.account][2], gle.credit)
 
-		set_perpetual_inventory(0)
-
 	def test_gl_entries_with_aia_for_non_stock_items(self):
 		set_perpetual_inventory()
 		self.assertEqual(cint(frappe.defaults.get_global_default("auto_accounting_for_stock")), 1)
diff --git a/erpnext/hr/doctype/leave_application/leave_application.js b/erpnext/hr/doctype/leave_application/leave_application.js
index 7e72064..904fc5a 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.js
+++ b/erpnext/hr/doctype/leave_application/leave_application.js
@@ -3,113 +3,116 @@
 
 cur_frm.add_fetch('employee','employee_name','employee_name');
 
-frappe.ui.form.on("Leave Application", "leave_approver", function(frm) {
-	frm.set_value("leave_approver_name", frappe.user.full_name(frm.doc.leave_approver));
-});
+frappe.ui.form.on("Leave Application", {
+	onload: function(frm) {
+		if (!frm.doc.posting_date) {
+			frm.set_value("posting_date", get_today());
+		}
 
-cur_frm.cscript.onload = function(doc, dt, dn) {
-	if(!doc.posting_date)
-		set_multiple(dt,dn,{posting_date:get_today()});
-	if(doc.__islocal) {
-		cur_frm.set_value("status", "Open");
-		cur_frm.cscript.calculate_total_days(doc, dt, dn);
-	}
+		frm.set_query("leave_approver", function() {
+			return {
+				query: "erpnext.hr.doctype.leave_application.leave_application.get_approvers",
+				filters: {
+					employee: frm.doc.employee
+				}
+			};
+		});
 
-	cur_frm.set_query("leave_approver", function() {
-		return {
-			query: "erpnext.hr.doctype.leave_application.leave_application.get_approvers",
-			filters: {
-				employee: cur_frm.doc.employee
-			}
-		};
-	});
+		frm.set_query("employee", erpnext.queries.employee);
 
-	cur_frm.cscript.get_leave_balance(cur_frm.doc);
-}
+	},
 
-cur_frm.cscript.refresh = function(doc, dt, dn) {
-	if(doc.__islocal) {
-		cur_frm.set_value("status", "Open")
-	}
-	cur_frm.set_intro("");
-	if(doc.__islocal && !in_list(user_roles, "HR User")) {
-		cur_frm.set_intro(__("Fill the form and save it"))
-	} else {
-		if(doc.docstatus==0 && doc.status=="Open") {
-			if(user==doc.leave_approver) {
-				cur_frm.set_intro(__("You are the Leave Approver for this record. Please Update the 'Status' and Save"));
-				cur_frm.toggle_enable("status", true);
-			} else {
-				cur_frm.set_intro(__("This Leave Application is pending approval. Only the Leave Approver can update status."))
-				cur_frm.toggle_enable("status", false);
+	refresh: function(frm) {
+		if (frm.is_new()) {
+			frm.set_value("status", "Open");
+			frm.trigger("calculate_total_days");
+		}
+
+		frm.set_intro("");
+		if (frm.is_new() && !in_list(user_roles, "HR User")) {
+			frm.set_intro(__("Fill the form and save it"));
+		} else {
+			if(frm.doc.docstatus==0 && frm.doc.status=="Open") {
+				if(user==frm.doc.leave_approver) {
+					frm.set_intro(__("You are the Leave Approver for this record. Please Update the 'Status' and Save"));
+					frm.toggle_enable("status", true);
+				} else {
+					frm.set_intro(__("This Leave Application is pending approval. Only the Leave Approver can update status."))
+					frm.toggle_enable("status", false);
+				}
 			}
 		}
-	}
-}
+	},
 
-cur_frm.cscript.employee = function (doc, dt, dn){
-	cur_frm.cscript.get_leave_balance(doc, dt, dn);
-}
+	leave_approver: function(frm) {
+		frm.set_value("leave_approver_name", frappe.user.full_name(frm.doc.leave_approver));
+	},
 
-cur_frm.cscript.fiscal_year = function (doc, dt, dn){
-	cur_frm.cscript.get_leave_balance(doc, dt, dn);
-}
+	employee: function(frm) {
+		frm.trigger("get_leave_balance");
+	},
 
-cur_frm.cscript.leave_type = function (doc, dt, dn){
-	cur_frm.cscript.get_leave_balance(doc, dt, dn);
-}
+	fiscal_year: function(frm) {
+		frm.trigger("get_leave_balance");
+	},
 
-cur_frm.cscript.half_day = function(doc, dt, dn) {
-	if(doc.from_date) {
-		set_multiple(dt,dn,{to_date:doc.from_date});
-		cur_frm.cscript.calculate_total_days(doc, dt, dn);
-	}
-}
+	leave_type: function(frm) {
+		frm.trigger("get_leave_balance");
+	},
 
-cur_frm.cscript.from_date = function(doc, dt, dn) {
-	if(cint(doc.half_day) == 1){
-		set_multiple(dt,dn,{to_date:doc.from_date});
-	}
-	cur_frm.cscript.calculate_total_days(doc, dt, dn);
-}
+	half_day: function(frm) {
+		if (frm.doc.from_date) {
+			frm.set_value("to_date", frm.doc.from_date);
+			frm.trigger("calculate_total_days");
+		}
+	},
 
-cur_frm.cscript.to_date = function(doc, dt, dn) {
-	if(cint(doc.half_day) == 1 && cstr(doc.from_date) && doc.from_date != doc.to_date){
-		msgprint(__("To Date should be same as From Date for Half Day leave"));
-		set_multiple(dt,dn,{to_date:doc.from_date});
-	}
-	cur_frm.cscript.calculate_total_days(doc, dt, dn);
-}
+	from_date: function(frm) {
+		if (cint(frm.doc.half_day)==1) {
+			frm.set_value("to_date", frm.doc.from_date);
+		}
+		frm.trigger("calculate_total_days");
+	},
 
-cur_frm.cscript.get_leave_balance = function(doc, dt, dn) {
-	if(doc.docstatus==0 && doc.employee && doc.leave_type && doc.fiscal_year) {
-		return cur_frm.call({
-			method: "get_leave_balance",
-			args: {
-				employee: doc.employee,
-				fiscal_year: doc.fiscal_year,
-				leave_type: doc.leave_type
-			}
-		});
-	}
-}
+	to_date: function(frm) {
+		if (cint(frm.doc.half_day)==1 && cstr(frm.doc.from_date) && frm.doc.from_date != frm.doc.to_date) {
+			msgprint(__("To Date should be same as From Date for Half Day leave"));
+			frm.set_value("to_date", frm.doc.from_date);
+		}
 
-cur_frm.cscript.calculate_total_days = function(doc, dt, dn) {
-	if(doc.from_date && doc.to_date){
-		if(cint(doc.half_day) == 1) set_multiple(dt,dn,{total_leave_days:0.5});
-		else{
-			// server call is done to include holidays in leave days calculations
-			return frappe.call({
-				method: 'erpnext.hr.doctype.leave_application.leave_application.get_total_leave_days',
-				args: {leave_app: doc},
-				callback: function(response) {
-					if (response && response.message) {
-						cur_frm.set_value('total_leave_days', response.message.total_leave_days);
-					}
+		frm.trigger("calculate_total_days");
+	},
+
+	get_leave_balance: function(frm) {
+		if(frm.doc.docstatus==0 && frm.doc.employee && frm.doc.leave_type && frm.doc.fiscal_year) {
+			return frm.call({
+				method: "get_leave_balance",
+				args: {
+					employee: frm.doc.employee,
+					fiscal_year: frm.doc.fiscal_year,
+					leave_type: frm.doc.leave_type
 				}
 			});
 		}
-	}
-}
+	},
 
-cur_frm.fields_dict.employee.get_query = erpnext.queries.employee;
+	calculate_total_days: function(frm) {
+		if(frm.doc.from_date && frm.doc.to_date) {
+			if (cint(frm.doc.half_day)==1) {
+				frm.set_value("total_leave_days", 0.5);
+			} else {
+				// server call is done to include holidays in leave days calculations
+				return frappe.call({
+					method: 'erpnext.hr.doctype.leave_application.leave_application.get_total_leave_days',
+					args: { leave_app: frm.doc },
+					callback: function(response) {
+						if (response && response.message) {
+							frm.set_value('total_leave_days', response.message.total_leave_days);
+						}
+					}
+				});
+			}
+		}
+	},
+
+});
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index bbfebe0..b36f74b 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -224,8 +224,7 @@
 execute:frappe.delete_doc_if_exists("DocType", "Applicable Territory")
 execute:frappe.delete_doc_if_exists("DocType", "Shopping Cart Price List")
 execute:frappe.delete_doc_if_exists("DocType", "Shopping Cart Taxes and Charges Master")
-
 erpnext.patches.v6_4.set_user_in_contact
 erpnext.patches.v6_4.make_image_thumbnail #2015-10-20
-
 erpnext.patches.v6_5.show_in_website_for_template_item
+erpnext.patches.v6_4.fix_expense_included_in_valuation
diff --git a/erpnext/patches/v6_4/fix_expense_included_in_valuation.py b/erpnext/patches/v6_4/fix_expense_included_in_valuation.py
new file mode 100644
index 0000000..cccfb9b
--- /dev/null
+++ b/erpnext/patches/v6_4/fix_expense_included_in_valuation.py
@@ -0,0 +1,64 @@
+# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe.utils import cstr
+
+def execute():
+	for company in frappe.db.sql("select name, expenses_included_in_valuation from tabCompany", as_dict=1):
+		frozen_date = get_frozen_date(company.name, company.expenses_included_in_valuation)
+	
+		# Purchase Invoices after frozen date 
+		# which are not against Receipt, but valuation related tax is there
+		pi_list = frappe.db.sql("""
+			select distinct pi.name
+			from `tabPurchase Invoice` pi, `tabPurchase Invoice Item` pi_item
+			where 
+				pi.name = pi_item.parent
+				and pi.company = %s
+				and pi.posting_date > %s
+				and pi.docstatus = 1
+				and pi.is_opening = 'No'
+				and (pi_item.item_tax_amount is not null and pi_item.item_tax_amount > 0)
+				and (pi_item.purchase_receipt is null or pi_item.purchase_receipt = '')
+				and (pi_item.item_code is not null and pi_item.item_code != '')
+				and exists(select name from `tabItem` where name=pi_item.item_code and is_stock_item=1)
+		""", (company.name, frozen_date), as_dict=1)
+		
+		for pi in pi_list:
+			# Check whether gle exists for Expenses Included in Valuation account against the PI
+			gle_for_expenses_included_in_valuation = frappe.db.sql("""select name from `tabGL Entry` 
+				where voucher_type='Purchase Invoice' and voucher_no=%s and account=%s""", 
+				(pi.name, company.expenses_included_in_valuation))
+				
+			if gle_for_expenses_included_in_valuation:
+				frappe.db.sql("""delete from `tabGL Entry`
+					where voucher_type='Purchase Invoice' and voucher_no=%s""", pi.name)
+
+				purchase_invoice = frappe.get_doc("Purchase Invoice", pi.name)
+				purchase_invoice.make_gl_entries()
+				
+				print pi.name
+		
+def get_frozen_date(company, account):
+	# Accounting frozen upto
+	accounts_frozen_upto = frappe.db.get_single_value("Accounts Settings", "acc_frozen_upto")
+	
+	# Last adjustment entry to correct Expenses Included in Valuation account balance
+	last_adjustment_entry = frappe.db.sql("""select posting_date from `tabGL Entry` 
+		where account=%s and company=%s and voucher_type = 'Journal Entry'
+		order by posting_date desc limit 1""", (account, company))
+		
+	last_adjustment_date = cstr(last_adjustment_entry[0][0]) if last_adjustment_entry else None
+	
+	# Last period closing voucher
+	last_closing_entry = frappe.db.sql("""select posting_date from `tabGL Entry` 
+		where company=%s and voucher_type = 'Period Closing Voucher'
+		order by posting_date desc limit 1""", company)
+		
+	last_closing_date = cstr(last_closing_entry[0][0]) if last_closing_entry else None
+
+	frozen_date = max([accounts_frozen_upto, last_adjustment_date, last_closing_date])
+	
+	return frozen_date or '1900-01-01'
\ No newline at end of file
