Merge pull request #5284 from kickapoo/develop

Add (optional) Country field to Buying.Supplier DocType (fixes #5223)
diff --git a/erpnext/__version__.py b/erpnext/__version__.py
index 56face8..01b41d2 100644
--- a/erpnext/__version__.py
+++ b/erpnext/__version__.py
@@ -1,2 +1,2 @@
 from __future__ import unicode_literals
-__version__ = '6.27.12'
+__version__ = '6.27.16'
diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py
index 104bef7..a551d06 100644
--- a/erpnext/accounts/doctype/account/account.py
+++ b/erpnext/accounts/doctype/account/account.py
@@ -87,7 +87,7 @@
 			return
 		
 		existing_is_group = frappe.db.get_value("Account", self.name, "is_group")
-		if self.is_group != existing_is_group:
+		if cint(self.is_group) != cint(existing_is_group):
 			if self.check_gle_exists():
 				throw(_("Account with existing transaction cannot be converted to ledger"))
 			elif self.is_group:
diff --git a/erpnext/accounts/doctype/asset/asset.js b/erpnext/accounts/doctype/asset/asset.js
index 0dfdb21..0479a4e 100644
--- a/erpnext/accounts/doctype/asset/asset.js
+++ b/erpnext/accounts/doctype/asset/asset.js
@@ -24,6 +24,7 @@
 	
 	refresh: function(frm) {
 		frappe.ui.form.trigger("Asset", "is_existing_asset");
+		frm.toggle_display("next_depreciation_date", frm.doc.docstatus < 1);
 		
 		if (frm.doc.docstatus==1) {
 			if (frm.doc.status=='Submitted' && !frm.doc.is_existing_asset && !frm.doc.purchase_invoice) {
@@ -32,6 +33,10 @@
 				});
 			}
 			if (in_list(["Submitted", "Partially Depreciated", "Fully Depreciated"], frm.doc.status)) {
+				frm.add_custom_button("Transfer Asset", function() {
+					erpnext.asset.transfer_asset(frm);
+				});
+				
 				frm.add_custom_button("Scrap Asset", function() {
 					erpnext.asset.scrap_asset(frm);
 				});
@@ -45,9 +50,56 @@
 					erpnext.asset.restore_asset(frm);
 				});
 			}
+			
+			frm.trigger("show_graph");
 		}
 	},
 	
+	show_graph: function(frm) {		
+		var x_intervals = ["x", frm.doc.purchase_date];
+		var asset_values = ["Asset Value", frm.doc.gross_purchase_amount];
+		var last_depreciation_date = frm.doc.purchase_date;
+		
+		if(frm.doc.opening_accumulated_depreciation) {
+			last_depreciation_date = frappe.datetime.add_months(frm.doc.next_depreciation_date, 
+				-1*frm.doc.frequency_of_depreciation);
+			
+			x_intervals.push(last_depreciation_date);
+			asset_values.push(flt(frm.doc.gross_purchase_amount) - 
+				flt(frm.doc.opening_accumulated_depreciation));
+		}
+		
+		$.each(frm.doc.schedules || [], function(i, v) {
+			x_intervals.push(v.schedule_date);
+			asset_value = flt(frm.doc.gross_purchase_amount) - flt(v.accumulated_depreciation_amount);
+			if(v.journal_entry) {				
+				last_depreciation_date = v.schedule_date;
+				asset_values.push(asset_value)
+			} else {
+				if (in_list(["Scrapped", "Sold"], frm.doc.status)) {
+	 				asset_values.push(null)
+				} else {
+					asset_values.push(asset_value)
+				}
+			}
+		})
+		
+		if(in_list(["Scrapped", "Sold"], frm.doc.status)) {
+			x_intervals.push(frm.doc.disposal_date);
+			asset_values.push(0);
+			last_depreciation_date = frm.doc.disposal_date;
+		}
+		
+		frm.dashboard.reset();
+		frm.dashboard.add_graph({
+			x: 'x',
+			columns: [x_intervals, asset_values],
+			regions: {
+				'Asset Value': [{'start': last_depreciation_date, 'style':'dashed'}]
+			}
+		});		
+	},
+	
 	is_existing_asset: function(frm) {
 		frm.toggle_enable("supplier", frm.doc.is_existing_asset);
 		frm.toggle_reqd("next_depreciation_date", !frm.doc.is_existing_asset);
@@ -112,4 +164,55 @@
 			}
 		})
 	})
+}
+
+erpnext.asset.transfer_asset = function(frm) {
+	var dialog = new frappe.ui.Dialog({
+		title: __("Transfer Asset"),
+		fields: [
+			{
+				"label": __("Target Warehouse"), 
+				"fieldname": "target_warehouse",
+				"fieldtype": "Link", 
+				"options": "Warehouse",
+				"get_query": function () {
+					return {
+						filters: [["Warehouse", "company", "in", ["", cstr(frm.doc.company)]]]
+					}
+				}, 
+				"reqd": 1 
+			},
+			{
+				"label": __("Date"), 
+				"fieldname": "transfer_date",
+				"fieldtype": "Datetime", 
+				"reqd": 1,
+				"default": frappe.datetime.now_datetime()
+			}
+		]
+	});
+
+	dialog.set_primary_action(__("Transfer"), function() {
+		args = dialog.get_values();
+		if(!args) return;
+		dialog.hide();
+		return frappe.call({
+			type: "GET",
+			method: "erpnext.accounts.doctype.asset.asset.transfer_asset",
+			args: {
+				args: {
+					"asset": frm.doc.name,
+					"transaction_date": args.transfer_date,
+					"source_warehouse": frm.doc.warehouse,
+					"target_warehouse": args.target_warehouse,
+					"company": frm.doc.company
+				}
+			},
+			freeze: true,
+			callback: function(r) {
+				cur_frm.reload_doc();
+			}
+		})
+	});
+	dialog.show();
 }
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/asset/asset.json b/erpnext/accounts/doctype/asset/asset.json
index 70c1c16..c272a58 100644
--- a/erpnext/accounts/doctype/asset/asset.json
+++ b/erpnext/accounts/doctype/asset/asset.json
@@ -97,7 +97,7 @@
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
-   "in_list_view": 0, 
+   "in_list_view": 1, 
    "label": "Status", 
    "length": 0, 
    "no_copy": 1, 
@@ -114,6 +114,31 @@
    "unique": 0
   }, 
   {
+   "allow_on_submit": 1, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "image", 
+   "fieldtype": "Attach Image", 
+   "hidden": 1, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Image", 
+   "length": 0, 
+   "no_copy": 1, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 1, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
@@ -706,13 +731,14 @@
  "hide_heading": 0, 
  "hide_toolbar": 0, 
  "idx": 72, 
+ "image_field": "image", 
  "in_create": 0, 
  "in_dialog": 0, 
  "is_submittable": 1, 
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2016-04-20 18:09:07.573716", 
+ "modified": "2016-04-22 11:15:40.055518", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Asset", 
diff --git a/erpnext/accounts/doctype/asset/asset.py b/erpnext/accounts/doctype/asset/asset.py
index da229fe..23bb08b 100644
--- a/erpnext/accounts/doctype/asset/asset.py
+++ b/erpnext/accounts/doctype/asset/asset.py
@@ -190,4 +190,17 @@
 		"qty": 1
 	})
 	si.set_missing_values()
-	return si
\ No newline at end of file
+	return si
+	
+@frappe.whitelist()
+def transfer_asset(args):
+	import json
+	args = json.loads(args)
+	movement_entry = frappe.new_doc("Asset Movement")
+	movement_entry.update(args)
+	movement_entry.insert()
+	movement_entry.submit()
+	
+	frappe.db.commit()
+	
+	frappe.msgprint(_("Asset Movement record {0} created").format("<a href='#Form/Asset Movement/{0}'>{0}</a>".format(movement_entry.name)))
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/asset_movement/__init__.py b/erpnext/accounts/doctype/asset_movement/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/accounts/doctype/asset_movement/__init__.py
diff --git a/erpnext/accounts/doctype/asset_movement/asset_movement.js b/erpnext/accounts/doctype/asset_movement/asset_movement.js
new file mode 100644
index 0000000..680eedc
--- /dev/null
+++ b/erpnext/accounts/doctype/asset_movement/asset_movement.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
+
+frappe.ui.form.on('Asset Movement', {
+	onload: function(frm) {
+		frm.add_fetch("asset", "warehouse", "source_warehouse");
+		
+		frm.set_query("target_warehouse", function() {
+			return {
+				filters: [["Warehouse", "company", "in", ["", cstr(frm.doc.company)]]]
+			}
+		})
+
+	}
+});
diff --git a/erpnext/accounts/doctype/asset_movement/asset_movement.json b/erpnext/accounts/doctype/asset_movement/asset_movement.json
new file mode 100644
index 0000000..59b8823
--- /dev/null
+++ b/erpnext/accounts/doctype/asset_movement/asset_movement.json
@@ -0,0 +1,274 @@
+{
+ "allow_copy": 0, 
+ "allow_import": 1, 
+ "allow_rename": 0, 
+ "autoname": "AM-.#####", 
+ "creation": "2016-04-25 18:00:23.559973", 
+ "custom": 0, 
+ "docstatus": 0, 
+ "doctype": "DocType", 
+ "document_type": "", 
+ "fields": [
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "asset", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Asset", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Asset", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 1, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "transaction_date", 
+   "fieldtype": "Datetime", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Transaction Date", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 1, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "company", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Company", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Company", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 1, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "column_break_4", 
+   "fieldtype": "Column Break", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "source_warehouse", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Source Warehouse", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Warehouse", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 1, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "target_warehouse", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Target Warehouse", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Warehouse", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 1, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "amended_from", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Amended From", 
+   "length": 0, 
+   "no_copy": 1, 
+   "options": "Asset Movement", 
+   "permlevel": 0, 
+   "print_hide": 1, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 1, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }
+ ], 
+ "hide_heading": 0, 
+ "hide_toolbar": 0, 
+ "idx": 0, 
+ "in_create": 0, 
+ "in_dialog": 0, 
+ "is_submittable": 1, 
+ "issingle": 0, 
+ "istable": 0, 
+ "max_attachments": 0, 
+ "modified": "2016-04-25 19:14:08.853429", 
+ "modified_by": "Administrator", 
+ "module": "Accounts", 
+ "name": "Asset Movement", 
+ "name_case": "", 
+ "owner": "Administrator", 
+ "permissions": [
+  {
+   "amend": 1, 
+   "apply_user_permissions": 0, 
+   "cancel": 1, 
+   "create": 1, 
+   "delete": 1, 
+   "email": 1, 
+   "export": 1, 
+   "if_owner": 0, 
+   "import": 0, 
+   "permlevel": 0, 
+   "print": 1, 
+   "read": 1, 
+   "report": 1, 
+   "role": "System Manager", 
+   "set_user_permissions": 0, 
+   "share": 1, 
+   "submit": 1, 
+   "write": 1
+  }, 
+  {
+   "amend": 1, 
+   "apply_user_permissions": 0, 
+   "cancel": 1, 
+   "create": 1, 
+   "delete": 1, 
+   "email": 1, 
+   "export": 1, 
+   "if_owner": 0, 
+   "import": 0, 
+   "permlevel": 0, 
+   "print": 1, 
+   "read": 1, 
+   "report": 1, 
+   "role": "Accounts Manager", 
+   "set_user_permissions": 0, 
+   "share": 1, 
+   "submit": 1, 
+   "write": 1
+  }, 
+  {
+   "amend": 1, 
+   "apply_user_permissions": 0, 
+   "cancel": 1, 
+   "create": 1, 
+   "delete": 1, 
+   "email": 1, 
+   "export": 1, 
+   "if_owner": 0, 
+   "import": 0, 
+   "permlevel": 0, 
+   "print": 1, 
+   "read": 1, 
+   "report": 1, 
+   "role": "Stock Manager", 
+   "set_user_permissions": 0, 
+   "share": 1, 
+   "submit": 1, 
+   "write": 1
+  }
+ ], 
+ "quick_entry": 1, 
+ "read_only": 0, 
+ "read_only_onload": 0, 
+ "sort_field": "modified", 
+ "sort_order": "DESC", 
+ "track_seen": 0
+}
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/asset_movement/asset_movement.py b/erpnext/accounts/doctype/asset_movement/asset_movement.py
new file mode 100644
index 0000000..574c499
--- /dev/null
+++ b/erpnext/accounts/doctype/asset_movement/asset_movement.py
@@ -0,0 +1,48 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe import _
+from frappe.model.document import Document
+
+class AssetMovement(Document):
+	def validate(self):
+		self.validate_asset()
+		self.validate_warehouses()
+		
+	def validate_asset(self):
+		status, company = frappe.db.get_value("Asset", self.asset, ["status", "company"])
+		if status in ("Draft", "Scrapped", "Sold"):
+			frappe.throw(_("{0} asset cannot be transferred").format(status))
+			
+		if company != self.company:
+			frappe.throw(_("Asset {0} does not belong to company {1}").format(self.asset, self.company))
+			
+	def validate_warehouses(self):
+		if not self.source_warehouse:
+			self.source_warehouse = frappe.db.get_value("Asset", self.asset, "warehouse")
+		
+		if self.source_warehouse == self.target_warehouse:
+			frappe.throw(_("Source and Target Warehouse cannot be same"))
+
+	def on_submit(self):
+		self.set_latest_warehouse_in_asset()
+		
+	def on_cancel(self):
+		self.set_latest_warehouse_in_asset()
+		
+	def set_latest_warehouse_in_asset(self):
+		latest_movement_entry = frappe.db.sql("""select target_warehouse from `tabAsset Movement`
+			where asset=%s and docstatus=1 and company=%s
+			order by transaction_date desc limit 1""", (self.asset, self.company))
+		
+		if latest_movement_entry:
+			warehouse = latest_movement_entry[0][0]
+		else:
+			warehouse = frappe.db.sql("""select source_warehouse from `tabAsset Movement`
+				where asset=%s and docstatus=2 and company=%s
+				order by transaction_date asc limit 1""", (self.asset, self.company))[0][0]
+		
+		frappe.db.set_value("Asset", self.asset, "warehouse", warehouse)
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/asset_movement/test_asset_movement.py b/erpnext/accounts/doctype/asset_movement/test_asset_movement.py
new file mode 100644
index 0000000..9880efc
--- /dev/null
+++ b/erpnext/accounts/doctype/asset_movement/test_asset_movement.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
+# See license.txt
+from __future__ import unicode_literals
+
+import frappe
+from frappe.utils import now
+import unittest
+from erpnext.accounts.doctype.asset.test_asset import create_asset
+
+
+class TestAssetMovement(unittest.TestCase):
+	def test_movement(self):
+		asset = create_asset()
+		
+		if asset.docstatus == 0:
+			asset.submit()
+		
+		movement1 = create_asset_movement(asset, target_warehouse="_Test Warehouse 1 - _TC")
+		self.assertEqual(frappe.db.get_value("Asset", asset.name, "warehouse"), "_Test Warehouse 1 - _TC")
+		
+		movement2 = create_asset_movement(asset, target_warehouse="_Test Warehouse 2 - _TC")
+		self.assertEqual(frappe.db.get_value("Asset", asset.name, "warehouse"), "_Test Warehouse 2 - _TC")
+		
+		movement1.cancel()
+		self.assertEqual(frappe.db.get_value("Asset", asset.name, "warehouse"), "_Test Warehouse 2 - _TC")
+		
+		movement2.cancel()
+		self.assertEqual(frappe.db.get_value("Asset", asset.name, "warehouse"), "_Test Warehouse - _TC")
+		
+		asset.load_from_db()
+		asset.cancel()
+		frappe.delete_doc("Asset", asset.name)
+		
+		
+def create_asset_movement(asset, target_warehouse, transaction_date=None):
+	if not transaction_date:
+		transaction_date = now()
+		
+	movement = frappe.new_doc("Asset Movement")
+	movement.update({
+		"asset": asset.name,
+		"transaction_date": transaction_date,
+		"target_warehouse": target_warehouse,
+		"company": asset.company
+	})
+	
+	movement.insert()
+	movement.submit()
+	
+	return movement
diff --git a/erpnext/accounts/doctype/c_form/c_form.js b/erpnext/accounts/doctype/c_form/c_form.js
index eed81cb..92cdb63 100644
--- a/erpnext/accounts/doctype/c_form/c_form.js
+++ b/erpnext/accounts/doctype/c_form/c_form.js
@@ -3,12 +3,12 @@
 
 //c-form js file
 // -----------------------------
-frappe.require("assets/erpnext/js/utils.js");
+
 
 cur_frm.fields_dict.invoices.grid.get_field("invoice_no").get_query = function(doc) {
 	return {
 		filters: {
-			"docstatus": 1, 
+			"docstatus": 1,
 			"customer": doc.customer,
 			"company": doc.company,
 			"c_form_applicable": 'Yes',
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js
index fc29bc7..bc337a1 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.js
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js
@@ -3,7 +3,7 @@
 
 frappe.provide("erpnext.accounts");
 frappe.provide("erpnext.journal_entry");
-frappe.require("assets/erpnext/js/utils.js");
+
 
 frappe.ui.form.on("Journal Entry", {
 	refresh: function(frm) {
diff --git a/erpnext/accounts/doctype/payment_reconciliation_invoice/payment_reconciliation_invoice.json b/erpnext/accounts/doctype/payment_reconciliation_invoice/payment_reconciliation_invoice.json
index 5659f1f..9255eda 100644
--- a/erpnext/accounts/doctype/payment_reconciliation_invoice/payment_reconciliation_invoice.json
+++ b/erpnext/accounts/doctype/payment_reconciliation_invoice/payment_reconciliation_invoice.json
@@ -13,9 +13,10 @@
    "bold": 0, 
    "collapsible": 0, 
    "fieldname": "invoice_type", 
-   "fieldtype": "Data", 
+   "fieldtype": "Select", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Invoice Type", 
@@ -24,6 +25,7 @@
    "options": "Sales Invoice\nPurchase Invoice\nJournal Entry", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -36,17 +38,19 @@
    "bold": 0, 
    "collapsible": 0, 
    "fieldname": "invoice_number", 
-   "fieldtype": "Data", 
+   "fieldtype": "Dynamic Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Invoice Number", 
    "length": 0, 
    "no_copy": 0, 
-   "options": "", 
+   "options": "invoice_type", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -62,6 +66,7 @@
    "fieldtype": "Date", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Invoice Date", 
@@ -69,6 +74,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -84,6 +90,7 @@
    "fieldtype": "Column Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "", 
@@ -91,6 +98,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -106,6 +114,7 @@
    "fieldtype": "Currency", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Amount", 
@@ -113,6 +122,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -128,6 +138,7 @@
    "fieldtype": "Currency", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Outstanding Amount", 
@@ -135,6 +146,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -145,21 +157,24 @@
  ], 
  "hide_heading": 0, 
  "hide_toolbar": 0, 
+ "idx": 0, 
  "in_create": 0, 
  "in_dialog": 0, 
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 1, 
  "max_attachments": 0, 
- "modified": "2015-11-16 06:29:51.516537", 
+ "modified": "2016-04-29 05:47:14.124370", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Payment Reconciliation Invoice", 
  "name_case": "", 
  "owner": "Administrator", 
  "permissions": [], 
+ "quick_entry": 1, 
  "read_only": 0, 
  "read_only_onload": 0, 
  "sort_field": "modified", 
- "sort_order": "DESC"
+ "sort_order": "DESC", 
+ "track_seen": 0
 }
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/payment_tool/payment_tool.js b/erpnext/accounts/doctype/payment_tool/payment_tool.js
index e15694c..8d8e0ce 100644
--- a/erpnext/accounts/doctype/payment_tool/payment_tool.js
+++ b/erpnext/accounts/doctype/payment_tool/payment_tool.js
@@ -146,6 +146,10 @@
 					c.total_amount = d.invoice_amount;
 					c.outstanding_amount = d.outstanding_amount;
 
+					if (in_list(['Sales Invoice', 'Purchase Invoice'], d.voucher_type)){
+						c.due_date = d.due_date
+					}
+
 					if (frm.doc.set_payment_amount) {
 						c.payment_amount = d.outstanding_amount;
 					}
@@ -202,7 +206,7 @@
 	}
 
 	frappe.call({
-		method: 'erpnext.accounts.doctype.payment_tool.payment_tool.get_against_voucher_amount',
+		method: 'erpnext.accounts.doctype.payment_tool.payment_tool.get_against_voucher_details',
 		args: {
 			"against_voucher_type": row.against_voucher_type,
 			"against_voucher_no": row.against_voucher_no,
diff --git a/erpnext/accounts/doctype/payment_tool/payment_tool.py b/erpnext/accounts/doctype/payment_tool/payment_tool.py
index ef8ffb1..5c5b393 100644
--- a/erpnext/accounts/doctype/payment_tool/payment_tool.py
+++ b/erpnext/accounts/doctype/payment_tool/payment_tool.py
@@ -20,15 +20,15 @@
 		jv.company = self.company
 		jv.cheque_no = self.reference_no
 		jv.cheque_date = self.reference_date
-		
-		party_account_currency, party_account_type = frappe.db.get_value("Account", self.party_account, 
+
+		party_account_currency, party_account_type = frappe.db.get_value("Account", self.party_account,
 			["account_currency", "account_type"])
-		
+
 		bank_account_currency, bank_account_type = None, None
 		if self.payment_account:
-			bank_account_currency, bank_account_type = frappe.db.get_value("Account", self.payment_account, 
+			bank_account_currency, bank_account_type = frappe.db.get_value("Account", self.payment_account,
 				["account_currency", "account_type"])
-		
+
 		if not self.total_payment_amount:
 			frappe.throw(_("Please enter Payment Amount in atleast one row"))
 
@@ -36,11 +36,11 @@
 			if not frappe.db.get_value(v.against_voucher_type, {"name": v.against_voucher_no}):
 				frappe.throw(_("Row {0}: {1} is not a valid {2}").format(v.idx, v.against_voucher_no,
 					v.against_voucher_type))
-			
+
 			if v.payment_amount:
 				exchange_rate = get_exchange_rate(self.party_account, party_account_currency,
 					self.company, v.against_voucher_type, v.against_voucher_no)
-				
+
 				d1 = jv.append("accounts")
 				d1.account = self.party_account
 				d1.party_type = self.party_type
@@ -56,7 +56,7 @@
 				d1.reference_name = v.against_voucher_no
 				d1.is_advance = 'Yes' \
 					if v.against_voucher_type in ['Sales Order', 'Purchase Order'] else 'No'
-					
+
 				amount = flt(d1.debit_in_account_currency) - flt(d1.credit_in_account_currency)
 				if bank_account_currency == party_account_currency:
 					total_payment_amount += amount
@@ -65,27 +65,27 @@
 
 		d2 = jv.append("accounts")
 		if self.payment_account:
-			bank_account_currency, bank_account_type = frappe.db.get_value("Account", self.payment_account, 
+			bank_account_currency, bank_account_type = frappe.db.get_value("Account", self.payment_account,
 				["account_currency", "account_type"])
-				
+
 			d2.account = self.payment_account
 			d2.account_currency = bank_account_currency
 			d2.account_type = bank_account_type
-			d2.exchange_rate = get_exchange_rate(self.payment_account, bank_account_currency, self.company, 
-				debit=(abs(total_payment_amount) if total_payment_amount < 0 else 0), 
+			d2.exchange_rate = get_exchange_rate(self.payment_account, bank_account_currency, self.company,
+				debit=(abs(total_payment_amount) if total_payment_amount < 0 else 0),
 				credit=(total_payment_amount if total_payment_amount > 0 else 0))
 			d2.account_balance = get_balance_on(self.payment_account)
-		
+
 		amount_field_bank = 'debit_in_account_currency' if total_payment_amount < 0 \
 			else 'credit_in_account_currency'
-		
+
 		d2.set(amount_field_bank, abs(total_payment_amount))
-		
+
 		company_currency = frappe.db.get_value("Company", self.company, "default_currency")
 		if party_account_currency != company_currency or \
 			(bank_account_currency and bank_account_currency != company_currency):
 				jv.multi_currency = 1
-			
+
 		jv.set_amounts_in_company_currency()
 		jv.set_total_debit_credit()
 
@@ -150,7 +150,7 @@
 	return order_list
 
 @frappe.whitelist()
-def get_against_voucher_amount(against_voucher_type, against_voucher_no, party_account, company):
+def get_against_voucher_details(against_voucher_type, against_voucher_no, party_account, company):
 	party_account_currency = get_account_currency(party_account)
 	company_currency = frappe.db.get_value("Company", company, "default_currency")
 	ref_field = "base_grand_total" if party_account_currency == company_currency else "grand_total"
diff --git a/erpnext/accounts/doctype/payment_tool_detail/payment_tool_detail.json b/erpnext/accounts/doctype/payment_tool_detail/payment_tool_detail.json
index 765aa93..66447b0 100644
--- a/erpnext/accounts/doctype/payment_tool_detail/payment_tool_detail.json
+++ b/erpnext/accounts/doctype/payment_tool_detail/payment_tool_detail.json
@@ -16,14 +16,16 @@
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
-   "in_list_view": 1, 
+   "in_list_view": 0, 
    "label": "Against Voucher Type", 
    "length": 0, 
    "no_copy": 0, 
    "options": "DocType", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "print_width": "", 
    "read_only": 0, 
    "report_hide": 0, 
@@ -41,6 +43,7 @@
    "fieldtype": "Dynamic Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Against Voucher No", 
@@ -49,6 +52,7 @@
    "options": "against_voucher_type", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -60,10 +64,36 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "fieldname": "due_date", 
+   "fieldtype": "Date", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 1, 
+   "label": "Due Date", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 1, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "column_break_3", 
    "fieldtype": "Column Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "length": 0, 
@@ -71,6 +101,7 @@
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -86,6 +117,7 @@
    "fieldtype": "Currency", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Total Amount", 
@@ -94,6 +126,7 @@
    "options": "party_account_currency", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -109,6 +142,7 @@
    "fieldtype": "Currency", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Outstanding Amount", 
@@ -117,6 +151,7 @@
    "options": "party_account_currency", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -132,6 +167,7 @@
    "fieldtype": "Currency", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Payment Amount", 
@@ -140,6 +176,7 @@
    "options": "party_account_currency", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -150,13 +187,14 @@
  ], 
  "hide_heading": 0, 
  "hide_toolbar": 0, 
+ "idx": 0, 
  "in_create": 0, 
  "in_dialog": 0, 
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 1, 
  "max_attachments": 0, 
- "modified": "2015-11-16 06:29:51.626386", 
+ "modified": "2016-05-05 06:22:24.736160", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Payment Tool Detail", 
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index c241288..3120e73 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -667,9 +667,12 @@
 def get_list_context(context=None):
 	from erpnext.controllers.website_list_for_contact import get_list_context
 	list_context = get_list_context(context)
-	list_context["title"] = _("My Invoices")
-	list_context["show_sidebar"] = True
-	list_context["show_search"] = True
+	list_context.update({
+		'show_sidebar': True,
+		'show_search': True,
+		'no_breadcrumbs': True,
+		'title': _('Invoices'),
+	})
 	return list_context
 
 @frappe.whitelist()
diff --git a/erpnext/accounts/page/financial_analytics/financial_analytics.js b/erpnext/accounts/page/financial_analytics/financial_analytics.js
index ef373aa..c892738 100644
--- a/erpnext/accounts/page/financial_analytics/financial_analytics.js
+++ b/erpnext/accounts/page/financial_analytics/financial_analytics.js
@@ -12,7 +12,7 @@
 
 };
 
-frappe.require("assets/erpnext/js/account_tree_grid.js");
+{% include "erpnext/public/js/account_tree_grid.js" %}
 
 erpnext.FinancialAnalytics = erpnext.AccountTreeGrid.extend({
 	filters: [
diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.js b/erpnext/accounts/report/balance_sheet/balance_sheet.js
index 933b40e..a20d47c 100644
--- a/erpnext/accounts/report/balance_sheet/balance_sheet.js
+++ b/erpnext/accounts/report/balance_sheet/balance_sheet.js
@@ -1,6 +1,8 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/financial_statements.js");
+frappe.require("assets/erpnext/js/financial_statements.js", function() {
+	frappe.query_reports["Balance Sheet"] = erpnext.financial_statements;
+});
 
-frappe.query_reports["Balance Sheet"] = erpnext.financial_statements;
+
diff --git a/erpnext/accounts/report/cash_flow/cash_flow.js b/erpnext/accounts/report/cash_flow/cash_flow.js
index 464bd17..f5ddd15 100644
--- a/erpnext/accounts/report/cash_flow/cash_flow.js
+++ b/erpnext/accounts/report/cash_flow/cash_flow.js
@@ -1,12 +1,12 @@
 // Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.require("assets/erpnext/js/financial_statements.js");
+frappe.require("assets/erpnext/js/financial_statements.js", function() {
+	frappe.query_reports["Cash Flow"] = erpnext.financial_statements;
 
-frappe.query_reports["Cash Flow"] = erpnext.financial_statements;
-
-frappe.query_reports["Cash Flow"]["filters"].push({
-	"fieldname": "accumulated_values",
-	"label": __("Accumulated Values"),
-	"fieldtype": "Check"
-})
\ No newline at end of file
+	frappe.query_reports["Cash Flow"]["filters"].push({
+		"fieldname": "accumulated_values",
+		"label": __("Accumulated Values"),
+		"fieldtype": "Check"
+	});
+});
\ No newline at end of file
diff --git a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py
index f1e706e..9e7cdb6 100644
--- a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py
+++ b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.py
@@ -14,7 +14,7 @@
 	item_list = get_items(filters)
 	aii_account_map = get_aii_accounts()
 	if item_list:
-		item_tax, tax_accounts = get_tax_accounts(item_list, columns)
+		item_row_tax, tax_accounts = get_tax_accounts(item_list, columns)
 
 	columns.append({
 		"fieldname": "currency",
@@ -23,7 +23,7 @@
 		"width": 80
 	})
 	company_currency = frappe.db.get_value("Company", filters.company, "default_currency")
-	print company_currency
+	
 	data = []
 	for d in item_list:
 		purchase_receipt = None
@@ -39,7 +39,7 @@
 			purchase_receipt, expense_account, d.qty, d.base_net_rate, d.base_net_amount]
 
 		for tax in tax_accounts:
-			row.append(item_tax.get(d.parent, {}).get(d.item_code, {}).get(tax, 0))
+			row.append(item_row_tax.get(d.name, {}).get(tax, 0))
 
 		total_tax = sum(row[last_col:])
 		row += [total_tax, d.base_net_amount + total_tax, company_currency]
@@ -76,29 +76,40 @@
 	conditions = get_conditions(filters)
 	match_conditions = frappe.build_match_conditions("Purchase Invoice")
 
-	return frappe.db.sql("""select pi_item.parent, pi.posting_date, pi.credit_to, pi.company,
-		pi.supplier, pi.remarks, pi.base_net_total, pi_item.item_code, pi_item.item_name, pi_item.item_group,
-		pi_item.project, pi_item.purchase_order, pi_item.purchase_receipt, pi_item.po_detail,
-		pi_item.expense_account, pi_item.qty, pi_item.base_net_rate, pi_item.base_net_amount, pi.supplier_name
+	return frappe.db.sql("""
+		select 
+			pi_item.name, pi_item.parent, pi.posting_date, pi.credit_to, pi.company,
+			pi.supplier, pi.remarks, pi.base_net_total, pi_item.item_code, pi_item.item_name, 
+			pi_item.item_group, pi_item.project, pi_item.purchase_order, pi_item.purchase_receipt, 
+			pi_item.po_detail, pi_item.expense_account, pi_item.qty, pi_item.base_net_rate, 
+			pi_item.base_net_amount, pi.supplier_name
 		from `tabPurchase Invoice` pi, `tabPurchase Invoice Item` pi_item
 		where pi.name = pi_item.parent and pi.docstatus = 1 %s %s
-		order by pi.posting_date desc, pi_item.item_code desc""" % (conditions, match_conditions), filters, as_dict=1)
+		order by pi.posting_date desc, pi_item.item_code desc
+	""" % (conditions, match_conditions), filters, as_dict=1)
 
 def get_aii_accounts():
 	return dict(frappe.db.sql("select name, stock_received_but_not_billed from tabCompany"))
 
 def get_tax_accounts(item_list, columns):
 	import json
-	item_tax = {}
+	item_row_tax = {}
 	tax_accounts = []
-	invoice_wise_items = {}
+	invoice_item_row = {}
+	item_row_map = {}
 	for d in item_list:
-		invoice_wise_items.setdefault(d.parent, []).append(d)
+		invoice_item_row.setdefault(d.parent, []).append(d)
+		item_row_map.setdefault(d.parent, {}).setdefault(d.item_code, []).append(d)
 
-	tax_details = frappe.db.sql("""select parent, account_head, item_wise_tax_detail, charge_type, base_tax_amount_after_discount_amount
-		from `tabPurchase Taxes and Charges` where parenttype = 'Purchase Invoice'
-		and docstatus = 1 and (account_head is not null and account_head != '') and category in ('Total', 'Valuation and Total')
-		and parent in (%s)""" % ', '.join(['%s']*len(invoice_wise_items)), tuple(invoice_wise_items.keys()))
+	tax_details = frappe.db.sql("""
+		select 
+			parent, account_head, item_wise_tax_detail, charge_type, base_tax_amount_after_discount_amount
+		from `tabPurchase Taxes and Charges` 
+		where parenttype = 'Purchase Invoice' and docstatus = 1 
+			and (account_head is not null and account_head != '') 
+			and category in ('Total', 'Valuation and Total')
+			and parent in (%s)
+		""" % ', '.join(['%s']*len(invoice_item_row)), tuple(invoice_item_row.keys()))
 
 	for parent, account_head, item_wise_tax_detail, charge_type, tax_amount in tax_details:
 		if account_head not in tax_accounts:
@@ -107,19 +118,26 @@
 		if item_wise_tax_detail:
 			try:
 				item_wise_tax_detail = json.loads(item_wise_tax_detail)
-				for item, tax_amount in item_wise_tax_detail.items():
-					item_tax.setdefault(parent, {}).setdefault(item, {})[account_head] = \
-						flt(tax_amount[1]) if isinstance(tax_amount, list) else flt(tax_amount)
-
+				
+				for item_code, tax_amount in item_wise_tax_detail.items():
+					tax_amount = flt(tax_amount[1]) if isinstance(tax_amount, list) else flt(tax_amount)
+					
+					item_net_amount = sum([flt(d.base_net_amount) 
+						for d in item_row_map.get(parent, {}).get(item_code, [])])
+					
+					for d in item_row_map.get(parent, {}).get(item_code, []):
+						item_tax_amount = flt((tax_amount * d.base_net_amount) / item_net_amount) if item_net_amount else 0
+						item_row_tax.setdefault(d.name, {})[account_head] = item_tax_amount
+						
 			except ValueError:
 				continue
 		elif charge_type == "Actual" and tax_amount:
-			for d in invoice_wise_items.get(parent, []):
-				item_tax.setdefault(parent, {}).setdefault(d.item_code, {})[account_head] = \
-					(tax_amount * d.base_net_amount) / d.base_net_total
+			for d in invoice_item_row.get(parent, []):
+				item_row_tax.setdefault(d.name, {})[account_head] = \
+					flt((tax_amount * d.base_net_amount) / d.base_net_total)
 
 	tax_accounts.sort()
 	columns += [account_head + ":Currency/currency:80" for account_head in tax_accounts]
 	columns += ["Total Tax:Currency/currency:80", "Total:Currency/currency:80"]
 
-	return item_tax, tax_accounts
+	return item_row_tax, tax_accounts
diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
index 2401202..beca96e 100644
--- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
+++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.py
@@ -13,7 +13,7 @@
 
 	item_list = get_items(filters)
 	if item_list:
-		item_tax, tax_accounts = get_tax_accounts(item_list, columns)
+		item_row_tax, tax_accounts = get_tax_accounts(item_list, columns)
 	columns.append({
 		"fieldname": "currency",
 		"label": _("Currency"),
@@ -36,7 +36,7 @@
 			delivery_note, d.income_account, d.qty, d.base_net_rate, d.base_net_amount]
 
 		for tax in tax_accounts:
-			row.append(item_tax.get(d.parent, {}).get(d.item_code, {}).get(tax, 0))
+			row.append(item_row_tax.get(d.name, {}).get(tax, 0))
 
 		total_tax = sum(row[last_col:])
 		row += [total_tax, d.base_net_amount + total_tax, company_currency]
@@ -73,49 +73,66 @@
 
 def get_items(filters):
 	conditions = get_conditions(filters)
-	return frappe.db.sql("""select si_item.parent, si.posting_date, si.debit_to, si.project,
-		si.customer, si.remarks, si.territory, si.company, si.base_net_total, si_item.item_code, si_item.item_name,
-		si_item.item_group, si_item.sales_order, si_item.delivery_note, si_item.income_account,
-		si_item.qty, si_item.base_net_rate, si_item.base_net_amount, si.customer_name,
-		si.customer_group, si_item.so_detail
+	return frappe.db.sql("""
+		select
+			si_item.name, si_item.parent, si.posting_date, si.debit_to, si.project,
+			si.customer, si.remarks, si.territory, si.company, si.base_net_total, 
+			si_item.item_code, si_item.item_name, si_item.item_group, si_item.sales_order, 
+			si_item.delivery_note, si_item.income_account, si_item.qty, 
+			si_item.base_net_rate, si_item.base_net_amount, si.customer_name,
+			si.customer_group, si_item.so_detail
 		from `tabSales Invoice` si, `tabSales Invoice Item` si_item
 		where si.name = si_item.parent and si.docstatus = 1 %s
 		order by si.posting_date desc, si_item.item_code desc""" % conditions, filters, as_dict=1)
 
 def get_tax_accounts(item_list, columns):
 	import json
-	item_tax = {}
+	item_row_tax = {}
 	tax_accounts = []
-	invoice_wise_items = {}
+	invoice_item_row = {}
+	item_row_map = {}
 	for d in item_list:
-		invoice_wise_items.setdefault(d.parent, []).append(d)
+		invoice_item_row.setdefault(d.parent, []).append(d)
+		item_row_map.setdefault(d.parent, {}).setdefault(d.item_code, []).append(d)
 
-	tax_details = frappe.db.sql("""select parent, account_head, item_wise_tax_detail,
-		charge_type, base_tax_amount_after_discount_amount
-		from `tabSales Taxes and Charges` where parenttype = 'Sales Invoice'
-		and docstatus = 1 and (account_head is not null and account_head != '')
-		and parent in (%s)""" % ', '.join(['%s']*len(invoice_wise_items)),
-		tuple(invoice_wise_items.keys()))
+	tax_details = frappe.db.sql("""
+		select 
+			parent, account_head, item_wise_tax_detail,
+			charge_type, base_tax_amount_after_discount_amount
+		from `tabSales Taxes and Charges` 
+		where 
+			parenttype = 'Sales Invoice' and docstatus = 1 
+			and (account_head is not null and account_head != '')
+			and parent in (%s)
+	""" % ', '.join(['%s']*len(invoice_item_row)), tuple(invoice_item_row.keys()))
 
 	for parent, account_head, item_wise_tax_detail, charge_type, tax_amount in tax_details:
 		if account_head not in tax_accounts:
 			tax_accounts.append(account_head)
-
+			
 		if item_wise_tax_detail:
 			try:
 				item_wise_tax_detail = json.loads(item_wise_tax_detail)
-				for item, tax_amount in item_wise_tax_detail.items():
-					item_tax.setdefault(parent, {}).setdefault(item, {})[account_head] = \
-						 flt(tax_amount[1]) if isinstance(tax_amount, list) else flt(tax_amount)
+
+				for item_code, tax_amount in item_wise_tax_detail.items():
+					tax_amount = flt(tax_amount[1]) if isinstance(tax_amount, list) else flt(tax_amount)
+					
+					item_net_amount = sum([flt(d.base_net_amount) 
+						for d in item_row_map.get(parent, {}).get(item_code, [])])
+						
+					for d in item_row_map.get(parent, {}).get(item_code, []):
+						item_tax_amount = flt((tax_amount * d.base_net_amount) / item_net_amount) if item_net_amount else 0
+						item_row_tax.setdefault(d.name, {})[account_head] = item_tax_amount
+			
 			except ValueError:
 				continue
 		elif charge_type == "Actual" and tax_amount:
-			for d in invoice_wise_items.get(parent, []):
-				item_tax.setdefault(parent, {}).setdefault(d.item_code, {})[account_head] = \
+			for d in invoice_item_row.get(parent, []):
+				item_row_tax.setdefault(d.name, {})[account_head] = \
 					flt((tax_amount * d.base_net_amount) / d.base_net_total)
 
 	tax_accounts.sort()
 	columns += [account_head + ":Currency/currency:80" for account_head in tax_accounts]
 	columns += ["Total Tax:Currency/currency:80", "Total:Currency/currency:80"]
 
-	return item_tax, tax_accounts
+	return item_row_tax, tax_accounts
diff --git a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js
index 98a972b..91ec9d9 100644
--- a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js
+++ b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js
@@ -1,15 +1,12 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/financial_statements.js");
+frappe.require("assets/erpnext/js/financial_statements.js", function() {
+	frappe.query_reports["Profit and Loss Statement"] = $.extend({}, erpnext.financial_statements);
 
-frappe.query_reports["Profit and Loss Statement"] = $.extend({}, erpnext.financial_statements);
-
-frappe.query_reports["Profit and Loss Statement"]["filters"].push({
-	"fieldname": "accumulated_values",
-	"label": __("Accumulated Values"),
-	"fieldtype": "Check"
-});
-
-console.log(frappe.query_reports["Profit and Loss Statement"]);
-
+	frappe.query_reports["Profit and Loss Statement"]["filters"].push({
+		"fieldname": "accumulated_values",
+		"label": __("Accumulated Values"),
+		"fieldtype": "Check"
+	});
+});
\ No newline at end of file
diff --git a/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.js b/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.js
index 4b34ae5..cc00b2a 100644
--- a/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.js
+++ b/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.js
@@ -1,8 +1,8 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/purchase_trends_filters.js");
-
-frappe.query_reports["Purchase Invoice Trends"] = {
-	filters: get_filters()
- }
\ No newline at end of file
+frappe.require("assets/erpnext/js/purchase_trends_filters.js", function() {
+	frappe.query_reports["Purchase Invoice Trends"] = {
+		filters: get_filters()
+	}
+});
\ No newline at end of file
diff --git a/erpnext/accounts/report/purchase_register/purchase_register.py b/erpnext/accounts/report/purchase_register/purchase_register.py
index 7934bf2..53cb7af66 100644
--- a/erpnext/accounts/report/purchase_register/purchase_register.py
+++ b/erpnext/accounts/report/purchase_register/purchase_register.py
@@ -119,16 +119,22 @@
 
 def get_invoices(filters):
 	conditions = get_conditions(filters)
-	return frappe.db.sql("""select name, posting_date, credit_to, supplier, supplier_name,
-		bill_no, bill_date, remarks, base_net_total, base_grand_total, outstanding_amount
-		from `tabPurchase Invoice` where docstatus = 1 %s
+	return frappe.db.sql("""
+		select 
+			name, posting_date, credit_to, supplier, supplier_name,
+			bill_no, bill_date, remarks, base_net_total, base_grand_total, outstanding_amount
+		from `tabPurchase Invoice` 
+		where docstatus = 1 %s
 		order by posting_date desc, name desc""" % conditions, filters, as_dict=1)
 
 
 def get_invoice_expense_map(invoice_list):
-	expense_details = frappe.db.sql("""select parent, expense_account, sum(base_net_amount) as amount
-		from `tabPurchase Invoice Item` where parent in (%s) group by parent, expense_account""" %
-		', '.join(['%s']*len(invoice_list)), tuple([inv.name for inv in invoice_list]), as_dict=1)
+	expense_details = frappe.db.sql("""
+		select parent, expense_account, sum(base_net_amount) as amount
+		from `tabPurchase Invoice Item` 
+		where parent in (%s) 
+		group by parent, expense_account
+	""" % ', '.join(['%s']*len(invoice_list)), tuple([inv.name for inv in invoice_list]), as_dict=1)
 
 	invoice_expense_map = {}
 	for d in expense_details:
@@ -138,9 +144,12 @@
 	return invoice_expense_map
 
 def get_invoice_tax_map(invoice_list, invoice_expense_map, expense_accounts):
-	tax_details = frappe.db.sql("""select parent, account_head, sum(base_tax_amount_after_discount_amount) as tax_amount
-		from `tabPurchase Taxes and Charges` where parent in (%s) group by parent, account_head""" %
-		', '.join(['%s']*len(invoice_list)), tuple([inv.name for inv in invoice_list]), as_dict=1)
+	tax_details = frappe.db.sql("""
+		select parent, account_head, sum(base_tax_amount_after_discount_amount) as tax_amount
+		from `tabPurchase Taxes and Charges` 
+		where parent in (%s) and category in ('Total', 'Valuation and Total')
+		group by parent, account_head
+	""" % ', '.join(['%s']*len(invoice_list)), tuple([inv.name for inv in invoice_list]), as_dict=1)
 
 	invoice_tax_map = {}
 	for d in tax_details:
@@ -156,10 +165,11 @@
 	return invoice_expense_map, invoice_tax_map
 
 def get_invoice_po_pr_map(invoice_list):
-	pi_items = frappe.db.sql("""select parent, purchase_order, purchase_receipt, po_detail,
-		project from `tabPurchase Invoice Item` where parent in (%s)
-		and (ifnull(purchase_order, '') != '' or ifnull(purchase_receipt, '') != '')""" %
-		', '.join(['%s']*len(invoice_list)), tuple([inv.name for inv in invoice_list]), as_dict=1)
+	pi_items = frappe.db.sql("""
+		select parent, purchase_order, purchase_receipt, po_detail, project 
+		from `tabPurchase Invoice Item` 
+		where parent in (%s) and (ifnull(purchase_order, '') != '' or ifnull(purchase_receipt, '') != '')
+	""" % ', '.join(['%s']*len(invoice_list)), tuple([inv.name for inv in invoice_list]), as_dict=1)
 
 	invoice_po_pr_map = {}
 	for d in pi_items:
diff --git a/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.js b/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.js
index 471e7ba..0f92223 100644
--- a/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.js
+++ b/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.js
@@ -1,8 +1,8 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/sales_trends_filters.js");
-
-frappe.query_reports["Sales Invoice Trends"] = {
-	filters: get_filters()
- }
\ No newline at end of file
+frappe.require("assets/erpnext/js/sales_trends_filters.js", function() {
+	frappe.query_reports["Sales Invoice Trends"] = {
+		filters: get_filters()
+	}
+});
\ No newline at end of file
diff --git a/erpnext/accounts/report/trial_balance/trial_balance.js b/erpnext/accounts/report/trial_balance/trial_balance.js
index 97c8f6c..a20b1cb 100644
--- a/erpnext/accounts/report/trial_balance/trial_balance.js
+++ b/erpnext/accounts/report/trial_balance/trial_balance.js
@@ -1,65 +1,66 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/financial_statements.js");
-
-frappe.query_reports["Trial Balance"] = {
-	"filters": [
-		{
-			"fieldname": "company",
-			"label": __("Company"),
-			"fieldtype": "Link",
-			"options": "Company",
-			"default": frappe.defaults.get_user_default("Company"),
-			"reqd": 1
-		},
-		{
-			"fieldname": "fiscal_year",
-			"label": __("Fiscal Year"),
-			"fieldtype": "Link",
-			"options": "Fiscal Year",
-			"default": frappe.defaults.get_user_default("fiscal_year"),
-			"reqd": 1,
-			"on_change": function(query_report) {
-				var fiscal_year = query_report.get_values().fiscal_year;
-				if (!fiscal_year) {
-					return;
+frappe.require("assets/erpnext/js/financial_statements.js", function() {
+	frappe.query_reports["Trial Balance"] = {
+		"filters": [
+			{
+				"fieldname": "company",
+				"label": __("Company"),
+				"fieldtype": "Link",
+				"options": "Company",
+				"default": frappe.defaults.get_user_default("Company"),
+				"reqd": 1
+			},
+			{
+				"fieldname": "fiscal_year",
+				"label": __("Fiscal Year"),
+				"fieldtype": "Link",
+				"options": "Fiscal Year",
+				"default": frappe.defaults.get_user_default("fiscal_year"),
+				"reqd": 1,
+				"on_change": function(query_report) {
+					var fiscal_year = query_report.get_values().fiscal_year;
+					if (!fiscal_year) {
+						return;
+					}
+					frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+						var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
+						query_report.filters_by_name.from_date.set_input(fy.year_start_date);
+						query_report.filters_by_name.to_date.set_input(fy.year_end_date);
+						query_report.trigger_refresh();
+					});
 				}
-				frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
-					var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
-					query_report.filters_by_name.from_date.set_input(fy.year_start_date);
-					query_report.filters_by_name.to_date.set_input(fy.year_end_date);
-					query_report.trigger_refresh();
-				});
-			}
-		},
-		{
-			"fieldname": "from_date",
-			"label": __("From Date"),
-			"fieldtype": "Date",
-			"default": frappe.defaults.get_user_default("year_start_date"),
-		},
-		{
-			"fieldname": "to_date",
-			"label": __("To Date"),
-			"fieldtype": "Date",
-			"default": frappe.defaults.get_user_default("year_end_date"),
-		},
-		{
-			"fieldname": "with_period_closing_entry",
-			"label": __("Period Closing Entry"),
-			"fieldtype": "Check",
-			"default": 1
-		},
-		{
-			"fieldname": "show_zero_values",
-			"label": __("Show zero values"),
-			"fieldtype": "Check"
-		},
-	],
-	"formatter": erpnext.financial_statements.formatter,
-	"tree": true,
-	"name_field": "account",
-	"parent_field": "parent_account",
-	"initial_depth": 3
-}
+			},
+			{
+				"fieldname": "from_date",
+				"label": __("From Date"),
+				"fieldtype": "Date",
+				"default": frappe.defaults.get_user_default("year_start_date"),
+			},
+			{
+				"fieldname": "to_date",
+				"label": __("To Date"),
+				"fieldtype": "Date",
+				"default": frappe.defaults.get_user_default("year_end_date"),
+			},
+			{
+				"fieldname": "with_period_closing_entry",
+				"label": __("Period Closing Entry"),
+				"fieldtype": "Check",
+				"default": 1
+			},
+			{
+				"fieldname": "show_zero_values",
+				"label": __("Show zero values"),
+				"fieldtype": "Check"
+			},
+		],
+		"formatter": erpnext.financial_statements.formatter,
+		"tree": true,
+		"name_field": "account",
+		"parent_field": "parent_account",
+		"initial_depth": 3
+	}
+});
+
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index 06197eb..48668fa 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -473,7 +473,8 @@
 			'posting_date': d.posting_date,
 			'invoice_amount': flt(d.invoice_amount),
 			'payment_amount': flt(d.payment_amount),
-			'outstanding_amount': flt(d.invoice_amount - d.payment_amount, precision)
+			'outstanding_amount': flt(d.invoice_amount - d.payment_amount, precision),
+			'due_date': frappe.db.get_value(d.voucher_type, d.voucher_no, "due_date")
 		})
 
 	return outstanding_invoices
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.js b/erpnext/buying/doctype/purchase_common/purchase_common.js
index b38b90e..8617a26 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.js
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.js
@@ -4,9 +4,8 @@
 frappe.provide("erpnext.buying");
 
 cur_frm.cscript.tax_table = "Purchase Taxes and Charges";
-{% include 'erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.js' %}
 
-frappe.require("assets/erpnext/js/controllers/transaction.js");
+{% include 'erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.js' %}
 
 cur_frm.email_field = "contact_email";
 
@@ -129,12 +128,12 @@
 				item.rejected_qty = flt(item.received_qty - item.qty, precision("rejected_qty", item));
 			}
 		}
-		
+
 		this._super(doc, cdt, cdn);
 		this.conversion_factor(doc, cdt, cdn);
-		
+
 	},
-	
+
 	received_qty: function(doc, cdt, cdn) {
 		var item = frappe.get_doc(cdt, cdn);
 		frappe.model.round_floats_in(item, ["qty", "received_qty"]);
@@ -142,7 +141,7 @@
 		item.qty = (item.qty < item.received_qty) ? item.qty : item.received_qty;
 		this.qty(doc, cdt, cdn);
 	},
-	
+
 	rejected_qty: function(doc, cdt, cdn) {
 		var item = frappe.get_doc(cdt, cdn);
 		frappe.model.round_floats_in(item, ["received_qty", "rejected_qty"]);
@@ -152,7 +151,7 @@
 						__(frappe.meta.get_label(item.doctype, "received_qty", item.name))]));
 			item.qty = item.rejected_qty = 0.0;
 		} else {
-			
+
 			item.qty = flt(item.received_qty - item.rejected_qty, precision("qty", item));
 		}
 
@@ -236,7 +235,7 @@
 		erpnext.utils.get_address_display(this.frm, "shipping_address",
 			"shipping_address_display", is_your_company_address=true)
 	},
-	
+
 	tc_name: function() {
 		this.get_terms();
 	}
diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
index b8002dd..7218531 100644
--- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
+++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
@@ -4,7 +4,7 @@
 
 {% include 'erpnext/buying/doctype/purchase_common/purchase_common.js' %};
 
-frappe.require("assets/erpnext/js/utils.js");
+
 
 frappe.ui.form.on("Request for Quotation",{
 	setup: function(frm){
diff --git a/erpnext/buying/doctype/supplier/supplier.js b/erpnext/buying/doctype/supplier/supplier.js
index db8ab02..d502a3d 100644
--- a/erpnext/buying/doctype/supplier/supplier.js
+++ b/erpnext/buying/doctype/supplier/supplier.js
@@ -3,7 +3,6 @@
 
 frappe.ui.form.on("Supplier", {
 	before_load: function(frm) {
-		frm.hide_first = true;
 		frappe.setup_language_field(frm);
 	},
 	refresh: function(frm) {
diff --git a/erpnext/buying/report/purchase_order_trends/purchase_order_trends.js b/erpnext/buying/report/purchase_order_trends/purchase_order_trends.js
index dcf1df1..f7fe90f 100644
--- a/erpnext/buying/report/purchase_order_trends/purchase_order_trends.js
+++ b/erpnext/buying/report/purchase_order_trends/purchase_order_trends.js
@@ -1,8 +1,8 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/purchase_trends_filters.js");
-
-frappe.query_reports["Purchase Order Trends"] = {
-	filters: get_filters()
- }
\ No newline at end of file
+frappe.require("assets/erpnext/js/purchase_trends_filters.js", function() {
+	frappe.query_reports["Purchase Order Trends"] = {
+		filters: get_filters()
+	}
+});
\ No newline at end of file
diff --git a/erpnext/config/accounts.py b/erpnext/config/accounts.py
index 72ed0f9..d0629e7 100644
--- a/erpnext/config/accounts.py
+++ b/erpnext/config/accounts.py
@@ -221,6 +221,11 @@
 					"name": "Period Closing Voucher",
 					"description": _("Close Balance Sheet and book Profit or Loss.")
 				},
+				{
+					"type": "doctype",
+					"name": "Asset Movement",
+					"description": _("Transfer an asset from one warehouse to another")
+				},
 			]
 		},
 		{
diff --git a/erpnext/controllers/sales_and_purchase_return.py b/erpnext/controllers/sales_and_purchase_return.py
index 9187706..d5c677c 100644
--- a/erpnext/controllers/sales_and_purchase_return.py
+++ b/erpnext/controllers/sales_and_purchase_return.py
@@ -53,17 +53,18 @@
 
 	valid_items = frappe._dict()
 
-	select_fields = "item_code, sum(qty) as qty, rate" if doc.doctype=="Purchase Invoice" \
-		else "item_code, sum(qty) as qty, rate, serial_no, batch_no"
+	select_fields = "item_code, qty" if doc.doctype=="Purchase Invoice" \
+		else "item_code, qty, serial_no, batch_no"
 
-	for d in frappe.db.sql("""select {0} from `tab{1} Item` where parent = %s
-		group by item_code""".format(select_fields, doc.doctype), doc.return_against, as_dict=1):
-			valid_items.setdefault(d.item_code, d)
+	for d in frappe.db.sql("""select {0} from `tab{1} Item` where parent = %s"""
+		.format(select_fields, doc.doctype), doc.return_against, as_dict=1):
+			valid_items = get_ref_item_dict(valid_items, d)
+			
 
 	if doc.doctype in ("Delivery Note", "Sales Invoice"):
 		for d in frappe.db.sql("""select item_code, sum(qty) as qty, serial_no, batch_no from `tabPacked Item`
 			where parent = %s group by item_code""".format(doc.doctype), doc.return_against, as_dict=1):
-				valid_items.setdefault(d.item_code, d)
+				valid_items = get_ref_item_dict(valid_items, d)
 
 	already_returned_items = get_already_returned_items(doc)
 
@@ -86,7 +87,7 @@
 				elif abs(d.qty) > max_return_qty:
 					frappe.throw(_("Row # {0}: Cannot return more than {1} for Item {2}")
 						.format(d.idx, ref.qty, d.item_code), StockOverReturnError)
-				elif ref.batch_no and d.batch_no != ref.batch_no:
+				elif ref.batch_no and d.batch_no not in ref.batch_no:
 					frappe.throw(_("Row # {0}: Batch No must be same as {1} {2}")
 						.format(d.idx, doc.doctype, doc.return_against))
 				elif ref.serial_no:
@@ -94,9 +95,8 @@
 						frappe.throw(_("Row # {0}: Serial No is mandatory").format(d.idx))
 					else:
 						serial_nos = get_serial_nos(d.serial_no)
-						ref_serial_nos = get_serial_nos(ref.serial_no)
 						for s in serial_nos:
-							if s not in ref_serial_nos:
+							if s not in ref.serial_no:
 								frappe.throw(_("Row # {0}: Serial No {1} does not match with {2} {3}")
 									.format(d.idx, s, doc.doctype, doc.return_against))
 
@@ -107,6 +107,25 @@
 
 	if not items_returned:
 		frappe.throw(_("Atleast one item should be entered with negative quantity in return document"))
+		
+def get_ref_item_dict(valid_items, ref_item_row):
+	from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
+	
+	valid_items.setdefault(ref_item_row.item_code, frappe._dict({
+		"qty": 0,
+		"serial_no": [],
+		"batch_no": []
+	}))
+	item_dict = valid_items[ref_item_row.item_code]
+	item_dict["qty"] += ref_item_row.qty
+	
+	if ref_item_row.get("serial_no"):
+		item_dict["serial_no"] += get_serial_nos(ref_item_row.serial_no)
+		
+	if ref_item_row.get("batch_no"):
+		item_dict["batch_no"].append(ref_item_row.batch_no)
+		
+	return valid_items
 
 def get_already_returned_items(doc):
 	return frappe._dict(frappe.db.sql("""
diff --git a/erpnext/crm/doctype/opportunity/opportunity.js b/erpnext/crm/doctype/opportunity/opportunity.js
index 337b631..c918dad 100644
--- a/erpnext/crm/doctype/opportunity/opportunity.js
+++ b/erpnext/crm/doctype/opportunity/opportunity.js
@@ -2,7 +2,7 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.provide("erpnext.crm");
-frappe.require("assets/erpnext/js/utils.js");
+
 cur_frm.email_field = "contact_email";
 frappe.ui.form.on("Opportunity", {
 	customer: function(frm) {
diff --git a/erpnext/docs/assets/img/accounts/asset-graph.png b/erpnext/docs/assets/img/accounts/asset-graph.png
new file mode 100644
index 0000000..5b300bb
--- /dev/null
+++ b/erpnext/docs/assets/img/accounts/asset-graph.png
Binary files differ
diff --git a/erpnext/docs/assets/img/accounts/asset-movement-using-button.png b/erpnext/docs/assets/img/accounts/asset-movement-using-button.png
new file mode 100644
index 0000000..b9ca68d
--- /dev/null
+++ b/erpnext/docs/assets/img/accounts/asset-movement-using-button.png
Binary files differ
diff --git a/erpnext/docs/assets/img/accounts/asset-movement.png b/erpnext/docs/assets/img/accounts/asset-movement.png
new file mode 100644
index 0000000..39f7b34
--- /dev/null
+++ b/erpnext/docs/assets/img/accounts/asset-movement.png
Binary files differ
diff --git a/erpnext/docs/assets/img/setup/email/email-alert-condition.png b/erpnext/docs/assets/img/setup/email/email-alert-condition.png
new file mode 100644
index 0000000..8ede011
--- /dev/null
+++ b/erpnext/docs/assets/img/setup/email/email-alert-condition.png
Binary files differ
diff --git a/erpnext/docs/assets/img/setup/email/email-alert-subject.png b/erpnext/docs/assets/img/setup/email/email-alert-subject.png
new file mode 100644
index 0000000..671de9b
--- /dev/null
+++ b/erpnext/docs/assets/img/setup/email/email-alert-subject.png
Binary files differ
diff --git a/erpnext/docs/user/manual/en/accounts/managing-fixed-assets.md b/erpnext/docs/user/manual/en/accounts/managing-fixed-assets.md
index 2acdd37..1cdbd1e 100644
--- a/erpnext/docs/user/manual/en/accounts/managing-fixed-assets.md
+++ b/erpnext/docs/user/manual/en/accounts/managing-fixed-assets.md
@@ -45,6 +45,10 @@
 
 In the depreciation entry, the "Accumulated Depreciation Account" is credited and "Depreciation Expense Account" is debited. The related accounts can be set in the Asset Category or Company.
 
+For better visibility, net value of the asset on different depreciation dates are shown in a line graph.
+
+<img class="screenshot" alt="Asset" src="{{docs_base_url}}/assets/img/accounts/asset-graph.png">
+
 
 ## Purchase an asset
 
@@ -71,4 +75,14 @@
 
 You can scrap an asset anytime using the "Scrap Asset" button in the Asset record. The "Gain/Loss Account on Asset Disposal" mentioned in the Company is debited by the Current Value (After Depreciation) of the asset. After scrapping, you can also restore the asset using "Restore Asset" button.
 
-<img class="screenshot" alt="Asset" src="{{docs_base_url}}/assets/img/accounts/scrap-journal-entry.png">
\ No newline at end of file
+<img class="screenshot" alt="Asset" src="{{docs_base_url}}/assets/img/accounts/scrap-journal-entry.png">
+
+## Asset Movement
+
+The movement of the assets (from one warehouse to another) is also tracked via Asset Movement form.
+
+<img class="screenshot" alt="Asset" src="{{docs_base_url}}/assets/img/accounts/asset-movement.png">
+
+There is also a dedicated button "Transfer Asset" inside the Asset form to track the Asset Movement.
+
+<img class="screenshot" alt="Asset" src="{{docs_base_url}}/assets/img/accounts/asset-movement-using-button.png">
\ No newline at end of file
diff --git a/erpnext/docs/user/manual/en/customize-erpnext/articles/making-custom-reports-in-erpnext.md b/erpnext/docs/user/manual/en/customize-erpnext/articles/making-custom-reports-in-erpnext.md
index 46af27e..7bc965b 100644
--- a/erpnext/docs/user/manual/en/customize-erpnext/articles/making-custom-reports-in-erpnext.md
+++ b/erpnext/docs/user/manual/en/customize-erpnext/articles/making-custom-reports-in-erpnext.md
@@ -12,12 +12,12 @@
 
 Query Report is written in SQL which pull values from account's database and fetch in the report. Though SQL queries can be written from front end, like HTML, its restricted in hosted users. Because it will allow users with no access to specific report to query data directly from the database.
 
-Check Purchase Order Item to be Received report in Stock module for example of Query report. Click [here](https://frappe.github.io/frappe/user/guides/reports-and-printing/how-to-make-query-report.html) to learn how to create Query Report.
+Check Purchase Order Item to be Received report in Stock module for example of Query report. Click [here](https://frappe.github.io/frappe/user/en/guides/reports-and-printing/how-to-make-query-report.html) to learn how to create Query Report.
 
 ### 3. Script Report
 
 Script Reports are written in Python and stored on server side. These are complex reports which involves logic and calculation. Since these reports are written on server side, customizing it from hosted account is not possible. 
 
-Check Financial Analytics report in Accounts module for example of Script Report. Click [here](https://frappe.github.io/frappe/user/guides/reports-and-printing/how-to-make-script-reports.html) to learn how to create Script Report.
+Check Financial Analytics report in Accounts module for example of Script Report. Click [here](https://frappe.github.io/frappe/user/en/guides/reports-and-printing/how-to-make-script-reports.html) to learn how to create Script Report.
 
 <!-- markdown --> 
\ No newline at end of file
diff --git a/erpnext/docs/user/manual/en/customize-erpnext/customize-form.md b/erpnext/docs/user/manual/en/customize-erpnext/customize-form.md
index b93d76e..f52cee1 100644
--- a/erpnext/docs/user/manual/en/customize-erpnext/customize-form.md
+++ b/erpnext/docs/user/manual/en/customize-erpnext/customize-form.md
@@ -1,5 +1,5 @@
 <!--markdown-->
-Before we venture to learn form customization tool, click [here](https://frappe.github.io/frappe/user/tutorial/doctypes.html) to understand the architecture of forms in ERPNext. It shall help you in using Customize Form tool more efficiently.
+Before we venture to learn form customization tool, click [here](https://frappe.github.io/frappe/user/en/tutorial/doctypes.html) to understand the architecture of forms in ERPNext. It shall help you in using Customize Form tool more efficiently.
 
 Customize Form is the tool which allows user to customize property of the standard fields, and insert [custom fields]({{docs_base_url}}/user/manual/en/customize-erpnext/custom-field.html) as per the requirement. Let's assume we need to set Project Name field as a mandatory field in the Sales Order form. Following are the steps which shall be followed to achieve this.
 
diff --git a/erpnext/docs/user/manual/en/setting-up/articles/integrating-erpnext-with-other-application.md b/erpnext/docs/user/manual/en/setting-up/articles/integrating-erpnext-with-other-application.md
index 2d2c179..3cbf159 100644
--- a/erpnext/docs/user/manual/en/setting-up/articles/integrating-erpnext-with-other-application.md
+++ b/erpnext/docs/user/manual/en/setting-up/articles/integrating-erpnext-with-other-application.md
@@ -2,6 +2,6 @@
 
 For now, ERPNext has out-of-the-box integration available for some applications like Shopify, your SMS gateway and payment gateway. To integrate ERPNext with other application, you can use REST API of Frappe. Check following links to learn more about REST API of Frappe.
 
-[Frappe Rest API](https://frappe.github.io/frappe/user/guides/integration/rest_api.html)
+[Frappe Rest API](https://frappe.github.io/frappe/user/en/guides/integration/rest_api.html)
 
 <!-- markdown -->
\ No newline at end of file
diff --git a/erpnext/docs/user/manual/en/setting-up/email/email-alerts.md b/erpnext/docs/user/manual/en/setting-up/email/email-alerts.md
index f4cccd3..1a5d13a 100644
--- a/erpnext/docs/user/manual/en/setting-up/email/email-alerts.md
+++ b/erpnext/docs/user/manual/en/setting-up/email/email-alerts.md
@@ -28,6 +28,41 @@
 1. Set the recipients of this alert. The recipient could either be a field of the document or a list of fixed email ids.
 1. Compose the message
 
+
+### Setting a Subject
+You can retrieve the data for a particular field by using `doc.[field_name]`. To use it in your subject / message, you have to surround it with `{{ }}`. These are called [Jinja](http://jinja.pocoo.org/) tags. So, for example to get the name of a document, you use `{{ doc.name }}`. The below example sends an email on saving a Task with the Subject, "TASK##### has been created"
+
+<img class="screenshot" alt="Setting Subject" src="{{docs_base_url}}/assets/img/setup/email/email-alert-subject.png">
+
+### Setting Conditions
+
+Email alerts allow you to set conditions according to the field data in your documents. For example, if you want to recieve an Email if a Lead has been saved as "Interested" as it's status, you put `doc.status == "Interested"` in the conditions textbox. You can also set more complex conditions by combining them.
+
+<img class="screenshot" alt="Setting Condition" src="{{docs_base_url}}/assets/img/setup/email/email-alert-condition.png">
+
+The above example will send an Email Alert when a Task is saved with the status "Open" and the Expected End Date for the Task is the date on or before the date on which it was saved on. 
+
+### Setting a Message
+
+You can use both Jinja Tags (`{{ doc.[field_name] }}`) and HTML tags in the message textbox. 
+
+	<h3>Order Overdue</h3>
+
+	<p>Transaction {{ doc.name }} has exceeded Due Date. Please take necessary action.</p>
+
+	<!-- show last comment -->
+	{% if comments %}
+	Last comment: {{ comments[-1].comment }} by {{ comments[-1].by }}
+	{% endif %}
+
+	<h4>Details</h4>
+
+	<ul>
+	<li>Customer: {{ doc.customer }}
+	<li>Amount: {{ doc.total_amount }}
+	</ul>
+
+
 ---
 
 ### Example
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 64eb88c..1e16c89 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -7,7 +7,7 @@
 app_description = """ERP made simple"""
 app_icon = "icon-th"
 app_color = "#e74c3c"
-app_version = "6.27.12"
+app_version = "6.27.16"
 app_email = "info@erpnext.com"
 app_license = "GNU General Public License (v3)"
 source_link = "https://github.com/frappe/erpnext"
@@ -32,6 +32,8 @@
 on_session_creation = "erpnext.shopping_cart.utils.set_cart_count"
 on_logout = "erpnext.shopping_cart.utils.clear_cart_count"
 
+remember_selected = ['Company', 'Cost Center', 'Project']
+
 # website
 update_website_context = "erpnext.shopping_cart.utils.update_website_context"
 my_account_context = "erpnext.shopping_cart.utils.update_my_account_context"
diff --git a/erpnext/hr/doctype/employee/employee.js b/erpnext/hr/doctype/employee/employee.js
index a7198e3..8857bad 100755
--- a/erpnext/hr/doctype/employee/employee.js
+++ b/erpnext/hr/doctype/employee/employee.js
@@ -4,7 +4,6 @@
 frappe.provide("erpnext.hr");
 erpnext.hr.EmployeeController = frappe.ui.form.Controller.extend({
 	setup: function() {
-		this.frm.hide_first = true;
 		this.frm.fields_dict.user_id.get_query = function(doc, cdt, cdn) {
 			return { query:"frappe.core.doctype.user.user.user_query"} }
 		this.frm.fields_dict.reports_to.get_query = function(doc, cdt, cdn) {
diff --git a/erpnext/hr/doctype/employee_leave_approver/employee_leave_approver.py b/erpnext/hr/doctype/employee_leave_approver/employee_leave_approver.py
index 061f606..fb58d75 100755
--- a/erpnext/hr/doctype/employee_leave_approver/employee_leave_approver.py
+++ b/erpnext/hr/doctype/employee_leave_approver/employee_leave_approver.py
@@ -21,4 +21,4 @@
 		user_role.role = "Leave Approver"
 		and user_role.parent = user.name and
 		user.name != %s 
-		""", name)
\ No newline at end of file
+		""", name or "")
\ No newline at end of file
diff --git a/erpnext/hr/doctype/hr_settings/hr_settings.js b/erpnext/hr/doctype/hr_settings/hr_settings.js
new file mode 100644
index 0000000..6ab523e
--- /dev/null
+++ b/erpnext/hr/doctype/hr_settings/hr_settings.js
@@ -0,0 +1,8 @@
+// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
+
+frappe.ui.form.on('HR Settings', {
+	refresh: function(frm) {
+
+	}
+});
diff --git a/erpnext/hr/doctype/hr_settings/hr_settings.json b/erpnext/hr/doctype/hr_settings/hr_settings.json
index 99625fd..561f013 100644
--- a/erpnext/hr/doctype/hr_settings/hr_settings.json
+++ b/erpnext/hr/doctype/hr_settings/hr_settings.json
@@ -16,12 +16,15 @@
    "fieldtype": "Section Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Employee Settings", 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -39,13 +42,16 @@
    "fieldtype": "Select", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Employee Records to be created by", 
+   "length": 0, 
    "no_copy": 0, 
    "options": "Naming Series\nEmployee Number", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -62,12 +68,15 @@
    "fieldtype": "Check", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Stop Birthday Reminders", 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -83,12 +92,15 @@
    "fieldtype": "Section Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Payroll Settings", 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -105,12 +117,42 @@
    "fieldtype": "Check", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Include holidays in Total no. of Working Days", 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "default": "1", 
+   "description": "Check if you want to send salary slip in mail to each employee while submitting salary slip", 
+   "fieldname": "email_salary_slip_to_employee", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Email Salary Slip to Employee", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -128,7 +170,8 @@
  "is_submittable": 0, 
  "issingle": 1, 
  "istable": 0, 
- "modified": "2015-02-05 05:11:39.153447", 
+ "max_attachments": 0, 
+ "modified": "2016-04-26 05:54:32.501880", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "HR Settings", 
@@ -156,5 +199,6 @@
   }
  ], 
  "read_only": 0, 
- "read_only_onload": 0
+ "read_only_onload": 0, 
+ "sort_order": "ASC"
 }
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.json b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.json
index c92fbb8..17e667e 100644
--- a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.json
+++ b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.json
@@ -15,11 +15,14 @@
    "fieldtype": "Column Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -33,17 +36,20 @@
    "bold": 0, 
    "collapsible": 0, 
    "description": "Leave blank if considered for all employee types", 
-   "fieldname": "employee_type", 
+   "fieldname": "employment_type", 
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
-   "label": "Employee Type", 
+   "label": "Employment Type", 
+   "length": 0, 
    "no_copy": 0, 
    "options": "Employment Type", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -60,13 +66,16 @@
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Branch", 
+   "length": 0, 
    "no_copy": 0, 
    "options": "Branch", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -83,13 +92,16 @@
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Department", 
+   "length": 0, 
    "no_copy": 0, 
    "options": "Department", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -106,13 +118,16 @@
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Designation", 
+   "length": 0, 
    "no_copy": 0, 
    "options": "Designation", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -128,11 +143,14 @@
    "fieldtype": "Column Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -149,13 +167,16 @@
    "fieldtype": "Date", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "From Date", 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -171,13 +192,16 @@
    "fieldtype": "Date", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "To Date", 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -193,13 +217,16 @@
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Leave Type", 
+   "length": 0, 
    "no_copy": 0, 
    "options": "Leave Type", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -216,12 +243,15 @@
    "fieldtype": "Check", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Carry Forward", 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -237,12 +267,15 @@
    "fieldtype": "Float", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "New Leaves Allocated (In Days)", 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -258,13 +291,16 @@
    "fieldtype": "Button", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Allocate", 
+   "length": 0, 
    "no_copy": 0, 
    "options": "allocate_leave", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -282,7 +318,8 @@
  "is_submittable": 0, 
  "issingle": 1, 
  "istable": 0, 
- "modified": "2015-10-28 16:23:57.733900", 
+ "max_attachments": 0, 
+ "modified": "2016-05-05 05:45:33.355366", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Leave Control Panel", 
diff --git a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py
index 77c7ad9..b4561f1 100644
--- a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py
+++ b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.py
@@ -10,27 +10,24 @@
 
 class LeaveControlPanel(Document):
 	def get_employees(self):
-		lst1 = [[self.employee_type,"employment_type"],[self.branch,"branch"],[self.designation,"designation"],[self.department, "department"]]
-		condition = "where "
-		flag = 0
-		for l in lst1:
-			if(l[0]):
-				if flag == 0:
-					condition += l[1] + "= '" + l[0] +"'"
-				else:
-					condition += " and " + l[1]+ "= '" +l[0] +"'"
-				flag = 1
-		emp_query = "select name from `tabEmployee` "
-		if flag == 1:
-			emp_query += condition
-		e = frappe.db.sql(emp_query)
+		conditions, values = [], []
+		for field in ["employment_type", "branch", "designation", "department"]:
+			if self.get(field):
+				conditions.append("{0}=%s".format(field))
+				values.append(self.get(field))
+
+		condition_str = " and " + " and ".join(conditions) if len(conditions) else ""
+
+		e = frappe.db.sql("select name from tabEmployee where status='Active' {condition}"
+			.format(condition=condition_str), tuple(values))
+
 		return e
 
 	def validate_values(self):
 		for f in ["from_date", "to_date", "leave_type", "no_of_days"]:
 			if not self.get(f):
 				frappe.throw(_("{0} is required").format(self.meta.get_label(f)))
-	
+
 	def to_date_validation(self):
 		if date_diff(self.to_date, self.from_date) <= 0:
 			return "Invalid period"
diff --git a/erpnext/hr/doctype/process_payroll/process_payroll.json b/erpnext/hr/doctype/process_payroll/process_payroll.json
index 3bd298e..e3f16a5 100644
--- a/erpnext/hr/doctype/process_payroll/process_payroll.json
+++ b/erpnext/hr/doctype/process_payroll/process_payroll.json
@@ -16,12 +16,15 @@
    "fieldtype": "Section Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Select Employees", 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -37,11 +40,14 @@
    "fieldtype": "Column Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -58,13 +64,16 @@
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Company", 
+   "length": 0, 
    "no_copy": 0, 
    "options": "Company", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -80,35 +89,16 @@
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Branch", 
+   "length": 0, 
    "no_copy": 0, 
    "options": "Branch", 
    "permlevel": 0, 
    "print_hide": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "description": "Check if you want to send salary slip in mail to each employee while submitting salary slip", 
-   "fieldname": "send_email", 
-   "fieldtype": "Check", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Send Email", 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -124,11 +114,14 @@
    "fieldtype": "Column Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -145,13 +138,16 @@
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Department", 
+   "length": 0, 
    "no_copy": 0, 
    "options": "Department", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -167,13 +163,16 @@
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Designation", 
+   "length": 0, 
    "no_copy": 0, 
    "options": "Designation", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -189,13 +188,16 @@
    "fieldtype": "Section Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Select Payroll Year and Month", 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -211,13 +213,16 @@
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Fiscal Year", 
+   "length": 0, 
    "no_copy": 0, 
    "options": "Fiscal Year", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -233,12 +238,15 @@
    "fieldtype": "Column Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -254,13 +262,16 @@
    "fieldtype": "Select", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Month", 
+   "length": 0, 
    "no_copy": 0, 
    "options": "\n01\n02\n03\n04\n05\n06\n07\n08\n09\n10\n11\n12", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -276,13 +287,16 @@
    "fieldtype": "Section Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Process Payroll", 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -298,11 +312,14 @@
    "fieldtype": "Column Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -320,12 +337,15 @@
    "fieldtype": "Button", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Create Salary Slip", 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -341,11 +361,14 @@
    "fieldtype": "Column Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -363,12 +386,15 @@
    "fieldtype": "Button", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Submit Salary Slip", 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -384,11 +410,14 @@
    "fieldtype": "Column Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -406,12 +435,15 @@
    "fieldtype": "Button", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Make Bank Entry", 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -427,11 +459,14 @@
    "fieldtype": "Section Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -447,12 +482,15 @@
    "fieldtype": "HTML", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
    "label": "Activity Log", 
+   "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -470,7 +508,8 @@
  "is_submittable": 0, 
  "issingle": 1, 
  "istable": 0, 
- "modified": "2015-07-07 07:16:02.380839", 
+ "max_attachments": 0, 
+ "modified": "2016-04-26 07:22:41.792785", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Process Payroll", 
diff --git a/erpnext/hr/doctype/process_payroll/process_payroll.py b/erpnext/hr/doctype/process_payroll/process_payroll.py
index 51e3740..de41530 100644
--- a/erpnext/hr/doctype/process_payroll/process_payroll.py
+++ b/erpnext/hr/doctype/process_payroll/process_payroll.py
@@ -70,7 +70,6 @@
 					"fiscal_year": self.fiscal_year,
 					"employee": emp[0],
 					"month": self.month,
-					"email_check": self.send_email,
 					"company": self.company,
 				})
 				ss.insert()
@@ -109,7 +108,6 @@
 		for ss in ss_list:
 			ss_obj = frappe.get_doc("Salary Slip",ss[0])
 			try:
-				ss_obj.email_check = self.send_email
 				ss_obj.submit()
 			except Exception,e:
 				not_submitted_ss.append(ss[0])
@@ -128,11 +126,9 @@
 
 		submitted_ss = self.format_as_links(list(set(all_ss) - set(not_submitted_ss)))
 		if submitted_ss:
-			mail_sent_msg = self.send_email and " (Mail has been sent to the employee)" or ""
 			log = """
-			<b>Salary Slips Submitted %s:</b>\
-			<br><br> %s <br><br>
-			""" % (mail_sent_msg, '<br>'.join(submitted_ss))
+				<b>Salary Slips Submitted:</b> <br><br>%s
+				""" % ('<br>'.join(submitted_ss))
 
 		if not_submitted_ss:
 			log += """
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.json b/erpnext/hr/doctype/salary_slip/salary_slip.json
index 76ad96e..a31e7b0 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.json
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.json
@@ -431,32 +431,6 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "fieldname": "email_check", 
-   "fieldtype": "Check", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Email", 
-   "length": 0, 
-   "no_copy": 1, 
-   "oldfieldname": "email_check", 
-   "oldfieldtype": "Check", 
-   "permlevel": 0, 
-   "print_hide": 1, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 1, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
    "fieldname": "amended_from", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -880,8 +854,8 @@
  "is_submittable": 1, 
  "issingle": 0, 
  "istable": 0, 
- "max_attachments": 0, 
- "modified": "2016-04-06 03:10:12.181480", 
+ "max_attachments": 0,
+ "modified": "2016-04-26 06:02:06.940543", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Salary Slip", 
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py
index 63147d5..0c1f8c8 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.py
@@ -204,15 +204,17 @@
 			self.precision("net_pay") if disable_rounded_total else 0)
 
 	def on_submit(self):
-		if(self.email_check == 1):
-			self.send_mail_funct()
+		if(frappe.db.get_single_value("HR Settings", "email_salary_slip_to_employee")):
+			self.email_salary_slip()
 
 
-	def send_mail_funct(self):
-		receiver = frappe.db.get_value("Employee", self.employee, "company_email")
+	def email_salary_slip(self):
+		receiver = frappe.db.get_value("Employee", self.employee, "company_email") or \
+			frappe.db.get_value("Employee", self.employee, "personal_email")
 		if receiver:
 			subj = 'Salary Slip - ' + cstr(self.month) +'/'+cstr(self.fiscal_year)
 			frappe.sendmail([receiver], subject=subj, message = _("Please see attachment"),
-				attachments=[frappe.attach_print(self.doctype, self.name, file_name=self.name)])
+				attachments=[frappe.attach_print(self.doctype, self.name, file_name=self.name)], 
+				bulk=True, reference_doctype= self.doctype, reference_name= self.name)
 		else:
-			msgprint(_("Company Email ID not found, hence mail not sent"))
+			msgprint(_("{0}: Employee email not found, hence email not sent").format(self.employee_name))
diff --git a/erpnext/hr/doctype/salary_slip/test_salary_slip.py b/erpnext/hr/doctype/salary_slip/test_salary_slip.py
index 2383aff..106b8a2 100644
--- a/erpnext/hr/doctype/salary_slip/test_salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/test_salary_slip.py
@@ -96,6 +96,19 @@
 
 		frappe.set_user("test_employee@example.com")
 		self.assertTrue(salary_slip_test_employee.has_permission("read"))
+		
+	def test_email_salary_slip(self):
+		frappe.db.sql("delete from `tabBulk Email`")
+
+		hr_settings = frappe.get_doc("HR Settings", "HR Settings")
+		hr_settings.email_salary_slip_to_employee = 1
+		hr_settings.save()
+		
+		self.make_employee("test_employee@example.com")
+		self.make_employee_salary_slip("test_employee@example.com")
+		bulk_mails = frappe.db.sql("""select name from `tabBulk Email`""")
+		self.assertTrue(bulk_mails)
+		
 
 	def make_employee(self, user):
 		if not frappe.db.get_value("User", user):
@@ -118,6 +131,7 @@
 				"date_of_joining": "2013-01-01",
 				"department": "_Test Department 1",
 				"gender": "Female",
+				"company_email": user,
 				"status": "Active"
 			}).insert()
 
diff --git a/erpnext/hr/doctype/upload_attendance/upload_attendance.js b/erpnext/hr/doctype/upload_attendance/upload_attendance.js
index 47ffec0..c49720c 100644
--- a/erpnext/hr/doctype/upload_attendance/upload_attendance.js
+++ b/erpnext/hr/doctype/upload_attendance/upload_attendance.js
@@ -2,7 +2,7 @@
 // License: GNU General Public License v3. See license.txt
 
 
-frappe.require("assets/erpnext/js/utils.js");
+
 frappe.provide("erpnext.hr");
 
 erpnext.hr.AttendanceControlPanel = frappe.ui.form.Controller.extend({
diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js
index 5b97397..710862b 100644
--- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js
+++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js
@@ -1,7 +1,7 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/utils.js");
+
 
 cur_frm.cscript.onload = function(doc) {
 	cur_frm.set_value("company", frappe.defaults.get_user_default("Company"))
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index ccc4629..3ee0158 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -169,7 +169,7 @@
 erpnext.patches.v6_0.multi_currency
 erpnext.patches.v5_0.repost_gle_for_jv_with_multiple_party
 erpnext.patches.v5_0.portal_fixes
-erpnext.patches.v5_0.reset_values_in_tools
+erpnext.patches.v5_0.reset_values_in_tools # 02-05-2016
 execute:frappe.delete_doc("Page", "users")
 erpnext.patches.v5_0.update_material_transferred_for_manufacturing_again
 erpnext.patches.v5_0.index_on_account_and_gl_entry
@@ -259,7 +259,6 @@
 erpnext.patches.v6_24.map_customer_address_to_shipping_address_on_po
 erpnext.patches.v6_27.fix_recurring_order_status
 erpnext.patches.v6_20x.remove_customer_supplier_roles
-erpnext.patches.v6_24.rename_item_field
 erpnext.patches.v7_0.update_party_status
 erpnext.patches.v7_0.update_item_projected
 erpnext.patches.v6_20x.update_product_bundle_description
diff --git a/erpnext/patches/v5_0/reset_values_in_tools.py b/erpnext/patches/v5_0/reset_values_in_tools.py
index 2825e4f..5aac83e 100644
--- a/erpnext/patches/v5_0/reset_values_in_tools.py
+++ b/erpnext/patches/v5_0/reset_values_in_tools.py
@@ -6,6 +6,7 @@
 
 def execute():
 	for dt in ["Payment Tool", "Bank Reconciliation", "Payment Reconciliation", "Leave Control Panel", 
-		"Salary Manager", "Upload Attenadance", "Production Planning Tool", "BOM Replace Tool"]:
+		"Salary Manager", "Upload Attenadance", "Production Planning Tool", "BOM Replace Tool", "Customize Form",
+		 "Employee Attendance Tool", "Rename Tool", "BOM Replace Tool", "Process Payroll", "Naming Series"]:
 			frappe.db.sql("delete from `tabSingles` where doctype=%s", dt)
 		
\ No newline at end of file
diff --git a/erpnext/portal/doctype/homepage_featured_product/homepage_featured_product.json b/erpnext/portal/doctype/homepage_featured_product/homepage_featured_product.json
index fe93098..81c75c6 100644
--- a/erpnext/portal/doctype/homepage_featured_product/homepage_featured_product.json
+++ b/erpnext/portal/doctype/homepage_featured_product/homepage_featured_product.json
@@ -257,7 +257,7 @@
  "issingle": 0, 
  "istable": 1, 
  "max_attachments": 0, 
- "modified": "2016-04-22 05:57:06.261401", 
+ "modified": "2016-04-25 15:51:52.811124", 
  "modified_by": "Administrator", 
  "module": "Portal", 
  "name": "Homepage Featured Product", 
diff --git a/erpnext/projects/doctype/project/project.js b/erpnext/projects/doctype/project/project.js
index 6f0da36..4835287 100644
--- a/erpnext/projects/doctype/project/project.js
+++ b/erpnext/projects/doctype/project/project.js
@@ -3,8 +3,6 @@
 
 frappe.ui.form.on("Project", {
 	onload: function(frm) {
-		frm.hide_first = true;
-
 		var so = frappe.meta.get_docfield("Project", "sales_order");
 		so.get_route_options_for_new_doc = function(field) {
 			if(frm.is_new()) return;
@@ -45,22 +43,32 @@
 				});
 			}
 
-			frm.dashboard.show_dashboard();
-			frm.dashboard.add_section(frappe.render_template('project_dashboard', {project: frm.doc}));
-
-			// var bars = [];
-			// bars.push({
-			// 	'title': __('Percent Complete'),
-			// 	'width': (frm.doc.percent_complete || 1)  + '%',
-			// 	'progress_class': 'progress-bar-success'
-			// })
-			//
-			// var message = __("{0}% complete", [frm.doc.percent_complete]);
-			//
-			// frm.dashboard.add_progress(__('Status'), bars, message);
-
+			frm.trigger('show_dashboard');
 		}
+	},
+	show_dashboard: function(frm) {
+		frm.dashboard.show_heatmap = true;
+		frm.dashboard.heatmap_message = __('This is based on the Time Logs created against this project');
+		frm.dashboard.show_dashboard();
 
+		if(frm.doc.__onload.activity_summary.length) {
+			var hours = $.map(frm.doc.__onload.activity_summary, function(d) { return d.total_hours });
+			var max_count = Math.max.apply(null, hours);
+			var sum = hours.reduce(function(a, b) { return a + b; }, 0);
+			var section = frm.dashboard.add_section(
+				frappe.render_template('project_dashboard',
+					{
+						data: frm.doc.__onload.activity_summary,
+						max_count: max_count,
+						sum: sum
+					}));
+
+			section.on('click', '.time-log-link', function() {
+				var activity_type = $(this).attr('data-activity_type');
+				frappe.set_route('List', 'Time Log',
+					{'activity_type': activity_type, 'project': frm.doc.name});
+			});
+		}
 	}
 });
 
diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py
index 2cca7e2..e7f5b7a 100644
--- a/erpnext/projects/doctype/project/project.py
+++ b/erpnext/projects/doctype/project/project.py
@@ -27,6 +27,8 @@
 				})
 
 		self.set_onload('links', self.meta.get_links_setup())
+		self.set_onload('activity_summary', frappe.db.sql('''select activity_type, sum(hours) as total_hours
+			from `tabTime Log` where project=%s group by activity_type order by total_hours desc''', self.name, as_dict=True))
 
 	def __setup__(self):
 		self.onload()
@@ -154,8 +156,17 @@
 	from frappe.desk.notifications import get_open_count
 	return {
 		'count': get_open_count('Project', name),
+		'timeline_data': get_timeline_data(name)
 	}
 
+def get_timeline_data(name):
+	'''Return timeline for attendance'''
+	return dict(frappe.db.sql('''select unix_timestamp(from_time), count(*)
+		from `tabTime Log` where project=%s
+			and from_time > date_sub(curdate(), interval 1 year)
+			and docstatus < 2
+			group by date(from_time)''', name))
+
 def get_project_list(doctype, txt, filters, limit_start, limit_page_length=20):
 	return frappe.db.sql('''select distinct project.*
 		from tabProject project, `tabProject User` project_user
@@ -174,7 +185,8 @@
 	return {
 		"show_sidebar": True,
 		"show_search": True,
-		"title": _("My Projects"),
+		'no_breadcrumbs': True,
+		"title": _("Projects"),
 		"get_list": get_project_list,
 		"row_template": "templates/includes/projects/project_row.html"
 	}
diff --git a/erpnext/projects/doctype/project/project_dashboard.html b/erpnext/projects/doctype/project/project_dashboard.html
index efd6861..34a2d04 100644
--- a/erpnext/projects/doctype/project/project_dashboard.html
+++ b/erpnext/projects/doctype/project/project_dashboard.html
@@ -1,10 +1,26 @@
-<h5 style="margin-top: 0px;">Tasks</h5>
-{% if(project.tasks.length) { %}
-	{% project.tasks.forEach(function(d) { %}
-	<p><span class="indicator {{
-		{"Open": "red", "Closed": "green", "Cancelled": "darkgrey"}[d.status] || "orange" }}"><a style="font-weight: normal"
-		href="#Form/Task/{{ d.task_id }}">{{ d.title }}</a></span></p>
-	{% }); %}
-{% } else { %}
-	<p class="text-muted small">No Tasks Defined</p>
-{% } %}
\ No newline at end of file
+<h5 style="margin-top: 0px;">Activity Summary</h5>
+<h6 style="margin-bottom: 25px;">{{ __("Total hours: {0}", [flt(sum, 2) ]) }}</h6>
+{% for d in data %}
+<div class="row">
+	<div class="col-xs-4">
+		<a class="small time-log-link" data-activity_type="{{ d.activity_type || "" }}">
+			{{ d.activity_type || __("Unknown") }}</a>
+	</div>
+	<div class="col-xs-8">
+		<span class="inline-graph">
+			<span class="inline-graph-half">
+			</span>
+			<span class="inline-graph-half" title="{{ __("hours") }}">
+				<span class="inline-graph-count">
+					{{ __("{0} hours", [flt(d.total_hours, 2)]) }}
+				</span>
+				<span class="inline-graph-bar">
+					<span class="inline-graph-bar-inner dark"
+						style="width: {{ cint(d.total_hours/max_count * 100) }}%">
+					</span>
+				</span>
+			</span>
+		</span>
+	</div>
+</div>
+{% endfor %}
\ No newline at end of file
diff --git a/erpnext/projects/doctype/time_log/time_log.js b/erpnext/projects/doctype/time_log/time_log.js
index 7648a53..10e3bc7 100644
--- a/erpnext/projects/doctype/time_log/time_log.js
+++ b/erpnext/projects/doctype/time_log/time_log.js
@@ -1,111 +1,105 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.provide("erpnext.projects");
-
-frappe.ui.form.on("Time Log", "onload", function(frm) {
-	if (frm.doc.__islocal) {
-		if (frm.doc.for_manufacturing) {
-			frappe.ui.form.trigger("Time Log", "production_order");
+frappe.ui.form.on("Time Log", {
+	onload: function(frm) {
+		if (frm.doc.__islocal) {
+			if (frm.doc.for_manufacturing) {
+				frappe.ui.form.trigger("Time Log", "production_order");
+			}
+			if (frm.doc.from_time && frm.doc.to_time) {
+				frappe.ui.form.trigger("Time Log", "to_time");
+			}
 		}
-		if (frm.doc.from_time && frm.doc.to_time) {
-			frappe.ui.form.trigger("Time Log", "to_time");
-		}
-	}
-});
-
-frappe.ui.form.on("Time Log", "refresh", function(frm) {
-	// set default user if created
-	if (frm.doc.__islocal && !frm.doc.user) {
-		frm.set_value("user", user);
-	}
-
-	frm.toggle_reqd("activity_type", !frm.doc.for_manufacturing);
-});
-
-
-// set to time if hours is updated
-frappe.ui.form.on("Time Log", "hours", function(frm) {
-	if(!frm.doc.from_time) {
-		frm.set_value("from_time", frappe.datetime.now_datetime());
-	}
-	var d = moment(frm.doc.from_time);
-	d.add(frm.doc.hours, "hours");
-	frm._setting_hours = true;
-	frm.set_value("to_time", d.format(moment.defaultDatetimeFormat));
-	frm._setting_hours = false;
-});
-
-// clear production order if making time log
-frappe.ui.form.on("Time Log", "before_save", function(frm) {
-	frm.doc.production_order && frappe.model.remove_from_locals("Production Order",
-		frm.doc.production_order);
-});
-
-// set hours if to_time is updated
-frappe.ui.form.on("Time Log", "to_time", function(frm) {
-	if(frm._setting_hours) return;
-	frm.set_value("hours", moment(cur_frm.doc.to_time).diff(moment(cur_frm.doc.from_time),
-		"seconds") / 3600);
-
-});
-
-var calculate_cost = function(frm) {
-	frm.set_value("costing_amount", frm.doc.costing_rate * frm.doc.hours);
-	if (frm.doc.billable==1){
-		frm.set_value("billing_amount", (frm.doc.billing_rate * frm.doc.hours) + frm.doc.additional_cost);
-	}
-}
-
-var get_activity_cost = function(frm) {
-	if (frm.doc.activity_type){
-		return frappe.call({
-			method: "erpnext.projects.doctype.time_log.time_log.get_activity_cost",
-			args: {
-				"employee": frm.doc.employee,
-				"activity_type": frm.doc.activity_type
-			},
-			callback: function(r) {
-				if(!r.exc && r.message) {
-					frm.set_value("costing_rate", r.message.costing_rate);
-					frm.set_value("billing_rate", r.message.billing_rate);
-					calculate_cost(frm);
+		frm.set_query('task', function() {
+			return {
+				filters:{
+					'project': frm.doc.project
 				}
 			}
 		});
-	}
-}
+	},
+	refresh: function(frm) {
+		// set default user if created
+		if (frm.doc.__islocal && !frm.doc.user) {
+			frm.set_value("user", user);
+		}
+		if (frm.doc.status==='In Progress' && !frm.is_new()) {
+			frm.add_custom_button(__('Finish'), function() {
+				frappe.prompt({
+					fieldtype: 'Datetime',
+					fieldname: 'to_time',
+					label: __('End Time'),
+					'default': dateutil.now_datetime()
+					}, function(value) {
+						frm.set_value('to_time', value.to_time);
+						frm.save();
+					});
+			}).addClass('btn-primary');
+		}
 
-frappe.ui.form.on("Time Log", "hours", function(frm) {
-	calculate_cost(frm);
-});
 
-frappe.ui.form.on("Time Log", "additional_cost", function(frm) {
-	calculate_cost(frm);
-});
+		frm.toggle_reqd("activity_type", !frm.doc.for_manufacturing);
+	},
+	hours: function(frm) {
+		if(!frm.doc.from_time) {
+			frm.set_value("from_time", frappe.datetime.now_datetime());
+		}
+		var d = moment(frm.doc.from_time);
+		d.add(frm.doc.hours, "hours");
+		frm._setting_hours = true;
+		frm.set_value("to_time", d.format(moment.defaultDatetimeFormat));
+		frm._setting_hours = false;
 
-frappe.ui.form.on("Time Log", "activity_type", function(frm) {
-	get_activity_cost(frm);
-});
-
-frappe.ui.form.on("Time Log", "employee", function(frm) {
-	get_activity_cost(frm);
-});
-
-frappe.ui.form.on("Time Log", "billable", function(frm) {
-	if (frm.doc.billable==1) {
-		calculate_cost(frm);
-	}
-	else {
-		frm.set_value("billing_amount", 0);
-		frm.set_value("additional_cost", 0);
-	}
-});
-
-cur_frm.fields_dict['task'].get_query = function(doc) {
-	return {
-		filters:{
-			'project': doc.project
+		frm.trigger('calculate_cost');
+	},
+	before_save: function(frm) {
+		frm.doc.production_order && frappe.model.remove_from_locals("Production Order",
+			frm.doc.production_order);
+	},
+	to_time: function(frm) {
+		if(frm._setting_hours) return;
+		frm.set_value("hours", moment(cur_frm.doc.to_time).diff(moment(cur_frm.doc.from_time),
+			"seconds") / 3600);
+	},
+	calculate_cost: function(frm) {
+		frm.set_value("costing_amount", frm.doc.costing_rate * frm.doc.hours);
+		if (frm.doc.billable==1){
+			frm.set_value("billing_amount", (frm.doc.billing_rate * frm.doc.hours) + frm.doc.additional_cost);
+		}
+	},
+	additional_cost: function(frm) {
+		frm.trigger('calculate_cost');
+	},
+	activity_type: function(frm) {
+		if (frm.doc.activity_type){
+			return frappe.call({
+				method: "erpnext.projects.doctype.time_log.time_log.get_activity_cost",
+				args: {
+					"employee": frm.doc.employee,
+					"activity_type": frm.doc.activity_type
+				},
+				callback: function(r) {
+					if(!r.exc && r.message) {
+						frm.set_value("costing_rate", r.message.costing_rate);
+						frm.set_value("billing_rate", r.message.billing_rate);
+						frm.trigger('calculate_cost');
+					}
+				}
+			});
+		}
+	},
+	employee: function(frm) {
+		frm.trigger('activity_type');
+	},
+	billable: function(frm) {
+		if (frm.doc.billable==1) {
+			frm.trigger('calculate_cost');
+		}
+		else {
+			frm.set_value("billing_amount", 0);
+			frm.set_value("additional_cost", 0);
 		}
 	}
-}
+
+});
diff --git a/erpnext/projects/doctype/time_log/time_log.json b/erpnext/projects/doctype/time_log/time_log.json
index 050fc54..25d62c4 100644
--- a/erpnext/projects/doctype/time_log/time_log.json
+++ b/erpnext/projects/doctype/time_log/time_log.json
@@ -89,7 +89,7 @@
   }, 
   {
    "allow_on_submit": 0, 
-   "bold": 0, 
+   "bold": 1, 
    "collapsible": 0, 
    "depends_on": "", 
    "fieldname": "project", 
@@ -115,7 +115,7 @@
   }, 
   {
    "allow_on_submit": 0, 
-   "bold": 0, 
+   "bold": 1, 
    "collapsible": 0, 
    "depends_on": "", 
    "fieldname": "task", 
@@ -153,7 +153,7 @@
    "label": "Status", 
    "length": 0, 
    "no_copy": 0, 
-   "options": "Draft\nSubmitted\nBatched for Billing\nBilled\nCancelled", 
+   "options": "In Progress\nTo Submit\nSubmitted\nBatched for Billing\nBilled\nCancelled", 
    "permlevel": 0, 
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
@@ -190,8 +190,9 @@
   }, 
   {
    "allow_on_submit": 0, 
-   "bold": 0, 
+   "bold": 1, 
    "collapsible": 0, 
+   "default": "now", 
    "fieldname": "from_time", 
    "fieldtype": "Datetime", 
    "hidden": 0, 
@@ -239,7 +240,7 @@
   }, 
   {
    "allow_on_submit": 0, 
-   "bold": 0, 
+   "bold": 1, 
    "collapsible": 0, 
    "fieldname": "to_time", 
    "fieldtype": "Datetime", 
@@ -256,7 +257,7 @@
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
-   "reqd": 1, 
+   "reqd": 0, 
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
@@ -460,7 +461,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "depends_on": "eval:doc.for_manufacturing", 
+   "depends_on": "for_manufacturing", 
    "fieldname": "section_break_11", 
    "fieldtype": "Section Break", 
    "hidden": 0, 
@@ -644,7 +645,8 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "depends_on": "", 
+   "collapsible_depends_on": "", 
+   "depends_on": "costing_rate", 
    "fieldname": "section_break_24", 
    "fieldtype": "Section Break", 
    "hidden": 0, 
@@ -652,6 +654,7 @@
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
+   "label": "Cost", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
@@ -747,6 +750,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "default": "0", 
+   "depends_on": "billable", 
    "description": "", 
    "fieldname": "billing_rate", 
    "fieldtype": "Currency", 
@@ -800,6 +804,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "default": "0", 
+   "depends_on": "billable", 
    "description": "Will be updated only if Time Log is 'Billable'", 
    "fieldname": "billing_amount", 
    "fieldtype": "Currency", 
@@ -934,7 +939,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2016-04-15 07:51:03.097280", 
+ "modified": "2016-04-29 05:19:18.247260", 
  "modified_by": "Administrator", 
  "module": "Projects", 
  "name": "Time Log", 
diff --git a/erpnext/projects/doctype/time_log/time_log.py b/erpnext/projects/doctype/time_log/time_log.py
index e2641eb..9545bd7 100644
--- a/erpnext/projects/doctype/time_log/time_log.py
+++ b/erpnext/projects/doctype/time_log/time_log.py
@@ -45,16 +45,19 @@
 
 	def set_status(self):
 		self.status = {
-			0: "Draft",
+			0: "To Submit",
 			1: "Submitted",
 			2: "Cancelled"
 		}[self.docstatus or 0]
 
+		if not self.to_time:
+			self.status = 'In Progress'
+
 		if self.time_log_batch:
-			self.status="Batched for Billing"
+			self.status= "Batched for Billing"
 
 		if self.sales_invoice:
-			self.status="Billed"
+			self.status= "Billed"
 
 	def set_title(self):
 		"""Set default title for the Time Log"""
@@ -88,8 +91,8 @@
 		existing = frappe.db.sql("""select name, from_time, to_time from `tabTime Log`
 			where `{0}`=%(val)s and
 			(
-				(%(from_time)s > from_time and %(from_time)s < to_time) or 
-				(%(to_time)s > from_time and %(to_time)s < to_time) or 
+				(%(from_time)s > from_time and %(from_time)s < to_time) or
+				(%(to_time)s > from_time and %(to_time)s < to_time) or
 				(%(from_time)s <= from_time and %(to_time)s >= to_time))
 			and name!=%(name)s
 			and docstatus < 2""".format(fieldname),
@@ -233,7 +236,7 @@
 				self.billing_amount = self.billing_rate * self.hours
 			else:
 				self.billing_amount = 0
-		
+
 		if self.additional_cost and self.billable:
 			self.billing_amount += self.additional_cost
 
@@ -247,11 +250,11 @@
 
 		elif self.project:
 			frappe.get_doc("Project", self.project).update_project()
-			
+
 	def has_webform_permission(doc):
 		project_user = frappe.db.get_value("Project User", {"parent": doc.project, "user":frappe.session.user} , "user")
 		if project_user:
-			return True		
+			return True
 
 
 @frappe.whitelist()
diff --git a/erpnext/projects/doctype/time_log/time_log_list.js b/erpnext/projects/doctype/time_log/time_log_list.js
index 5396928..e9e7d05 100644
--- a/erpnext/projects/doctype/time_log/time_log_list.js
+++ b/erpnext/projects/doctype/time_log/time_log_list.js
@@ -4,9 +4,15 @@
 // render
 frappe.listview_settings['Time Log'] = {
 	add_fields: ["status", "billable", "activity_type", "task", "project", "hours", "for_manufacturing", "billing_amount"],
-	
+
+	has_indicator_for_draft: true,
+
 	get_indicator: function(doc) {
-		if (doc.status== "Batched for Billing") {
+		if (doc.status== "Draft") {
+			return [__("Draft"), "red", "status,=,Draft"]
+		} else if (doc.status== "In Progress") {
+			return [__("In Progress"), "orange", "status,=,In Progress"]
+		} else if (doc.status== "Batched for Billing") {
 			return [__("Batched for Billing"), "darkgrey", "status,=,Batched for Billing"]
 		} else if (doc.status== "Billed") {
 			return [__("Billed"), "green", "status,=,Billed"]
@@ -14,7 +20,7 @@
 			return [__("Billable"), "orange", "billable,=,1"]
 		}
 	},
-	
+
 	selectable: true,
 	onload: function(me) {
 		me.page.add_menu_item(__("Make Time Log Batch"), function() {
diff --git a/erpnext/public/build.json b/erpnext/public/build.json
index ab0f673..1831907 100644
--- a/erpnext/public/build.json
+++ b/erpnext/public/build.json
@@ -11,15 +11,20 @@
 		"public/js/feature_setup.js",
 		"public/js/utils.js",
 		"public/js/queries.js",
+		"public/js/sms_manager.js",
 		"public/js/utils/party.js",
 		"public/js/templates/address_list.html",
 		"public/js/templates/contact_list.html",
+		"public/js/controllers/stock_controller.js",
+		"public/js/controllers/taxes_and_totals.js",
+		"public/js/controllers/transaction.js",
 		"public/js/pos/pos.html",
 		"public/js/pos/pos_bill_item.html",
 		"public/js/pos/pos_item.html",
 		"public/js/pos/pos_tax_row.html",
 		"public/js/pos/pos.js",
-		"public/js/templates/item_selector.html"
+		"public/js/templates/item_selector.html",
+		"public/js/utils/item_selector.js"
 	],
 	"js/item-dashboard.min.js": [
 		"stock/dashboard/item_dashboard.html",
diff --git a/erpnext/public/css/website.css b/erpnext/public/css/website.css
index 25d08f6..de0b02b 100644
--- a/erpnext/public/css/website.css
+++ b/erpnext/public/css/website.css
@@ -70,7 +70,6 @@
   border-top: 1px solid #EBEFF2;
 }
 .transaction-list-item {
-  border-bottom: none;
   padding: 30px;
   margin: 0px -30px;
 }
@@ -80,7 +79,6 @@
   background-color: #fafbfc;
 }
 .transaction-list-item .indicator {
-  font-size: inherit;
   font-weight: inherit;
   color: #8D99A6;
   margin-left: -15px;
@@ -126,6 +124,75 @@
   border-top: 1px solid #d1d8dd;
   padding-top: 15px;
 }
+.cart-container {
+  margin: 50px 0px;
+}
+.cart-container .cart-item-header .h6 {
+  padding: 7px 15px;
+}
+.cart-container .cart-items {
+  margin: 30px 0px 0px;
+}
+.cart-container .cart-item-table {
+  margin: 0px -15px;
+}
+.cart-container .cart-item-header {
+  border-bottom: 1px solid #d1d8dd;
+}
+.cart-container .cart-image-col {
+  padding-right: 0px;
+}
+.cart-container .cart-image {
+  max-width: 55px;
+  max-height: 55px;
+  margin-top: -5px;
+}
+.cart-container .cart-taxes {
+  margin-top: 30px;
+}
+.cart-container .cart-taxes .row {
+  margin-top: 15px;
+}
+.cart-container .tax-grand-total-row {
+  border-top: 1px solid #d1d8dd;
+  padding-top: 15px;
+}
+.cart-container .cart-addresses {
+  margin-top: 50px;
+}
+.cart-items .cart-dropdown,
+.item_name_dropdown {
+  display: none;
+}
+.cart-dropdown-container {
+  width: 320px;
+  padding: 15px;
+}
+.cart-dropdown-container .item-price {
+  display: block !important;
+  padding-bottom: 10px;
+}
+.cart-dropdown-container .cart-item-header {
+  border-bottom: 1px solid #d1d8dd;
+}
+.cart-dropdown-container .cart-items .cart-dropdown {
+  display: block;
+  margin-top: 15px;
+}
+.cart-dropdown-container .item_name_dropdown {
+  display: block;
+}
+.cart-dropdown-container .item-description,
+.cart-dropdown-container .cart-items .checkout,
+.cart-dropdown-container .item_name_and_description {
+  display: none;
+}
+.cart-dropdown-container .checkout-btn {
+  padding-top: 25px;
+}
+.cart-dropdown-container .col-name-description {
+  margin-bottom: 8px;
+}
 .product-list-link .row {
   border-bottom: 1px solid #EBEFF2;
 }
@@ -147,3 +214,36 @@
     max-width: 350px;
   }
 }
+.item-group-content {
+  margin-top: 30px;
+}
+.product-image-img {
+  border: 1px solid #EBEFF2;
+  border-radius: 3px;
+}
+.product-text {
+  border-top: 1px solid #EBEFF2;
+  padding: 15px;
+  word-wrap: break-word;
+  height: 75px;
+}
+.product-image-wrapper {
+  padding-bottom: 30px;
+}
+.featured-product-heading,
+.all-products {
+  text-transform: uppercase;
+  letter-spacing: 0.5px;
+  font-size: 12px;
+  font-weight: 500;
+}
+.all-products {
+  font-weight: 300;
+  padding-left: 25px;
+  padding-right: 25px;
+  padding-top: 10px;
+  padding-bottom: 10px;
+}
+.homepage-tagline {
+  font-size: 40px !important;
+}
diff --git a/erpnext/public/js/conf.js b/erpnext/public/js/conf.js
index 1191c47..d8133ce 100644
--- a/erpnext/public/js/conf.js
+++ b/erpnext/public/js/conf.js
@@ -15,6 +15,7 @@
 			frappe.urllib.get_base_url()+'/assets/erpnext/images/erp-icon.svg" />');
 
 	$('[data-link="docs"]').attr("href", "https://manual.erpnext.com")
+	$('[data-link="issues"]').attr("href", "https://github.com/frappe/erpnext/issues")
 });
 
 // doctypes created via tree
diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js
index b4e712a..1a234a3 100644
--- a/erpnext/public/js/controllers/taxes_and_totals.js
+++ b/erpnext/public/js/controllers/taxes_and_totals.js
@@ -1,9 +1,6 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.provide("erpnext");
-frappe.require("assets/erpnext/js/controllers/stock_controller.js");
-
 erpnext.taxes_and_totals = erpnext.stock.StockController.extend({
 	calculate_taxes_and_totals: function(update_paid_amount) {
 		this.discount_amount_applied = false;
@@ -59,7 +56,7 @@
 						"to_currency": company_currency
 					}));
 			}
-			
+
 		}
 	},
 
@@ -256,7 +253,7 @@
 					me.round_off_totals(tax);
 
 					// adjust Discount Amount loss in last tax iteration
-					if ((i == me.frm.doc["taxes"].length - 1) && me.discount_amount_applied 
+					if ((i == me.frm.doc["taxes"].length - 1) && me.discount_amount_applied
 							&& me.frm.doc.apply_discount_on == "Grand Total" && me.frm.doc.discount_amount)
 						me.adjust_discount_amount_loss(tax);
 				}
@@ -321,10 +318,10 @@
 		tax.tax_amount_after_discount_amount = flt(tax.tax_amount_after_discount_amount +
 			discount_amount_loss, precision("tax_amount", tax));
 		tax.total = flt(tax.total + discount_amount_loss, precision("total", tax));
-		
+
 		this.set_in_company_currency(tax, ["total", "tax_amount_after_discount_amount"]);
 	},
-	
+
 	manipulate_grand_total_for_inclusive_tax: function() {
 		var me = this;
 		// if fully inclusive taxes and diff
@@ -342,8 +339,8 @@
 					last_tax.tax_amount += diff;
 					last_tax.tax_amount_after_discount += diff;
 					last_tax.total += diff;
-					
-					this.set_in_company_currency(last_tax, 
+
+					this.set_in_company_currency(last_tax,
 						["total", "tax_amount", "tax_amount_after_discount_amount"]);
 				}
 			}
@@ -392,14 +389,14 @@
 
 		// rounded totals
 		if(frappe.meta.get_docfield(this.frm.doc.doctype, "rounded_total", this.frm.doc.name)) {
-			this.frm.doc.rounded_total = round_based_on_smallest_currency_fraction(this.frm.doc.grand_total, 
+			this.frm.doc.rounded_total = round_based_on_smallest_currency_fraction(this.frm.doc.grand_total,
 				this.frm.doc.currency, precision("rounded_total"));
 		}
 		if(frappe.meta.get_docfield(this.frm.doc.doctype, "base_rounded_total", this.frm.doc.name)) {
 			var company_currency = this.get_company_currency();
-			
-			this.frm.doc.base_rounded_total = 
-				round_based_on_smallest_currency_fraction(this.frm.doc.base_grand_total, 
+
+			this.frm.doc.base_rounded_total =
+				round_based_on_smallest_currency_fraction(this.frm.doc.base_grand_total,
 					company_currency, precision("base_rounded_total"));
 		}
 	},
@@ -497,28 +494,28 @@
 
 		this.calculate_outstanding_amount(update_paid_amount);
 	},
-	
+
 	calculate_outstanding_amount: function(update_paid_amount) {
 		// NOTE:
 		// paid_amount and write_off_amount is only for POS Invoice
 		// total_advance is only for non POS Invoice
 		if(this.frm.doc.is_return || this.frm.doc.docstatus > 0) return;
-		
+
 		frappe.model.round_floats_in(this.frm.doc, ["grand_total", "total_advance", "write_off_amount"]);
-		if(this.frm.doc.party_account_currency == this.frm.doc.currency) {	
-			var total_amount_to_pay = flt((this.frm.doc.grand_total - this.frm.doc.total_advance 
+		if(this.frm.doc.party_account_currency == this.frm.doc.currency) {
+			var total_amount_to_pay = flt((this.frm.doc.grand_total - this.frm.doc.total_advance
 				- this.frm.doc.write_off_amount), precision("grand_total"));
 		} else {
 			var total_amount_to_pay = flt(
-				(flt(this.frm.doc.grand_total*this.frm.doc.conversion_rate, precision("grand_total")) 
-					- this.frm.doc.total_advance - this.frm.doc.base_write_off_amount), 
+				(flt(this.frm.doc.grand_total*this.frm.doc.conversion_rate, precision("grand_total"))
+					- this.frm.doc.total_advance - this.frm.doc.base_write_off_amount),
 				precision("base_grand_total")
 			);
 		}
-		
+
 		if(this.frm.doc.doctype == "Sales Invoice" || this.frm.doc.doctype == "Purchase Invoice") {
 			frappe.model.round_floats_in(this.frm.doc, ["paid_amount"]);
-			
+
 			if(this.frm.doc.is_pos || this.frm.doc.is_paid) {
 				if(!this.frm.doc.paid_amount || update_paid_amount===undefined || update_paid_amount) {
 					this.frm.doc.paid_amount = flt(total_amount_to_pay);
@@ -529,16 +526,16 @@
 			this.set_in_company_currency(this.frm.doc, ["paid_amount"]);
 			this.frm.refresh_field("paid_amount");
 			this.frm.refresh_field("base_paid_amount");
-			
-			var paid_amount = (this.frm.doc.party_account_currency == this.frm.doc.currency) ? 
+
+			var paid_amount = (this.frm.doc.party_account_currency == this.frm.doc.currency) ?
 				this.frm.doc.paid_amount : this.frm.doc.base_paid_amount;
-			
-			var outstanding_amount =  flt(total_amount_to_pay - flt(paid_amount), 
+
+			var outstanding_amount =  flt(total_amount_to_pay - flt(paid_amount),
 				precision("outstanding_amount"));
-				
+
 		} else if(this.frm.doc.doctype == "Purchase Invoice") {
 			var outstanding_amount = flt(total_amount_to_pay, precision("outstanding_amount"));
-		}		
+		}
 		this.frm.set_value("outstanding_amount", outstanding_amount);
 	}
 })
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 8e512e8..3f6ea5a 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -1,13 +1,85 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.provide("erpnext");
-frappe.require([
-	"assets/erpnext/js/controllers/taxes_and_totals.js",
-	"assets/erpnext/js/utils.js",
-	"assets/erpnext/js/utils/item_selector.js"]);
-
 erpnext.TransactionController = erpnext.taxes_and_totals.extend({
+	setup: function() {
+		frappe.ui.form.on(this.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.set_gross_profit(item);
+			cur_frm.cscript.calculate_taxes_and_totals();
+		})
+
+		frappe.ui.form.on(this.frm.cscript.tax_table, "rate", function(frm, cdt, cdn) {
+			cur_frm.cscript.calculate_taxes_and_totals();
+		});
+
+		frappe.ui.form.on(this.frm.cscript.tax_table, "tax_amount", function(frm, cdt, cdn) {
+			cur_frm.cscript.calculate_taxes_and_totals();
+		});
+
+		frappe.ui.form.on(this.frm.cscript.tax_table, "row_id", function(frm, cdt, cdn) {
+			cur_frm.cscript.calculate_taxes_and_totals();
+		});
+
+		frappe.ui.form.on(this.frm.cscript.tax_table, "included_in_print_rate", function(frm, cdt, cdn) {
+			cur_frm.cscript.set_dynamic_labels();
+			cur_frm.cscript.calculate_taxes_and_totals();
+		});
+
+		frappe.ui.form.on(this.frm.doctype, "apply_discount_on", function(frm) {
+			if(frm.doc.additional_discount_percentage) {
+				frm.trigger("additional_discount_percentage");
+			} else {
+				cur_frm.cscript.calculate_taxes_and_totals();
+			}
+		});
+
+		frappe.ui.form.on(this.frm.doctype, "additional_discount_percentage", function(frm) {
+			if (frm.via_discount_amount) {
+				return;
+			}
+
+			if(!frm.doc.apply_discount_on) {
+				frappe.msgprint(__("Please set 'Apply Additional Discount On'"));
+				return
+			}
+
+			frm.via_discount_percentage = true;
+
+			if(frm.doc.additional_discount_percentage && frm.doc.discount_amount) {
+				// Reset discount amount and net / grand total
+				frm.set_value("discount_amount", 0);
+			}
+
+			var total = flt(frm.doc[frappe.model.scrub(frm.doc.apply_discount_on)]);
+			var discount_amount = flt(total*flt(frm.doc.additional_discount_percentage) / 100,
+				precision("discount_amount"));
+
+			frm.set_value("discount_amount", discount_amount);
+			delete frm.via_discount_percentage;
+		});
+
+		frappe.ui.form.on(this.frm.doctype, "discount_amount", function(frm) {
+			frm.cscript.set_dynamic_labels();
+
+			if (!frm.via_discount_percentage) {
+				frm.via_discount_amount = true;
+				frm.set_value("additional_discount_percentage", 0);
+				delete frm.via_discount_amount;
+			}
+
+			frm.cscript.calculate_taxes_and_totals();
+		});
+
+	},
 	onload: function() {
 		var me = this;
 		//this.frm.show_print_first = true;
@@ -128,7 +200,6 @@
 	},
 
 	send_sms: function() {
-		frappe.require("assets/erpnext/js/sms_manager.js");
 		var sms_man = new SMSManager(this.frm.doc);
 	},
 
@@ -911,80 +982,4 @@
 
 
 
-});
-
-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.set_gross_profit(item);
-	cur_frm.cscript.calculate_taxes_and_totals();
-})
-
-frappe.ui.form.on(cur_frm.cscript.tax_table, "rate", function(frm, cdt, cdn) {
-	cur_frm.cscript.calculate_taxes_and_totals();
-})
-
-frappe.ui.form.on(cur_frm.cscript.tax_table, "tax_amount", function(frm, cdt, cdn) {
-	cur_frm.cscript.calculate_taxes_and_totals();
-})
-
-frappe.ui.form.on(cur_frm.cscript.tax_table, "row_id", function(frm, cdt, cdn) {
-	cur_frm.cscript.calculate_taxes_and_totals();
-})
-
-frappe.ui.form.on(cur_frm.cscript.tax_table, "included_in_print_rate", function(frm, cdt, cdn) {
-	cur_frm.cscript.set_dynamic_labels();
-	cur_frm.cscript.calculate_taxes_and_totals();
-})
-
-frappe.ui.form.on(cur_frm.doctype, "apply_discount_on", function(frm) {
-	if(frm.doc.additional_discount_percentage) {
-		frm.trigger("additional_discount_percentage");
-	} else {
-		cur_frm.cscript.calculate_taxes_and_totals();
-	}
-})
-
-frappe.ui.form.on(cur_frm.doctype, "additional_discount_percentage", function(frm) {
-	if (frm.via_discount_amount) {
-		return;
-	}
-
-	if(!frm.doc.apply_discount_on) {
-		frappe.msgprint(__("Please set 'Apply Additional Discount On'"));
-		return
-	}
-
-	frm.via_discount_percentage = true;
-
-	if(frm.doc.additional_discount_percentage && frm.doc.discount_amount) {
-		// Reset discount amount and net / grand total
-		frm.set_value("discount_amount", 0);
-	}
-
-	var total = flt(frm.doc[frappe.model.scrub(frm.doc.apply_discount_on)]);
-	var discount_amount = flt(total*flt(frm.doc.additional_discount_percentage) / 100,
-		precision("discount_amount"));
-
-	frm.set_value("discount_amount", discount_amount);
-	delete frm.via_discount_percentage;
-});
-
-frappe.ui.form.on(cur_frm.doctype, "discount_amount", function(frm) {
-	frm.cscript.set_dynamic_labels();
-
-	if (!frm.via_discount_percentage) {
-		frm.via_discount_amount = true;
-		frm.set_value("additional_discount_percentage", 0);
-		delete frm.via_discount_amount;
-	}
-
-	frm.cscript.calculate_taxes_and_totals();
-});
+});
\ No newline at end of file
diff --git a/erpnext/public/js/shopping_cart.js b/erpnext/public/js/shopping_cart.js
index a3f7d3f..9d16c62 100644
--- a/erpnext/public/js/shopping_cart.js
+++ b/erpnext/public/js/shopping_cart.js
@@ -12,6 +12,19 @@
 	}
 	// update login
 	shopping_cart.set_cart_count();
+	
+	$(".shopping-cart").on('shown.bs.dropdown', function() {
+		if (!$('.shopping-cart-menu .cart-container').length) {
+			return frappe.call({
+				method: 'erpnext.shopping_cart.cart.get_shopping_cart_menu',
+				callback: function(r) {
+					if (r.message) {
+						$('.shopping-cart-menu').html(r.message);
+					}
+				}
+			});
+		}
+	});
 });
 
 $.extend(shopping_cart, {
@@ -32,7 +45,10 @@
 				},
 				btn: opts.btn,
 				callback: function(r) {
-					shopping_cart.set_cart_count();
+					shopping_cart.set_cart_count();	
+					if (r.message.shopping_cart_menu) {
+						$('.shopping-cart-menu').html(r.message.shopping_cart_menu);
+					}					
 					if(opts.callback)
 						opts.callback(r);
 				}
@@ -43,14 +59,9 @@
 	set_cart_count: function() {
 		var cart_count = getCookie("cart_count");
 		
-		if($(".cart-icon").length == 0) {
-			$('<div class="cart-icon small" style="float:right;padding:3px;border-radius:10px;\
-    			border: 1px solid #7575ff;">\
-				<a href="/cart" style="color:#7575ff; text-decoration: none">\
-					Cart\
-					<span style="color:#7575ff;" class="badge" id="cart-count">5</span>\
-				</a></div>').appendTo($('.shopping-cart'))
-		}
+		if(cart_count) {
+			$(".shopping-cart").toggle(true);	
+		}		
 		
 		var $cart = $('.cart-icon');
 		var $badge = $cart.find("#cart-count");
diff --git a/erpnext/public/js/stock_analytics.js b/erpnext/public/js/stock_analytics.js
index a8229ba..e9f9758 100644
--- a/erpnext/public/js/stock_analytics.js
+++ b/erpnext/public/js/stock_analytics.js
@@ -1,213 +1,214 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/stock_grid_report.js");
+frappe.require("assets/erpnext/js/stock_grid_report.js", function() {
+	erpnext.StockAnalytics = erpnext.StockGridReport.extend({
+		init: function(wrapper, opts) {
+			var args = {
+				title: __("Stock Analytics"),
+				page: wrapper,
+				parent: $(wrapper).find('.layout-main'),
+				page: wrapper.page,
+				doctypes: ["Item", "Item Group", "Warehouse", "Stock Ledger Entry", "Brand",
+					"Fiscal Year", "Serial No"],
+				tree_grid: {
+					show: true,
+					parent_field: "parent_item_group",
+					formatter: function(item) {
+						if(!item.is_group) {
+							return repl("<a \
+								onclick='frappe.cur_grid_report.show_stock_ledger(\"%(value)s\")'>\
+								%(value)s</a>", {
+									value: item.name,
+								});
+						} else {
+							return item.name;
+						}
 
-erpnext.StockAnalytics = erpnext.StockGridReport.extend({
-	init: function(wrapper, opts) {
-		var args = {
-			title: __("Stock Analytics"),
-			page: wrapper,
-			parent: $(wrapper).find('.layout-main'),
-			page: wrapper.page,
-			doctypes: ["Item", "Item Group", "Warehouse", "Stock Ledger Entry", "Brand",
-				"Fiscal Year", "Serial No"],
-			tree_grid: {
-				show: true,
-				parent_field: "parent_item_group",
-				formatter: function(item) {
-					if(!item.is_group) {
-						return repl("<a \
-							onclick='frappe.cur_grid_report.show_stock_ledger(\"%(value)s\")'>\
-							%(value)s</a>", {
-								value: item.name,
-							});
-					} else {
-						return item.name;
 					}
-
-				}
-			},
-		}
-
-		if(opts) $.extend(args, opts);
-
-		this._super(args);
-	},
-	setup_columns: function() {
-		var std_columns = [
-			{id: "_check", name: __("Plot"), field: "_check", width: 30,
-				formatter: this.check_formatter},
-			{id: "name", name: __("Item"), field: "name", width: 300,
-				formatter: this.tree_formatter},
-			{id: "brand", name: __("Brand"), field: "brand", width: 100},
-			{id: "stock_uom", name: __("UOM"), field: "stock_uom", width: 100},
-			{id: "opening", name: __("Opening"), field: "opening", hidden: true,
-				formatter: this.currency_formatter}
-		];
-
-		this.make_date_range_columns();
-		this.columns = std_columns.concat(this.columns);
-	},
-	filters: [
-		{fieldtype:"Select", label: __("Value or Qty"), fieldname: "value_or_qty",
-			options:[{label:__("Value"), value:"Value"}, {label:__("Quantity"), value:"Quantity"}],
-			filter: function(val, item, opts, me) {
-				return me.apply_zero_filter(val, item, opts, me);
-			}},
-		{fieldtype:"Select", label: __("Brand"), link:"Brand", fieldname: "brand",
-			default_value: __("Select Brand..."), filter: function(val, item, opts) {
-				return val == opts.default_value || item.brand == val || item._show;
-			}, link_formatter: {filter_input: "brand"}},
-		{fieldtype:"Select", label: __("Warehouse"), link:"Warehouse", fieldname: "warehouse",
-			default_value: __("Select Warehouse...")},
-		{fieldtype:"Date", label: __("From Date"), fieldname: "from_date"},
-		{fieldtype:"Date", label: __("To Date"), fieldname: "to_date"},
-		{fieldtype:"Select", label: __("Range"), fieldname: "range",
-			options:[
-				{label:__("Daily"), value:"Daily"},
-				{label:__("Weekly"), value:"Weekly"},
-				{label:__("Monthly"), value:"Monthly"},
-				{label:__("Quarterly"), value:"Quarterly"},
-				{label:__("Yearly"), value:"Yearly"},
-			]}
-	],
-	setup_filters: function() {
-		var me = this;
-		this._super();
-
-		this.trigger_refresh_on_change(["value_or_qty", "brand", "warehouse", "range"]);
-
-		this.show_zero_check();
-		this.setup_plot_check();
-	},
-	init_filter_values: function() {
-		this._super();
-		this.filter_inputs.range && this.filter_inputs.range.val('Monthly');
-	},
-	prepare_data: function() {
-		var me = this;
-
-		if(!this.data) {
-			var items = this.prepare_tree("Item", "Item Group");
-
-			me.parent_map = {};
-			me.item_by_name = {};
-			me.data = [];
-
-			$.each(items, function(i, v) {
-				var d = copy_dict(v);
-
-				me.data.push(d);
-				me.item_by_name[d.name] = d;
-				if(d.parent_item_group) {
-					me.parent_map[d.name] = d.parent_item_group;
-				}
-				me.reset_item_values(d);
-			});
-			this.set_indent();
-			this.data[0].checked = true;
-		} else {
-			// otherwise, only reset values
-			$.each(this.data, function(i, d) {
-				me.reset_item_values(d);
-				d["closing_qty_value"] = 0;
-			});
-		}
-
-		this.prepare_balances();
-		this.update_groups();
-
-	},
-	prepare_balances: function() {
-		var me = this;
-		var from_date = dateutil.str_to_obj(this.from_date);
-		var to_date = dateutil.str_to_obj(this.to_date);
-		var data = frappe.report_dump.data["Stock Ledger Entry"];
-
-		this.item_warehouse = {};
-		this.serialized_buying_rates = this.get_serialized_buying_rates();
-
-		for(var i=0, j=data.length; i<j; i++) {
-			var sl = data[i];
-			sl.posting_datetime = sl.posting_date + " " + sl.posting_time;
-			var posting_datetime = dateutil.str_to_obj(sl.posting_datetime);
-
-			if(me.is_default("warehouse") ? true : me.warehouse == sl.warehouse) {
-				var item = me.item_by_name[sl.item_code];
-				if(item.closing_qty_value==undefined) item.closing_qty_value = 0;
-
-				if(me.value_or_qty!="Quantity") {
-					var wh = me.get_item_warehouse(sl.warehouse, sl.item_code);
-					var valuation_method = item.valuation_method ?
-						item.valuation_method : sys_defaults.valuation_method;
-					var is_fifo = valuation_method == "FIFO";
-
-					if(sl.voucher_type=="Stock Reconciliation") {
-						var diff = (sl.qty_after_transaction * sl.valuation_rate) - item.closing_qty_value;
-						wh.fifo_stack = [[sl.qty_after_transaction, sl.valuation_rate, sl.posting_date]];
-						wh.balance_qty = sl.qty_after_transaction;
-						wh.balance_value = sl.valuation_rate * sl.qty_after_transaction;
-					} else {
-						var diff = me.get_value_diff(wh, sl, is_fifo);
-					}
-				} else {
-					if(sl.voucher_type=="Stock Reconciliation") {
-						var diff = sl.qty_after_transaction - item.closing_qty_value;
-					} else {
-						var diff = sl.qty;
-					}
-				}
-
-				if(posting_datetime < from_date) {
-					item.opening += diff;
-				} else if(posting_datetime <= to_date) {
-					item[me.column_map[sl.posting_date].field] += diff;
-				} else {
-					break;
-				}
-
-				item.closing_qty_value += diff;
+				},
 			}
-		}
-	},
-	update_groups: function() {
-		var me = this;
-		$.each(this.data, function(i, item) {
-			// update groups
-			if(!item.is_group && me.apply_filter(item, "brand")) {
-				var balance = item.opening;
-				$.each(me.columns, function(i, col) {
-					if(col.formatter==me.currency_formatter && !col.hidden) {
-						item[col.field] = balance + item[col.field];
-						balance = item[col.field];
-					}
-				});
 
-				var parent = me.parent_map[item.name];
-				while(parent) {
-					parent_group = me.item_by_name[parent];
-					$.each(me.columns, function(c, col) {
-						if (col.formatter == me.currency_formatter) {
-							parent_group[col.field] =
-								flt(parent_group[col.field])
-								+ flt(item[col.field]);
+			if(opts) $.extend(args, opts);
+
+			this._super(args);
+		},
+		setup_columns: function() {
+			var std_columns = [
+				{id: "_check", name: __("Plot"), field: "_check", width: 30,
+					formatter: this.check_formatter},
+				{id: "name", name: __("Item"), field: "name", width: 300,
+					formatter: this.tree_formatter},
+				{id: "brand", name: __("Brand"), field: "brand", width: 100},
+				{id: "stock_uom", name: __("UOM"), field: "stock_uom", width: 100},
+				{id: "opening", name: __("Opening"), field: "opening", hidden: true,
+					formatter: this.currency_formatter}
+			];
+
+			this.make_date_range_columns();
+			this.columns = std_columns.concat(this.columns);
+		},
+		filters: [
+			{fieldtype:"Select", label: __("Value or Qty"), fieldname: "value_or_qty",
+				options:[{label:__("Value"), value:"Value"}, {label:__("Quantity"), value:"Quantity"}],
+				filter: function(val, item, opts, me) {
+					return me.apply_zero_filter(val, item, opts, me);
+				}},
+			{fieldtype:"Select", label: __("Brand"), link:"Brand", fieldname: "brand",
+				default_value: __("Select Brand..."), filter: function(val, item, opts) {
+					return val == opts.default_value || item.brand == val || item._show;
+				}, link_formatter: {filter_input: "brand"}},
+			{fieldtype:"Select", label: __("Warehouse"), link:"Warehouse", fieldname: "warehouse",
+				default_value: __("Select Warehouse...")},
+			{fieldtype:"Date", label: __("From Date"), fieldname: "from_date"},
+			{fieldtype:"Date", label: __("To Date"), fieldname: "to_date"},
+			{fieldtype:"Select", label: __("Range"), fieldname: "range",
+				options:[
+					{label:__("Daily"), value:"Daily"},
+					{label:__("Weekly"), value:"Weekly"},
+					{label:__("Monthly"), value:"Monthly"},
+					{label:__("Quarterly"), value:"Quarterly"},
+					{label:__("Yearly"), value:"Yearly"},
+				]}
+		],
+		setup_filters: function() {
+			var me = this;
+			this._super();
+
+			this.trigger_refresh_on_change(["value_or_qty", "brand", "warehouse", "range"]);
+
+			this.show_zero_check();
+			this.setup_plot_check();
+		},
+		init_filter_values: function() {
+			this._super();
+			this.filter_inputs.range && this.filter_inputs.range.val('Monthly');
+		},
+		prepare_data: function() {
+			var me = this;
+
+			if(!this.data) {
+				var items = this.prepare_tree("Item", "Item Group");
+
+				me.parent_map = {};
+				me.item_by_name = {};
+				me.data = [];
+
+				$.each(items, function(i, v) {
+					var d = copy_dict(v);
+
+					me.data.push(d);
+					me.item_by_name[d.name] = d;
+					if(d.parent_item_group) {
+						me.parent_map[d.name] = d.parent_item_group;
+					}
+					me.reset_item_values(d);
+				});
+				this.set_indent();
+				this.data[0].checked = true;
+			} else {
+				// otherwise, only reset values
+				$.each(this.data, function(i, d) {
+					me.reset_item_values(d);
+					d["closing_qty_value"] = 0;
+				});
+			}
+
+			this.prepare_balances();
+			this.update_groups();
+
+		},
+		prepare_balances: function() {
+			var me = this;
+			var from_date = dateutil.str_to_obj(this.from_date);
+			var to_date = dateutil.str_to_obj(this.to_date);
+			var data = frappe.report_dump.data["Stock Ledger Entry"];
+
+			this.item_warehouse = {};
+			this.serialized_buying_rates = this.get_serialized_buying_rates();
+
+			for(var i=0, j=data.length; i<j; i++) {
+				var sl = data[i];
+				sl.posting_datetime = sl.posting_date + " " + sl.posting_time;
+				var posting_datetime = dateutil.str_to_obj(sl.posting_datetime);
+
+				if(me.is_default("warehouse") ? true : me.warehouse == sl.warehouse) {
+					var item = me.item_by_name[sl.item_code];
+					if(item.closing_qty_value==undefined) item.closing_qty_value = 0;
+
+					if(me.value_or_qty!="Quantity") {
+						var wh = me.get_item_warehouse(sl.warehouse, sl.item_code);
+						var valuation_method = item.valuation_method ?
+							item.valuation_method : sys_defaults.valuation_method;
+						var is_fifo = valuation_method == "FIFO";
+
+						if(sl.voucher_type=="Stock Reconciliation") {
+							var diff = (sl.qty_after_transaction * sl.valuation_rate) - item.closing_qty_value;
+							wh.fifo_stack = [[sl.qty_after_transaction, sl.valuation_rate, sl.posting_date]];
+							wh.balance_qty = sl.qty_after_transaction;
+							wh.balance_value = sl.valuation_rate * sl.qty_after_transaction;
+						} else {
+							var diff = me.get_value_diff(wh, sl, is_fifo);
+						}
+					} else {
+						if(sl.voucher_type=="Stock Reconciliation") {
+							var diff = sl.qty_after_transaction - item.closing_qty_value;
+						} else {
+							var diff = sl.qty;
+						}
+					}
+
+					if(posting_datetime < from_date) {
+						item.opening += diff;
+					} else if(posting_datetime <= to_date) {
+						item[me.column_map[sl.posting_date].field] += diff;
+					} else {
+						break;
+					}
+
+					item.closing_qty_value += diff;
+				}
+			}
+		},
+		update_groups: function() {
+			var me = this;
+			$.each(this.data, function(i, item) {
+				// update groups
+				if(!item.is_group && me.apply_filter(item, "brand")) {
+					var balance = item.opening;
+					$.each(me.columns, function(i, col) {
+						if(col.formatter==me.currency_formatter && !col.hidden) {
+							item[col.field] = balance + item[col.field];
+							balance = item[col.field];
 						}
 					});
-					parent = me.parent_map[parent];
+
+					var parent = me.parent_map[item.name];
+					while(parent) {
+						parent_group = me.item_by_name[parent];
+						$.each(me.columns, function(c, col) {
+							if (col.formatter == me.currency_formatter) {
+								parent_group[col.field] =
+									flt(parent_group[col.field])
+									+ flt(item[col.field]);
+							}
+						});
+						parent = me.parent_map[parent];
+					}
 				}
-			}
-		});
-	},
-	get_plot_points: function(item, col, idx) {
-		return [[dateutil.user_to_obj(col.name).getTime(), item[col.field]]]
-	},
-	show_stock_ledger: function(item_code) {
-		frappe.route_options = {
-			item_code: item_code,
-			from_date: this.from_date,
-			to_date: this.to_date
-		};
-		frappe.set_route("query-report", "Stock Ledger");
-	}
+			});
+		},
+		get_plot_points: function(item, col, idx) {
+			return [[dateutil.user_to_obj(col.name).getTime(), item[col.field]]]
+		},
+		show_stock_ledger: function(item_code) {
+			frappe.route_options = {
+				item_code: item_code,
+				from_date: this.from_date,
+				to_date: this.to_date
+			};
+			frappe.set_route("query-report", "Stock Ledger");
+		}
+	});
 });
+
diff --git a/erpnext/public/less/website.less b/erpnext/public/less/website.less
index 0246cac..357bb8a 100644
--- a/erpnext/public/less/website.less
+++ b/erpnext/public/less/website.less
@@ -83,7 +83,6 @@
 }
 
 .transaction-list-item {
-	border-bottom: none;
 	padding: 30px;
 	margin: 0px -30px;
 
@@ -94,7 +93,6 @@
 	}
 
 	.indicator {
-		font-size: inherit;
 		font-weight: inherit;
 		color: @text-muted;
 		margin-left: -15px;
@@ -161,6 +159,95 @@
 	}
 }
 
+.cart-container {
+	margin: 50px 0px;
+
+	.cart-item-header .h6 {
+		padding: 7px 15px;
+	}
+
+	.cart-items {
+		margin: 30px 0px 0px;
+	}
+
+	.cart-item-table {
+		margin: 0px -15px;
+	}
+
+	.cart-item-header {
+		border-bottom: 1px solid #d1d8dd;
+	}
+
+	.cart-image-col {
+		padding-right: 0px;
+	}
+
+	.cart-image {
+		max-width: 55px;
+		max-height: 55px;
+		margin-top: -5px;
+	}
+
+	.cart-taxes {
+		margin-top: 30px;
+
+		.row {
+			margin-top: 15px;
+		}
+	}
+
+	.tax-grand-total-row {
+		border-top: 1px solid @border-color;
+		padding-top: 15px;
+	}
+	
+	.cart-addresses {
+		margin-top: 50px;
+	}
+}
+
+.cart-items .cart-dropdown,
+.item_name_dropdown {
+	display:none;
+	
+}
+.cart-dropdown-container {
+	width: 320px;
+	padding: 15px;
+	
+	.item-price {
+		display: block !important;
+		padding-bottom: 10px;
+	}
+	
+	.cart-item-header {
+		border-bottom: 1px solid #d1d8dd;
+	}
+	
+	.cart-items .cart-dropdown {
+		display:block;
+	   	margin-top:15px;
+	}
+		
+	.item_name_dropdown {
+		display:block;
+	}
+	
+	.item-description,
+	.cart-items .checkout,
+	.item_name_and_description {
+		display: none;
+	}
+	
+	.checkout-btn {
+		padding-top:25px;
+	}
+	.col-name-description {
+		margin-bottom:8px;
+	}
+	
+}
+
 .product-list-link {
 	.row {
 		border-bottom: 1px solid @light-border-color;
@@ -189,3 +276,44 @@
 		max-width: 350px;
 	}
 }
+
+.item-group-content {
+	margin-top: 30px;
+}
+
+.product-image-img {	
+	border: 1px solid @light-border-color;
+	border-radius: 3px;
+}
+
+.product-text {	
+	border-top: 1px solid @light-border-color;
+	padding: 15px;
+	word-wrap: break-word;
+	height: 75px;
+}
+
+.product-image-wrapper {	
+	padding-bottom: 30px;
+}
+
+
+.featured-product-heading, .all-products {
+ text-transform: uppercase;
+ letter-spacing: 0.5px;
+ font-size: 12px;
+ font-weight: 500;	
+}
+
+.all-products {
+ font-weight: 300;	
+ padding-left: 25px;
+ padding-right: 25px;
+ padding-top: 10px;
+ padding-bottom: 10px;
+}
+
+.homepage-tagline {
+	font-size:40px !important;
+}
+
diff --git a/erpnext/selling/doctype/customer/customer.js b/erpnext/selling/doctype/customer/customer.js
index 5645280..87d028f 100644
--- a/erpnext/selling/doctype/customer/customer.js
+++ b/erpnext/selling/doctype/customer/customer.js
@@ -3,7 +3,6 @@
 
 frappe.ui.form.on("Customer", {
 	before_load: function(frm) {
-		frm.hide_first = true;
 		frappe.setup_language_field(frm);
 	},
 	refresh: function(frm) {
diff --git a/erpnext/selling/doctype/installation_note/installation_note.js b/erpnext/selling/doctype/installation_note/installation_note.js
index f0e1eab..09deea2 100644
--- a/erpnext/selling/doctype/installation_note/installation_note.js
+++ b/erpnext/selling/doctype/installation_note/installation_note.js
@@ -1,7 +1,7 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/utils.js");
+
 
 frappe.ui.form.on_change("Installation Note", "customer",
 	function(frm) { erpnext.utils.get_party_details(frm); });
diff --git a/erpnext/selling/report/quotation_trends/quotation_trends.js b/erpnext/selling/report/quotation_trends/quotation_trends.js
index ba62bf1..294aea0 100644
--- a/erpnext/selling/report/quotation_trends/quotation_trends.js
+++ b/erpnext/selling/report/quotation_trends/quotation_trends.js
@@ -1,8 +1,9 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/sales_trends_filters.js");
+frappe.require("assets/erpnext/js/sales_trends_filters.js", function() {
+	frappe.query_reports["Quotation Trends"] = {
+		filters: get_filters()
+	}
+});
 
-frappe.query_reports["Quotation Trends"] = {
-	filters: get_filters()
- }
\ No newline at end of file
diff --git a/erpnext/selling/report/sales_order_trends/sales_order_trends.js b/erpnext/selling/report/sales_order_trends/sales_order_trends.js
index cee6004..863afb8 100644
--- a/erpnext/selling/report/sales_order_trends/sales_order_trends.js
+++ b/erpnext/selling/report/sales_order_trends/sales_order_trends.js
@@ -1,8 +1,8 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/sales_trends_filters.js");
-
-frappe.query_reports["Sales Order Trends"] = {
-	filters: get_filters()
- }
\ No newline at end of file
+frappe.require("assets/erpnext/js/sales_trends_filters.js", function() {
+	frappe.query_reports["Sales Order Trends"] = {
+		filters: get_filters()
+	}
+});
\ No newline at end of file
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index 167024b..5906a4f 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -5,11 +5,10 @@
 cur_frm.cscript.tax_table = "Sales Taxes and Charges";
 {% include 'erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.js' %}
 
-frappe.provide("erpnext.selling");
-frappe.require("assets/erpnext/js/controllers/transaction.js");
 
 cur_frm.email_field = "contact_email";
 
+frappe.provide("erpnext.selling");
 erpnext.selling.SellingController = erpnext.TransactionController.extend({
 	onload: function() {
 		this._super();
@@ -182,7 +181,7 @@
 	warehouse: function(doc, cdt, cdn) {
 		var me = this;
 		var item = frappe.get_doc(cdt, cdn);
-		
+
 		if(item.item_code && item.warehouse) {
 			return this.frm.call({
 				method: "erpnext.stock.get_item_details.get_bin_details",
diff --git a/erpnext/setup/doctype/item_group/item_group.py b/erpnext/setup/doctype/item_group/item_group.py
index 4b26cfc..d7dae68 100644
--- a/erpnext/setup/doctype/item_group/item_group.py
+++ b/erpnext/setup/doctype/item_group/item_group.py
@@ -58,7 +58,7 @@
 		if start < 0:
 			start = 0
 		context.update({
-			"items": get_product_list_for_group(product_group = self.name, start=start, limit=24, search=frappe.form_dict.get("q")),
+			"items": get_product_list_for_group(product_group = self.name, start=start, limit=24, search=frappe.form_dict.get("search")),
 			"parent_groups": get_parent_item_groups(self.name),
 			"title": self.name,
 			"products_as_list": cint(frappe.db.get_single_value('Website Settings', 'products_as_list'))
diff --git a/erpnext/shopping_cart/cart.py b/erpnext/shopping_cart/cart.py
index 2c3257e..c85dd8f 100644
--- a/erpnext/shopping_cart/cart.py
+++ b/erpnext/shopping_cart/cart.py
@@ -92,8 +92,9 @@
 
 	set_cart_count(quotation)
 
-	if with_items:
-		context = get_cart_quotation(quotation)
+	context = get_cart_quotation(quotation)
+	
+	if cint(with_items):
 		return {
 			"items": frappe.render_template("templates/includes/cart/cart_items.html",
 				context),
@@ -101,7 +102,17 @@
 				context),
 		}
 	else:
-		return quotation.name
+		return {
+			'name': quotation.name,
+			'shopping_cart_menu': get_shopping_cart_menu(context)
+		}
+		
+@frappe.whitelist()
+def get_shopping_cart_menu(context=None):
+	if not context:
+		context = get_cart_quotation()
+		
+	return frappe.render_template('templates/includes/cart/cart_dropdown.html', context)
 
 @frappe.whitelist()
 def update_cart_address(address_fieldname, address_name):
diff --git a/erpnext/stock/dashboard/item_dashboard.js b/erpnext/stock/dashboard/item_dashboard.js
index e7e89ce..99edb0f 100644
--- a/erpnext/stock/dashboard/item_dashboard.js
+++ b/erpnext/stock/dashboard/item_dashboard.js
@@ -160,17 +160,22 @@
 		});
 	});
 
-	$('<p><a class="link-open">' + __("Add more items or open form") + '</a></p>')
+	$('<p style="margin-left: 10px;"><a class="link-open text-muted small">'
+		+ __("Add more items or open full form") + '</a></p>')
 		.appendTo(dialog.body)
 		.find('.link-open')
 		.on('click', function() {
-			var doc = frappe.new_doc('Stock Entry');
-			doc.from_warehouse = dialog.get_value('source');
-			doc.to_warehouse = dialog.get_value('target');
-			row = frappe.model.add_child(doc, 'items');
-			row.item_code = dialog.get_value('item_code');
-			row.qty = dialog.get_value('qty');
-			row.basic_rate = dialog.get_value('rate');
-			frappe.set_route('Form', doc.doctype, doc.name);
+			frappe.model.with_doctype('Stock Entry', function() {
+				var doc = frappe.model.get_new_doc('Stock Entry');
+				doc.from_warehouse = dialog.get_value('source');
+				doc.to_warehouse = dialog.get_value('target');
+				row = frappe.model.add_child(doc, 'items');
+				row.item_code = dialog.get_value('item_code');
+				row.f_warehouse = dialog.get_value('target');
+				row.t_warehouse = dialog.get_value('target');
+				row.qty = dialog.get_value('qty');
+				row.basic_rate = dialog.get_value('rate');
+				frappe.set_route('Form', doc.doctype, doc.name);
+			})
 		});
 }
\ No newline at end of file
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index 79a4ea6..6c6a3b3 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -329,9 +329,12 @@
 def get_list_context(context=None):
 	from erpnext.controllers.website_list_for_contact import get_list_context
 	list_context = get_list_context(context)
-	list_context["title"] = _("My Shipments")
-	list_context["show_sidebar"] = True
-	list_context["show_search"] = True
+	list_context.update({
+		'show_sidebar': True,
+		'show_search': True,
+		'no_breadcrumbs': True,
+		'title': _('Shipments'),
+	})
 	return list_context
 
 def get_invoiced_qty_map(delivery_note):
diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js
index 050f583..7f2be4f 100644
--- a/erpnext/stock/doctype/item/item.js
+++ b/erpnext/stock/doctype/item/item.js
@@ -2,11 +2,9 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.provide("erpnext.item");
-frappe.require('assets/js/item-dashboard.min.js');
 
 frappe.ui.form.on("Item", {
 	onload: function(frm) {
-		frm.hide_first = true;
 		erpnext.item.setup_queries(frm);
 		if (frm.doc.variant_of){
 			frm.fields_dict["attributes"].grid.set_column_disp("attribute_value", true);
@@ -78,17 +76,6 @@
 
 		erpnext.item.toggle_attributes(frm);
 
-		frm.dashboard.show_heatmap = frm.doc.is_stock_item;
-		frm.dashboard.heatmap_message = __('This is based on stock movement. See {0} for details',
-			['<a href="#query-report/Stock Ledger">' + __('Stock Ledger') + '</a>']);
-		frm.dashboard.show_dashboard();
-
-		var section = frm.dashboard.add_section('<h5 style="margin-top: 0px;">Stock Levels</h5>');
-		erpnext.item.item_dashboard = new erpnext.stock.ItemDashboard({
-			parent: section,
-			item_code: frm.doc.name
-		});
-		erpnext.item.item_dashboard.refresh();
 
 	},
 
@@ -185,6 +172,20 @@
 		frm.dashboard.reset();
 		if(frm.doc.__islocal)
 			return;
+
+		frm.dashboard.show_heatmap = frm.doc.is_stock_item;
+		frm.dashboard.heatmap_message = __('This is based on stock movement. See {0} for details',
+			['<a href="#query-report/Stock Ledger">' + __('Stock Ledger') + '</a>']);
+		frm.dashboard.show_dashboard();
+
+		frappe.require('assets/js/item-dashboard.min.js', function() {
+			var section = frm.dashboard.add_section('<h5 style="margin-top: 0px;">Stock Levels</h5>');
+			erpnext.item.item_dashboard = new erpnext.stock.ItemDashboard({
+				parent: section,
+				item_code: frm.doc.name
+			});
+			erpnext.item.item_dashboard.refresh();
+		});
 	},
 
 	edit_prices_button: function(frm) {
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index aa5f330..d403b18 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -147,7 +147,8 @@
 		file = frappe.get_all("File", filters={
 			"file_url": self.website_image
 		}, fields=["name", "is_private"], order_by="is_private asc", limit_page_length=1)
-
+		
+		
 		if file:
 			file = file[0]
 
@@ -507,9 +508,22 @@
 			clear_cache(self.page_name)
 
 		frappe.db.set_value("Item", newdn, "item_code", newdn)
+		
 		if merge:
 			self.set_last_purchase_rate(newdn)
 			self.recalculate_bin_qty(newdn)
+			
+		for dt in ("Sales Taxes and Charges", "Purchase Taxes and Charges"):
+			for d in frappe.db.sql("""select name, item_wise_tax_detail from `tab{0}` 
+					where ifnull(item_wise_tax_detail, '') != ''""".format(dt), as_dict=1):
+				
+				item_wise_tax_detail = json.loads(d.item_wise_tax_detail)
+				if olddn in item_wise_tax_detail:
+					item_wise_tax_detail[newdn] = item_wise_tax_detail[olddn]
+					item_wise_tax_detail.pop(olddn)
+					
+					frappe.db.set_value(dt, d.name, "item_wise_tax_detail", 
+						json.dumps(item_wise_tax_detail), update_modified=False)
 
 	def set_last_purchase_rate(self, newdn):
 		last_purchase_rate = get_last_purchase_details(newdn).get("base_rate", 0)
@@ -606,7 +620,8 @@
 			variant = get_variant(self.variant_of, args, self.name)
 			if variant:
 				frappe.throw(_("Item variant {0} exists with same attributes")
-					.format(variant), ItemVariantExistsError)
+					.format(variant), ItemVariantExistsError)			
+			
 
 @frappe.whitelist()
 def get_dashboard_data(name):
diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js
index 5a86c89..15a5759 100644
--- a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js
+++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js
@@ -3,7 +3,6 @@
 
 
 frappe.provide("erpnext.stock");
-frappe.require("assets/erpnext/js/controllers/stock_controller.js");
 
 erpnext.stock.LandedCostVoucher = erpnext.stock.StockController.extend({
 	setup: function() {
@@ -11,16 +10,16 @@
 		this.frm.fields_dict.purchase_receipts.grid.get_field('receipt_document').get_query =
 			function(doc, cdt ,cdn) {
 				var d = locals[cdt][cdn]
-				
+
 				var filters = [
 					[d.receipt_document_type, 'docstatus', '=', '1'],
 					[d.receipt_document_type, 'company', '=', me.frm.doc.company],
 				]
-				
+
 				if(d.receipt_document_type == "Purchase Invoice") {
 					filters.push(["Purchase Invoice", "update_stock", "=", "1"])
 				}
-								
+
 				if(!me.frm.doc.company) msgprint(__("Please enter company first"));
 				return {
 					filters:filters
diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js
index a4bae78..1dcbcb7 100644
--- a/erpnext/stock/doctype/material_request/material_request.js
+++ b/erpnext/stock/doctype/material_request/material_request.js
@@ -3,7 +3,7 @@
 
 {% include 'erpnext/buying/doctype/purchase_common/purchase_common.js' %};
 
-frappe.require("assets/erpnext/js/utils.js");
+
 
 frappe.ui.form.on("Material Request Item", {
 	"qty": function(frm, doctype, name) {
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 1696b02..76b0395 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -1,10 +1,5 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt
 
-frappe.require([
-	"assets/erpnext/js/controllers/stock_controller.js",
-	"assets/erpnext/js/utils.js",
-	"assets/erpnext/js/utils/item_selector.js"]);
-
 frappe.provide("erpnext.stock");
 
 erpnext.stock.StockEntry = erpnext.stock.StockController.extend({
diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
index f5f4e03..ead110c 100644
--- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
+++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
@@ -1,8 +1,6 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/controllers/stock_controller.js");
-frappe.require("assets/erpnext/js/utils.js");
 frappe.provide("erpnext.stock");
 
 frappe.ui.form.on("Stock Reconciliation", {
diff --git a/erpnext/stock/page/stock_analytics/stock_analytics.js b/erpnext/stock/page/stock_analytics/stock_analytics.js
index bd2d9f6..f86201f 100644
--- a/erpnext/stock/page/stock_analytics/stock_analytics.js
+++ b/erpnext/stock/page/stock_analytics/stock_analytics.js
@@ -1,19 +1,16 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
+frappe.require("assets/erpnext/js/stock_analytics.js", function() {
+	frappe.pages['stock-analytics'].on_page_load = function(wrapper) {
+		frappe.ui.make_app_page({
+			parent: wrapper,
+			title: __('Stock Analytics'),
+			single_column: true
+		});
 
-frappe.pages['stock-analytics'].on_page_load = function(wrapper) {
-	frappe.ui.make_app_page({
-		parent: wrapper,
-		title: __('Stock Analytics'),
-		single_column: true
-	});
+		new erpnext.StockAnalytics(wrapper);
 
-	new erpnext.StockAnalytics(wrapper);
-
-
-	frappe.breadcrumbs.add("Stock")
-
-};
-
-frappe.require("assets/erpnext/js/stock_analytics.js");
+		frappe.breadcrumbs.add("Stock")
+	};
+});
diff --git a/erpnext/stock/page/stock_balance/stock_balance.js b/erpnext/stock/page/stock_balance/stock_balance.js
index 7bf4792..2b6fd8d 100644
--- a/erpnext/stock/page/stock_balance/stock_balance.js
+++ b/erpnext/stock/page/stock_balance/stock_balance.js
@@ -1,5 +1,3 @@
-frappe.require('assets/js/item-dashboard.min.js');
-
 frappe.pages['stock-balance'].on_page_load = function(wrapper) {
 	var page = frappe.ui.make_app_page({
 		parent: wrapper,
@@ -52,32 +50,35 @@
 
 	page.sort_selector.wrapper.css({'margin-right': '15px', 'margin-top': '4px'});
 
-	page.item_dashboard = new erpnext.stock.ItemDashboard({
-		parent: page.main,
-	})
+	frappe.require('assets/js/item-dashboard.min.js', function() {
+		page.item_dashboard = new erpnext.stock.ItemDashboard({
+			parent: page.main,
+		})
 
-	page.item_dashboard.before_refresh = function() {
-		this.item_code = page.item_field.get_value();
-		this.warehouse = page.warehouse_field.get_value();
-	}
+		page.item_dashboard.before_refresh = function() {
+			this.item_code = page.item_field.get_value();
+			this.warehouse = page.warehouse_field.get_value();
+		}
 
-	page.item_dashboard.refresh();
+		page.item_dashboard.refresh();
 
-	// item click
-	var setup_click = function(doctype) {
-		page.main.on('click', 'a[data-type="'+ doctype.toLowerCase() +'"]', function() {
-			var name = $(this).attr('data-name');
-			var field = page[doctype.toLowerCase() + '_field'];
-			if(field.get_value()===name) {
-				frappe.set_route('Form', doctype, name)
-			} else {
-				field.set_input(name);
-				page.item_dashboard.refresh();
-			}
-		});
-	}
+		// item click
+		var setup_click = function(doctype) {
+			page.main.on('click', 'a[data-type="'+ doctype.toLowerCase() +'"]', function() {
+				var name = $(this).attr('data-name');
+				var field = page[doctype.toLowerCase() + '_field'];
+				if(field.get_value()===name) {
+					frappe.set_route('Form', doctype, name)
+				} else {
+					field.set_input(name);
+					page.item_dashboard.refresh();
+				}
+			});
+		}
 
-	setup_click('Item');
-	setup_click('Warehouse');
+		setup_click('Item');
+		setup_click('Warehouse');
+	});
+
 
 }
\ No newline at end of file
diff --git a/erpnext/stock/report/delivery_note_trends/delivery_note_trends.js b/erpnext/stock/report/delivery_note_trends/delivery_note_trends.js
index 45955fb..0e12907 100644
--- a/erpnext/stock/report/delivery_note_trends/delivery_note_trends.js
+++ b/erpnext/stock/report/delivery_note_trends/delivery_note_trends.js
@@ -1,8 +1,9 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/sales_trends_filters.js");
+frappe.require("assets/erpnext/js/sales_trends_filters.js", function() {
+	frappe.query_reports["Delivery Note Trends"] = {
+		filters: get_filters()
+	}
+});
 
-frappe.query_reports["Delivery Note Trends"] = {
-	filters: get_filters()
- }
\ No newline at end of file
diff --git a/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.js b/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.js
index 19a58ef..d94b49e 100644
--- a/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.js
+++ b/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.js
@@ -1,8 +1,9 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/purchase_trends_filters.js");
+frappe.require("assets/erpnext/js/purchase_trends_filters.js", function() {
+	frappe.query_reports["Purchase Receipt Trends"] = {
+		filters: get_filters()
+	}
+});
 
-frappe.query_reports["Purchase Receipt Trends"] = {
-	filters: get_filters()
- }
\ No newline at end of file
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index d3fa482..ed67322 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -215,6 +215,8 @@
 		stock_value_change = 0
 		if incoming_rate:
 			stock_value_change = actual_qty * incoming_rate
+		elif flt(sle.outgoing_rate):
+			stock_value_change = actual_qty * flt(sle.outgoing_rate)
 		elif actual_qty < 0:
 			# In case of delivery/stock issue, get average purchase rate
 			# of serial nos of current entry
diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py
index fcc1edf..ab8e6d8 100644
--- a/erpnext/support/doctype/issue/issue.py
+++ b/erpnext/support/doctype/issue/issue.py
@@ -55,11 +55,12 @@
 
 def get_list_context(context=None):
 	return {
-		"title": _("My Issues"),
+		"title": _("Issues"),
 		"get_list": get_issue_list,
 		"row_template": "templates/includes/issue_row.html",
 		"show_sidebar": True,
-		"show_search": True
+		"show_search": True,
+		'no_breadcrumbs': True
 	}
 
 def get_issue_list(doctype, txt, filters, limit_start, limit_page_length=20):
diff --git a/erpnext/support/doctype/maintenance_visit/maintenance_visit.js b/erpnext/support/doctype/maintenance_visit/maintenance_visit.js
index b37c47b..a267eb3 100644
--- a/erpnext/support/doctype/maintenance_visit/maintenance_visit.js
+++ b/erpnext/support/doctype/maintenance_visit/maintenance_visit.js
@@ -2,7 +2,7 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.provide("erpnext.support");
-frappe.require("assets/erpnext/js/utils.js");
+
 
 frappe.ui.form.on_change("Maintenance Visit", "customer", function(frm) {
 	erpnext.utils.get_party_details(frm) });
diff --git a/erpnext/support/doctype/warranty_claim/warranty_claim.js b/erpnext/support/doctype/warranty_claim/warranty_claim.js
index 3928577..0511ff6 100644
--- a/erpnext/support/doctype/warranty_claim/warranty_claim.js
+++ b/erpnext/support/doctype/warranty_claim/warranty_claim.js
@@ -2,7 +2,8 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.provide("erpnext.support");
-frappe.require("assets/erpnext/js/utils.js");
+
+{% include "erpnext/public/js/utils.js" %}
 
 frappe.ui.form.on("Warranty Claim", {
 	customer: function(frm) {
diff --git a/erpnext/templates/form_grid/item_grid.html b/erpnext/templates/form_grid/item_grid.html
index 1c50e15..c596890 100644
--- a/erpnext/templates/form_grid/item_grid.html
+++ b/erpnext/templates/form_grid/item_grid.html
@@ -13,7 +13,7 @@
 	<div class="row">
 		<div class="col-sm-6 col-xs-8">
 			{% if(doc.warehouse) {
-				var label_class = "label-default",
+				var color = "grey",
 					title = "Warehouse",
 					actual_qty = (frm.doc.doctype==="Sales Order"
 						? doc.projected_qty : doc.actual_qty);
@@ -21,16 +21,16 @@
                     && in_list(["Sales Order Item", "Delivery Note Item"], doc.doctype)) {
     				if(actual_qty != undefined) {
     					if(actual_qty >= doc.qty) {
-    						var label_class = "label-success";
+    						var color = "green";
     						var title = "In Stock"
     					} else {
-    						var label_class = "label-danger";
+    						var color = "red";
     						var title = "Not In Stock"
     					}
     				}
                 } %}
-				<span class="pull-right" title="{%= title %}">
-					<span class="label {%= label_class %}">
+				<span class="pull-right" title="{%= title %}" style="margin-left: 10px;">
+					<span class="indicator {{ color }}">
 						{%= doc.warehouse %}
 					</span>
 				</span>
diff --git a/erpnext/templates/form_grid/stock_entry_grid.html b/erpnext/templates/form_grid/stock_entry_grid.html
index a2bf1df..8604881 100644
--- a/erpnext/templates/form_grid/stock_entry_grid.html
+++ b/erpnext/templates/form_grid/stock_entry_grid.html
@@ -16,21 +16,27 @@
 			{% if(doc.item_name != doc.item_code) { %}
 				<br>{%= doc.item_name %}{% } %}
 			{% include "templates/form_grid/includes/visible_cols.html" %}
-			{% if(frm.doc.docstatus==0 && doc.s_warehouse && doc.actual_qty < doc.qty) { %}
-                <span class="text-danger small" style="margin-left: 15px;">
-                    Not in Stock
-                </span>
-            {% } %}
 		</div>
 
         <!-- warehouse -->
 		<div class="col-sm-3 col-xs-4">
-			{% if(doc.s_warehouse) { %}
-                <span class="label label-default grid-label" title="{% __("Source" )%}">
-				{%= doc.s_warehouse || "" %}</span>
-            {% } %}
-			{% if(doc.t_warehouse) { %}<span class="label label-primary grid-label" title="{% __("Target" )%}">
-				{%= doc.t_warehouse || "" %}</span>{% } %}
+			{% if(doc.s_warehouse) {
+					if(frm.doc.docstatus==0) {
+						var color = (doc.s_warehouse && doc.actual_qty < doc.qty) ? "red" : "green";
+						var title = color === "red" ? __("Not in Stock") : __("In Stock");
+					} else {
+						var color = "grey";
+						var title = __("Source");
+					}
+				%}
+				 <span class="indicator {{ color }}" title="{{ title }}">
+					 {%= doc.s_warehouse %}</span>
+            {% }; %}
+			{% if(doc.t_warehouse) { %}
+				<div><span class="indicator {{ doc.docstatus==1 ? "blue" : "grey" }}" title="{{ __("Target" ) }}">
+					{%= doc.t_warehouse %}</span>
+				</div>
+            {% }; %}
 		</div>
 
 		<!-- qty -->
diff --git a/erpnext/templates/generators/item.html b/erpnext/templates/generators/item.html
index dabbf48..e074fa3 100644
--- a/erpnext/templates/generators/item.html
+++ b/erpnext/templates/generators/item.html
@@ -52,8 +52,10 @@
 				</div>
 				<br>
 				<div style="min-height: 100px; margin: 10px 0;">
-					<h4 class="item-price" itemprop="price"></h4>
-					<div class="item-stock" itemprop="availablity"></div>
+					<div itemprop="offers" itemscope itemtype="http://schema.org/Offer">
+						<h4 class="item-price" itemprop="price"></h4>
+						<div class="item-stock" itemprop="availability"></div>
+					</div>	
                     <div class="item-cart hide">
     					<div id="item-add-to-cart">
     						<button class="btn btn-primary btn-sm">
@@ -71,7 +73,7 @@
 		</div>
 		<div class="row item-website-description" style="margin-top:30px; margin-bottom:20px">
 			<div class="col-md-12">
-		<h4>{{ _("DESCRIPTION") }}</h4>
+		<div class="h6 text-uppercase">{{ _("Description") }}</div>
 		<div itemprop="description" class="item-desc">
 		{{ web_long_description or description or _("No description given") }}
 		</div>
@@ -81,7 +83,7 @@
 		{% if website_specifications -%}
 		<div class="row item-website-specification" style="margin-top: 40px">
 			<div class="col-md-12">
-				<h4>{{ _("SPECIFICATIONS") }}</h4>
+				<div class="h6 text-uppercase">{{ _("Specifications") }}</div>
 
 				<table class="table borderless" style="width: 100%">
 				{% for d in website_specifications -%}
diff --git a/erpnext/templates/generators/item_group.html b/erpnext/templates/generators/item_group.html
index d014263..b9926d6 100644
--- a/erpnext/templates/generators/item_group.html
+++ b/erpnext/templates/generators/item_group.html
@@ -1,8 +1,5 @@
 {% extends "templates/web.html" %}
 
-{#{% block header_actions %}
-{% include 'templates/includes/product_search_box.html' %}
-{% endblock %}#}
 {% block header %}<h1>{{ _("Products") }}</h1>{% endblock %}
 {% block breadcrumbs %}
  <div class="page-breadcrumbs" data-html-block="breadcrumbs">
@@ -16,7 +13,7 @@
 {% endblock %}
 
 {% block page_content %}
-<div class="item-group-content">
+<div class="item-group-content" itemscope itemtype="http://schema.org/Product">
 	<div>
 		{% if slideshow %}<!-- slideshow -->
 		{% include "templates/includes/slideshow.html" %}
diff --git a/erpnext/templates/includes/cart.css b/erpnext/templates/includes/cart.css
index 07302db..e69de29 100644
--- a/erpnext/templates/includes/cart.css
+++ b/erpnext/templates/includes/cart.css
@@ -1,32 +0,0 @@
-.cart-content {
-	min-height: 400px;
-	margin-top: 60px;
-}
-
-.cart-header, .cart-footer {
-	margin-bottom: 60px;
-}
-
-.cart-item-header {
-	padding-bottom: 10px;
-	margin-bottom: 10px;
-	border-bottom: 1px solid #d1d8dd;
-}
-
-.tax-grand-total-row {
-	font-size: 14px;
-	margin-top: 30px;
-	font-weight: bold;
-}
-
-.cart-addresses {
-	margin-top: 80px;
-	margin-bottom: 60px;
-}
-
-.cart-link {
-	margin-top: 40px;
-	text-align: right;
-
-
-}
\ No newline at end of file
diff --git a/erpnext/templates/includes/cart.js b/erpnext/templates/includes/cart.js
index 9cb5e6e..2a6570f 100644
--- a/erpnext/templates/includes/cart.js
+++ b/erpnext/templates/includes/cart.js
@@ -16,6 +16,7 @@
 		shopping_cart.bind_address_select();
 		shopping_cart.bind_place_order();
 		shopping_cart.bind_change_qty();
+		shopping_cart.bind_remove_item();
 
 	},
 
@@ -62,6 +63,7 @@
 				btn: this,
 				callback: function(r) {
 					frappe.unfreeze();
+					location.reload();
 					if(!r.exc) {
 						$(".cart-items").html(r.message.items);
 						$(".cart-tax-items").html(r.message.taxes);
@@ -71,7 +73,7 @@
 			});
 		});
 	},
-
+	
 	render_tax_row: function($cart_taxes, doc, shipping_rules) {
 		var shipping_selector;
 		if(shipping_rules) {
diff --git a/erpnext/templates/includes/cart/cart_address.html b/erpnext/templates/includes/cart/cart_address.html
index 1af8f0b..29d4f4b 100644
--- a/erpnext/templates/includes/cart/cart_address.html
+++ b/erpnext/templates/includes/cart/cart_address.html
@@ -1,11 +1,10 @@
-{% from "erpnext/templates/includes/cart/cart_macros.html"
-    import show_address %}
+{% from "erpnext/templates/includes/cart/cart_macros.html" import show_address %}
 <div class="row">
 	{% if addresses|length == 1%}
 		{% set select_address = True %}
 	{% endif %}
 	<div class="col-sm-6">
-		<h4>{{ _("Shipping Address") }}</h4>
+		<div class="h6 text-uppercase">{{ _("Shipping Address") }}</div>
 		<div id="cart-shipping-address" class="panel-group"
 			data-fieldname="shipping_address_name">
             {% for address in addresses %}
@@ -16,7 +15,7 @@
 			{{ _("Manage Addresses") }}</a>
 	</div>
 	<div class="col-sm-6">
-		<h4>Billing Address</h4>
+		<div class="h6 text-uppercase">Billing Address</div>
 		<div id="cart-billing-address" class="panel-group"
 			data-fieldname="customer_address">
             {% for address in addresses %}
diff --git a/erpnext/templates/includes/cart/cart_dropdown.html b/erpnext/templates/includes/cart/cart_dropdown.html
new file mode 100644
index 0000000..18148ad
--- /dev/null
+++ b/erpnext/templates/includes/cart/cart_dropdown.html
@@ -0,0 +1,23 @@
+<div class="cart-dropdown-container">
+	<div id="cart-error" class="alert alert-danger"
+	style="display: none;"></div>
+	<div class="row cart-items-dropdown cart-item-header text-muted">
+		<div class="col-sm-6 col-xs-6 h6 text-uppercase">
+		{{ _("Item") }}
+		</div>
+		<div class="col-sm-6 col-xs-6 text-right h6 text-uppercase">
+		{{ _("Price") }}
+		</div>
+	</div>
+	
+	{% if doc.items %}
+	<div class="cart-items">
+		{% include "templates/includes/cart/cart_items.html" %}
+	</div>
+	<div class="checkout-btn">
+	<a href="/cart" class="btn btn-block btn-primary">{{ _("Checkout") }}</a>
+	</div>
+	{% else %}
+	<p>{{ _("Cart is Empty") }}</p>
+	{% endif %}
+</div>
diff --git a/erpnext/templates/includes/cart/cart_items.html b/erpnext/templates/includes/cart/cart_items.html
index f7efa78..1445e21 100644
--- a/erpnext/templates/includes/cart/cart_items.html
+++ b/erpnext/templates/includes/cart/cart_items.html
@@ -1,23 +1,30 @@
 {% from "erpnext/templates/includes/order/order_macros.html" import item_name_and_description %}
 
 {% for d in doc.items %}
-<div class="cart-item">
-    <div class="row">
-        <div class="col-sm-8 col-xs-6" style="margin-bottom: 10px;">
-            {{ item_name_and_description(d) }}
-        </div>
-        <div class="col-sm-2 col-xs-3 text-right">
-            <span style="max-width: 50px; display: inline-block">
-                <input class="form-control text-right cart-qty"
-                value = "{{ d.get_formatted('qty') }}"
-                data-item-code="{{ d.item_code }}"></span>
-    		<p class="text-muted small" style="margin-top: 10px;">
-                {{ _("Rate") + ': ' + d.get_formatted("rate") }}
-            </p>
-    	</div>
-        <div class="col-sm-2 col-xs-3 text-right">
-            {{ d.get_formatted("amount") }}
-        </div>
+<div class="row cart-items checkout">
+    <div class="col-sm-8 col-xs-6 col-name-description">
+        {{ item_name_and_description(d) }}
+    </div>
+    <div class="col-sm-2 col-xs-3 text-right col-qty">
+        <span style="max-width: 50px; display: inline-block">
+            <input class="form-control text-right cart-qty"
+            value = "{{ d.get_formatted('qty') }}"
+            data-item-code="{{ d.item_code }}"></span>    	
+	</div>
+    <div class="col-sm-2 col-xs-3 text-right col-amount">
+        {{ d.get_formatted("amount") }}
+        <p class="text-muted small item-rate">{{
+            _("Rate: {0}").format(d.get_formatted("rate")) }}</p>
     </div>
 </div>
-{% endfor %}
+
+<div class="row cart-items cart-dropdown">
+    <div class="col-sm-8 col-xs-8 col-name-description">
+        {{ item_name_and_description(d) }}
+    </div>
+    <div class="col-sm-4 col-xs-4 text-right col-amount">
+        {{ d.get_formatted("amount") }}
+
+    </div>
+</div>
+{% endfor %}
\ No newline at end of file
diff --git a/erpnext/templates/includes/issue_row.html b/erpnext/templates/includes/issue_row.html
index c090f93..f19ea85 100644
--- a/erpnext/templates/includes/issue_row.html
+++ b/erpnext/templates/includes/issue_row.html
@@ -1,13 +1,14 @@
-<div class="web-list-item">
-    <a class="no-decoration" href="/issues?name={{ doc.name }}">
+<div class="web-list-item transaction-list-item">
+    <a href="/issues?name={{ doc.name }}">
     <div class="row">
-        <div class="col-xs-8">
+        <div class="col-xs-3">
             <span class="indicator {{ "red" if doc.status=="Open" else "darkgrey"   }}">
                 {{ doc.name }}</span>
-                <span style="margin-left: 15px;">
-                    {{ doc.subject }}</span>
-        </div>
-        <div class="col-xs-4 text-right small text-muted">
+				   </div>
+                <div class="col-xs-6 items-preview text-ellipsis">
+                    {{ doc.subject }}</div>
+     
+        <div class="col-xs-3 text-right small text-muted">
             {{ frappe.format_date(doc.modified) }}
         </div>
     </div>
diff --git a/erpnext/templates/includes/macros.html b/erpnext/templates/includes/macros.html
index 05181c0..8dc433a 100644
--- a/erpnext/templates/includes/macros.html
+++ b/erpnext/templates/includes/macros.html
@@ -1,4 +1,5 @@
 {% macro product_image_square(website_image, css_class="") %}
+{% if website_image -%} <meta itemprop="image" content="{{ frappe.utils.quoted(website_image) | abs_url }}"></meta>{%- endif %}
 <div class="product-image product-image-square {% if not website_image -%} missing-image {%- endif %} {{ css_class }}"
 	{% if website_image -%} style="background-image: url('{{ frappe.utils.quoted(website_image) | abs_url }}');" {%- endif %}>
 </div>
@@ -7,7 +8,7 @@
 {% macro product_image(website_image, css_class="") %}
     <div class="product-image {% if not website_image -%} missing-image {%- endif %} {{ css_class }}">
     	{% if website_image -%}
-    		<img src="{{ frappe.utils.quoted(website_image) | abs_url }}" class="img-responsive">
+    		<img itemprop="image" src="{{ frappe.utils.quoted(website_image) | abs_url }}" class="img-responsive">
     	{%- endif %}
     </div>
 {% endmacro %}
diff --git a/erpnext/templates/includes/navbar/navbar_items.html b/erpnext/templates/includes/navbar/navbar_items.html
new file mode 100644
index 0000000..9cdbd98
--- /dev/null
+++ b/erpnext/templates/includes/navbar/navbar_items.html
@@ -0,0 +1,12 @@
+{% extends 'frappe/templates/includes/navbar/navbar_items.html' %}
+
+{% block navbar_right_extension %}
+	<li class="dropdown shopping-cart">
+		<div class="cart-icon small">
+			<a class="dropdown-toggle" href="#" data-toggle="dropdown" id="navLogin">
+				Cart <span class="badge-wrapper" id="cart-count"></span>
+			</a>
+			<div class="dropdown-menu shopping-cart-menu"></div>
+		</div>
+	 </li>
+{% endblock %}
\ No newline at end of file
diff --git a/erpnext/templates/includes/order/order_macros.html b/erpnext/templates/includes/order/order_macros.html
index af974aa..1bb7b2c 100644
--- a/erpnext/templates/includes/order/order_macros.html
+++ b/erpnext/templates/includes/order/order_macros.html
@@ -1,7 +1,7 @@
 {% from "erpnext/templates/includes/macros.html" import product_image_square %}
 
 {% macro item_name_and_description(d) %}
-    <div class="row">
+    <div class="row item_name_and_description">
         <div class="col-xs-4 col-sm-2 order-image-col">
             <div class="order-image">
                 {{ product_image_square(d.image) }}
@@ -9,7 +9,18 @@
         </div>
         <div class="col-xs-8 col-sm-10">
             {{ d.item_code }}
-            <p class="text-muted small">{{ d.description }}</p>
+            <p class="text-muted small item-description">{{ d.description }}</p>
         </div>
     </div>
-{% endmacro %}
+	
+    <div class="row item_name_dropdown">
+        <div class="col-xs-4 col-sm-4 order-image-col">
+            <div class="order-image">
+              <span class="cart-count-badge pull-right small"> {{ d.get_formatted('qty') }} </span>{{ product_image_square(d.image) }}
+            </div>		
+        </div>
+        <div class="col-xs-8 col-sm-8">
+            {{ d.item_code }}
+        </div>
+    </div>
+{% endmacro %}
\ No newline at end of file
diff --git a/erpnext/templates/includes/products_as_grid.html b/erpnext/templates/includes/products_as_grid.html
index ff39f1f..0a66de2 100644
--- a/erpnext/templates/includes/products_as_grid.html
+++ b/erpnext/templates/includes/products_as_grid.html
@@ -1,8 +1,10 @@
 {% from "erpnext/templates/includes/macros.html" import product_image_square %}
 
 <a class="product-link" href="{{ (route or page_name)|abs_url }}">
-	<div class="col-sm-2 col-xs-4 product-image-wrapper">
+	<div class="col-sm-4 col-xs-4 product-image-wrapper">
+		<div class="product-image-img">
 		{{ product_image_square(thumbnail or website_image) }}
-		<div class="text-ellipsis inline-block small product-text">{{ item_name }}</div>
+		<div class="product-text" itemprop="name">{{ item_name }}</div>
+		</div>
 	</div>
 </a>
diff --git a/erpnext/templates/includes/projects.css b/erpnext/templates/includes/projects.css
index e4aa81b..1f758e3 100644
--- a/erpnext/templates/includes/projects.css
+++ b/erpnext/templates/includes/projects.css
@@ -83,7 +83,6 @@
 }
 
 .progress-hg{
-	margin-bottom: 0!important;
-	margin-top: 30px!important;
-	height:5px;
+	margin-bottom: 30!important;
+	height:2px;
 }
\ No newline at end of file
diff --git a/erpnext/templates/includes/transaction_row.html b/erpnext/templates/includes/transaction_row.html
index 05aed90..2165a06 100644
--- a/erpnext/templates/includes/transaction_row.html
+++ b/erpnext/templates/includes/transaction_row.html
@@ -1,23 +1,19 @@
 <div class="web-list-item transaction-list-item">
 	<a href="/{{ pathname }}/{{ doc.name }}">
 		<div class="row">
-			<div class="col-sm-6">
-				<span>{{ doc.name }}</span>
-				<div class="small text-muted items-preview text-ellipsis">
-					{{ doc.items_preview }}
-				</div>
-			</div>
-			<div class="col-sm-4">
-				<span class="indicator {{ doc.indicator_color or "darkgrey" }}">
-					{{ doc.indicator_title or doc.status }}
-				</span>
+			<div class="col-sm-5">
+				<span class="indicator small {{ doc.indicator_color or "darkgrey" }}">
+				{{ doc.name }}</span>	
 				<div class="small text-muted transaction-time"
 					title="{{ frappe.utils.format_datetime(doc.modified, "medium") }}">
-					{{ frappe.utils.pretty_date(doc.modified) }}
-				</div>
+					{{ frappe.utils.format_datetime(doc.modified, "medium") }}
+				</div>			
 			</div>
-			<div class="col-sm-2 text-right">
-				{{ doc.get_formatted("grand_total") }}
+			<div class="col-sm-4 items-preview text-ellipsis">
+				{{ doc.items_preview }}
+			</div>
+			<div class="col-sm-3 text-right">
+				{{ doc.get_formatted("grand_total") }}				
 			</div>
 			<!-- <div class="col-sm-3 text-right">
 
diff --git a/erpnext/templates/pages/cart.html b/erpnext/templates/pages/cart.html
index afba9b8..229d6d6 100644
--- a/erpnext/templates/pages/cart.html
+++ b/erpnext/templates/pages/cart.html
@@ -8,12 +8,6 @@
 <script>{% include "templates/includes/cart.js" %}</script>
 {% endblock %}
 
-{% block style %}
-<style>
-    {% include "templates/includes/cart.css" %}
-</style>
-{% endblock %}
-
 
 {% block header_actions %}
 {% if doc.items %}
@@ -27,57 +21,55 @@
 
 {% from "templates/includes/macros.html" import item_name_and_description %}
 
-<div class="cart-content">
-	<div id="cart-container">
-		<div id="cart-error" class="alert alert-danger"
-            style="display: none;"></div>
-    	<div id="cart-items">
-            <div class="row cart-item-header">
-                <div class="col-sm-8 col-xs-6">
-                    Items
-                </div>
-                <div class="col-sm-2 col-xs-3 text-right">
-                    Qty
-            	</div>
-                <div class="col-sm-2 col-xs-3 text-right">
-                    Amount
-            	</div>
-            </div>
-            {% if doc.items %}
-            <div class="cart-items">
-            {% include "templates/includes/cart/cart_items.html" %}
-            </div>
-            {% else %}
-            <p>{{ _("Cart is Empty") }}</p>
-            {% endif %}
-    	</div>
-        {% if doc.items %}
-        <!-- taxes -->
-        <div class="cart-taxes row small">
-            <div class="col-sm-8"><!-- empty --></div>
-            <div class="col-sm-4 cart-tax-items">
-                {% include "templates/includes/order/order_taxes.html" %}
-            </div>
-        </div>
-    	<div id="cart-totals">
-    	</div>
-        {% if doc.tc_name %}
-          <div class="cart-terms" style="display: none;" title={{doc.tc_name}}>
-          {{doc.tc_name}}
-          {{doc.terms}}
-          </div>
-          <div class="cart-link">
-            <a href="#" onclick="show_terms();return false;">*Terms and Conditions</a>
-          </div>
-        {% endif %}
-    	<div class="cart-addresses">
-            {% include "templates/includes/cart/cart_address.html" %}
-    	</div>
-    	<p class="cart-footer text-right">
-            <button class="btn btn-primary btn-place-order btn-sm" type="button">
-    		{{ _("Place Order") }}</button></p>
-        {% endif %}
-    </div>
+<div class="cart-container">
+	<div id="cart-error" class="alert alert-danger"
+	style="display: none;"></div>
+	<div class="row cart-items cart-item-header text-muted">
+		<div class="col-sm-8 col-xs-6 h6 text-uppercase">
+		{{ _("Item") }}
+		</div>
+		<div class="col-sm-2 col-xs-3 text-right h6 text-uppercase">
+		{{ _("Qty") }}
+		</div>
+		<div class="col-sm-2 col-xs-3 text-right h6 text-uppercase">
+		{{ _("Subtotal") }}
+		</div>
+	</div>
+	{% if doc.items %}
+	<div class="cart-items">
+		{% include "templates/includes/cart/cart_items.html" %}
+	</div>
+	{% else %}
+	<p>{{ _("Cart is Empty") }}</p>
+	{% endif %}
+
+	{% if doc.items %}
+	<!-- taxes -->
+	<div class="row cart-taxes">
+		<div class="col-sm-6"><!-- empty --></div>
+		<div class="col-sm-6 text-right">
+		{% include "templates/includes/order/order_taxes.html" %}
+		</div>
+	</div>
+
+	{% if doc.tc_name %}
+		<div class="cart-terms" style="display: none;" title={{doc.tc_name}}>
+			{{doc.tc_name}}
+			{{doc.terms}}
+		</div>
+		<div class="cart-link">
+			<a href="#" onclick="show_terms();return false;">*Terms and Conditions</a>
+		</div>
+	{% endif %}
+
+	<div class="cart-addresses">
+	{% include "templates/includes/cart/cart_address.html" %}
+	</div>
+
+	<p class="cart-footer text-right">
+	<button class="btn btn-primary btn-place-order btn-sm" type="button">
+	{{ _("Place Order") }}</button></p>
+	{% endif %}
 </div>
 
 <!-- no-sidebar -->
diff --git a/erpnext/templates/pages/home.html b/erpnext/templates/pages/home.html
index e6cfc90..5ec396d 100644
--- a/erpnext/templates/pages/home.html
+++ b/erpnext/templates/pages/home.html
@@ -7,32 +7,27 @@
 
 <div class="row">
 	<div class="col-sm-12">
-		<h2 class="text-center">{{ homepage.tag_line or '' }}</h2>
-		<p class="lead text-center">{{ homepage.description or '' }}</p>
-		<p class="text-center">
-			<a href="/login" class="btn btn-primary text-center">Login</a>
-		</p>
-
+		<div class="homepage-tagline h1 text-center">{{ homepage.tag_line or '' }}</div>
+		<p class="text-center">{{ homepage.description or '' }}</p>
 		{% if homepage.products %}
-		<!-- TODO: styling of this section -->
-		<div class='featured-products-section'>
-			<h5 class='text-uppercase'>{{ _("Featured Products") }}</h5>
+		<div class='featured-products-section' itemscope itemtype="http://schema.org/Product">
+			<h5 class='featured-product-heading'>{{ _("Featured Products") }}</h5>
 			<div class="featured-products">
 				<div id="search-list" class="row" style="margin-top:40px;">
 					{% for item in homepage.products %}
-						<a class="product-link" href="{{ item.route | abs_url }}">
-							<div class="col-sm-4 product-image-wrapper">
-								{{ product_image_square(item.thumbnail or item.image) }}
-								<div class="text-ellipsis inline-block small product-text">
-									{{ item.item_name }}
-								</div>
+					<a class="product-link" href="{{ item.route|abs_url }}">
+						<div class="col-sm-4 col-xs-4 product-image-wrapper">
+							<div class="product-image-img">
+							{{ product_image_square(item.thumbnail or item.image) }}
+							<div class="product-text" itemprop="name">{{ item.item_name }}</div>
 							</div>
-						</a>
+						</div>
+					</a>
 					{% endfor %}
 				</div>
 			</div>
 			<!-- TODO: remove hardcoding of /products -->
-			<p class="text-center"><a href="/products" class="btn btn-primary">More Products</a></p>
+			<div class=" text-center text-uppercase"><a href="/products" class="btn btn-primary all-products">  {{ _("View All Products") }}</a></div>
 		</div>
 		{% endif %}
 	</div>
@@ -42,7 +37,16 @@
 {% block style %}
 <style>
 	.featured-products-section {
-		margin-top: 75px;
+		margin-top: 95px;
 	}
+
+	.home-login {
+		margin-top: 30px;
+	}
+	.btn-login {
+		width: 80px;
+	}
+	
+	
 </style>
 {% endblock %}
diff --git a/erpnext/templates/pages/home.py b/erpnext/templates/pages/home.py
index 9488efe..e7ff2ce 100644
--- a/erpnext/templates/pages/home.py
+++ b/erpnext/templates/pages/home.py
@@ -11,34 +11,11 @@
 
 def get_context(context):
 	homepage = frappe.get_doc('Homepage')
+	
+	for item in homepage.products:
+		item.route = '/' + '/'.join(frappe.db.get_value('Item', item.item_code, ['parent_website_route', 'page_name']))
+		
+	
 	return {
 		'homepage': homepage
-	}
-
-
-@frappe.whitelist(allow_guest=True)
-def get_product_list(search=None, start=0, limit=6):
-	# limit = 12 because we show 12 items in the grid view
-
-	# base query
-	query = """select name, item_name, page_name, website_image, thumbnail, item_group,
-			web_long_description as website_description, parent_website_route
-		from `tabItem`
-		where show_in_website = 1
-			and disabled=0
-			and (end_of_life is null or end_of_life='0000-00-00' or end_of_life > %(today)s)
-			and (variant_of is null or variant_of = '')"""
-
-	# order by
-	query += """ order by weightage desc, idx desc, modified desc limit %s, %s""" % (start, limit)
-
-	data = frappe.db.sql(query, {
-		"today": nowdate()
-	}, as_dict=1)
-
-	for d in data:
-		d.route = ((d.parent_website_route + "/") if d.parent_website_route else "") \
-			+ (d.page_name or "")
-
-	return [get_item_for_list_in_html(r) for r in data]
-
+	}
\ No newline at end of file
diff --git a/erpnext/templates/pages/order.html b/erpnext/templates/pages/order.html
index 191b078..98f7431 100644
--- a/erpnext/templates/pages/order.html
+++ b/erpnext/templates/pages/order.html
@@ -4,6 +4,9 @@
 {% block breadcrumbs %}
 	{% include "templates/includes/breadcrumbs.html" %}
 {% endblock %}
+{% block title %}
+{{ doc.name }}
+{% endblock %}
 
 {% block header %}
 <h1>{{ doc.name }}</h1>
diff --git a/erpnext/templates/pages/projects.html b/erpnext/templates/pages/projects.html
index 1cac25e..f50d455 100644
--- a/erpnext/templates/pages/projects.html
+++ b/erpnext/templates/pages/projects.html
@@ -3,27 +3,10 @@
 {% block title %}{{ doc.project_name }}{% endblock %}
 
 {%- from "templates/includes/projects/macros.html" import back_link -%}
-{% block header %}<h1>{{ doc.project_name }}</h1>{% endblock %}
-{% block header_actions %}{% if doc.percent_complete %}
-		<div class="progress progress-hg">
-		  <div class="progress-bar progress-bar-{{ "warning" if doc.percent_complete|round < 100 else "success" }} active" role="progressbar"
-		  	aria-valuenow="{{ doc.percent_complete|round|int }}"
-		  	aria-valuemin="0" aria-valuemax="100" style="width:{{ doc.percent_complete|round|int }}%;">
-		  </div>
-		</div>
-	{% endif %}{% endblock %}
-{% block breadcrumbs %}
-   <div class="page-breadcrumbs" data-html-block="breadcrumbs">
-   	<ul class="breadcrumb">
-   		<li>
-   			<span class="icon icon-angle-left"></span>
-   			<a href="/project">Projects</a>
-   		</li>
-   	</ul>
-   </div>
+{% block header %}
+	<h1>{{ doc.project_name }}</h1>
 {% endblock %}
 
-
 {% block style %}
 	<style>
 		{% include "templates/includes/projects.css" %}
@@ -32,7 +15,13 @@
 
 
 {% block page_content %}
-
+{% if doc.percent_complete %}
+<div class="progress progress-hg">
+	<div class="progress-bar progress-bar-{{ "warning" if doc.percent_complete|round < 100 else "success" }} active" 				role="progressbar" aria-valuenow="{{ doc.percent_complete|round|int }}"
+	aria-valuemin="0" aria-valuemax="100" style="width:{{ doc.percent_complete|round|int }}%;">
+	</div>
+</div>
+{% endif %}		
 
 <div class="clearfix">
   <h4 style="float: left;">{{ _("Tasks") }}</h4>
diff --git a/erpnext/templates/pages/projects.py b/erpnext/templates/pages/projects.py
index f10b2fb..0f021a6 100644
--- a/erpnext/templates/pages/projects.py
+++ b/erpnext/templates/pages/projects.py
@@ -18,10 +18,10 @@
 	project.has_permission('read')
 	
 	project.tasks = get_tasks(project.name, start=0, item_status='open',
-		search=frappe.form_dict.get("q"))
+		search=frappe.form_dict.get("search"))
 
 	project.timelogs = get_timelogs(project.name, start=0,
-		search=frappe.form_dict.get("q"))
+		search=frappe.form_dict.get("search"))
 
 
 	context.doc = project
diff --git a/erpnext/utilities/doctype/address/address.py b/erpnext/utilities/doctype/address/address.py
index a94bd56..f613faa 100644
--- a/erpnext/utilities/doctype/address/address.py
+++ b/erpnext/utilities/doctype/address/address.py
@@ -122,9 +122,10 @@
 def get_list_context(context=None):
 	from erpnext.shopping_cart.cart import get_address_docs
 	return {
-		"title": _("My Addresses"),
+		"title": _("Addresses"),
 		"get_list": get_address_docs,
 		"row_template": "templates/includes/address_row.html",
+		'no_breadcrumbs': True,
 	}
 
 def has_website_permission(doc, ptype, user, verbose=False):
diff --git a/setup.py b/setup.py
index 1866b87..ce447d5 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
 from setuptools import setup, find_packages
 from pip.req import parse_requirements
 
-version = "6.27.12"
+version = "6.27.16"
 requirements = parse_requirements("requirements.txt", session="")
 
 setup(