Merge pull request #5522 from cgpurbaugh/patch-2

Some minor grammatical and spelling changes
diff --git a/.travis.yml b/.travis.yml
index eac53fd..287fe2d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -25,7 +25,6 @@
   - bench use test_site
   - bench reinstall
   - bench build
-  - bench build-website
   - bench start &
   - sleep 10
   - bench --verbose run-tests --driver Firefox
diff --git a/erpnext/accounts/doctype/account/account.js b/erpnext/accounts/doctype/account/account.js
index 703397e..44c2ca4 100644
--- a/erpnext/accounts/doctype/account/account.js
+++ b/erpnext/accounts/doctype/account/account.js
@@ -1,7 +1,7 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-cur_frm.list_route = "Accounts Browser/Account";
+cur_frm.list_route = "Tree/Account";
 
 cur_frm.cscript.refresh = function(doc, cdt, cdn) {
 	if(doc.__islocal) {
@@ -48,7 +48,7 @@
 
 cur_frm.cscript.add_toolbar_buttons = function(doc) {
 	cur_frm.add_custom_button(__('Chart of Accounts'),
-		function() { frappe.set_route("Accounts Browser", "Account"); }, __("View"))
+		function() { frappe.set_route("Tree", "Account"); }, __("View"))
 
 	if (doc.is_group == 1) {
 		cur_frm.add_custom_button(__('Group to Non-Group'),
diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py
index 718ba31..918917c 100644
--- a/erpnext/accounts/doctype/account/account.py
+++ b/erpnext/accounts/doctype/account/account.py
@@ -179,9 +179,12 @@
 			self.warehouse = None
 
 	def validate_warehouse(self, warehouse):
-		if frappe.db.get_value("Stock Ledger Entry", {"warehouse": warehouse}):
+		lft, rgt = frappe.db.get_value("Warehouse", warehouse, ["lft", "rgt"])
+		
+		if frappe.db.sql_list("""select sle.name from `tabStock Ledger Entry` sle where exists (select wh.name from
+			tabWarehouse wh where lft >= %s and rgt <= %s and sle.warehouse = wh.name)""", (lft, rgt)):
 			throw(_("Stock entries exist against warehouse {0}, hence you cannot re-assign or modify Warehouse").format(warehouse))
-
+		
 	def update_nsm_model(self):
 		"""update lft, rgt indices for nested set model"""
 		import frappe
diff --git a/erpnext/accounts/doctype/account/account_tree.js b/erpnext/accounts/doctype/account/account_tree.js
new file mode 100644
index 0000000..3252788
--- /dev/null
+++ b/erpnext/accounts/doctype/account/account_tree.js
@@ -0,0 +1,52 @@
+frappe.treeview_settings["Account"] = {
+	breadcrumbs: "Accounts",
+	title: __("Chart Of Accounts"),
+	get_tree_root: false,
+	filters: [{
+		fieldname: "company",
+		fieldtype:"Select",
+		options: $.map(locals[':Company'], function(c) { return c.name; }).sort(),
+		label: __("Company"),
+		default: frappe.defaults.get_default('company') ? frappe.defaults.get_default('company'): ""
+	}],
+	root_label: "Accounts",
+	get_tree_nodes: 'erpnext.accounts.utils.get_children',
+	add_tree_node: 'erpnext.accounts.utils.add_ac',
+	menu_items:[
+		{
+			label: __('New Company'),
+			action: function() { newdoc('Company'); },
+			condition: 'frappe.boot.user.can_create.indexOf("Company") === -1'
+		}
+	],
+	fields: [
+		{fieldtype:'Data', fieldname:'account_name', label:__('New Account Name'), reqd:true,
+			description: __("Name of new Account. Note: Please don't create accounts for Customers and Suppliers")},
+		{fieldtype:'Check', fieldname:'is_group', label:__('Is Group'),
+			description: __('Further accounts can be made under Groups, but entries can be made against non-Groups')},
+		{fieldtype:'Select', fieldname:'root_type', label:__('Root Type'),
+			options: ['Asset', 'Liability', 'Equity', 'Income', 'Expense'].join('\n')},
+		{fieldtype:'Select', fieldname:'account_type', label:__('Account Type'),
+			options: ['', 'Bank', 'Cash', 'Warehouse', 'Tax', 'Chargeable'].join('\n'),
+			description: __("Optional. This setting will be used to filter in various transactions."),
+			depends_on: 'eval:doc.is_group==1'},
+		{fieldtype:'Float', fieldname:'tax_rate', label:__('Tax Rate'),
+			depends_on: 'eval:doc.is_group==1&&doc.account_type=="Tax"'},
+		{fieldtype:'Link', fieldname:'warehouse', label:__('Warehouse'), options:"Warehouse",
+			depends_on: 'eval:(doc.is_group==1&&doc.account_type=="Warehouse")'},
+		{fieldtype:'Link', fieldname:'account_currency', label:__('Currency'), options:"Currency",
+			description: __("Optional. Sets company's default currency, if not specified.")}
+	],
+	onrender: function(node) {
+		var dr_or_cr = node.data.balance < 0 ? "Cr" : "Dr";
+		if (node.data && node.data.balance!==undefined) {
+			$('<span class="balance-area pull-right text-muted small">'
+				+ (node.data.balance_in_account_currency ?
+					(format_currency(Math.abs(node.data.balance_in_account_currency),
+						node.data.account_currency) + " / ") : "")
+				+ format_currency(Math.abs(node.data.balance), node.data.company_currency)
+				+ " " + dr_or_cr
+				+ '</span>').insertBefore(node.$ul);
+		}
+	}
+}
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js b/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js
index dea3af6..6a430eb 100644
--- a/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js
+++ b/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.js
@@ -17,7 +17,6 @@
 			var template = '<div style="position: relative; overflow-x: scroll;">\
 				<div id="cheque_preview" style="width: {{ cheque_width }}cm; \
 					height: {{ cheque_height }}cm;\
-					background-image: url({{ scanned_cheque }});\
 					background-repeat: no-repeat;\
 					background-size: cover;">\
 					<span style="top: {{ acc_pay_dist_from_top_edge }}cm;\
@@ -50,6 +49,10 @@
 			</div>';
 			
 			$(frappe.render(template, frm.doc)).appendTo(frm.fields_dict.cheque_print_preview.wrapper)
+			
+			if (frm.doc.scanned_cheque) {
+				$(frm.fields_dict.cheque_print_preview.wrapper).find("#cheque_preview").css('background-image', 'url(' + frm.doc.scanned_cheque + ')');
+			}
 		}
 	}
 });
diff --git a/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.json b/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.json
index 9cec920..51da9c0 100644
--- a/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.json
+++ b/erpnext/accounts/doctype/cheque_print_template/cheque_print_template.json
@@ -116,6 +116,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "Regular", 
    "fieldname": "cheque_size", 
    "fieldtype": "Select", 
    "hidden": 0, 
@@ -168,6 +169,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "20.00", 
    "fieldname": "cheque_width", 
    "fieldtype": "Float", 
    "hidden": 0, 
@@ -193,6 +195,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "9.00", 
    "fieldname": "cheque_height", 
    "fieldtype": "Float", 
    "hidden": 0, 
@@ -218,6 +221,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "", 
    "fieldname": "scanned_cheque", 
    "fieldtype": "Attach", 
    "hidden": 0, 
@@ -267,6 +271,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "1", 
    "fieldname": "is_account_payable", 
    "fieldtype": "Check", 
    "hidden": 0, 
@@ -292,6 +297,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "1.00", 
    "depends_on": "eval:doc.is_account_payable", 
    "fieldname": "acc_pay_dist_from_top_edge", 
    "fieldtype": "Float", 
@@ -318,6 +324,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "9.00", 
    "depends_on": "eval:doc.is_account_payable", 
    "fieldname": "acc_pay_dist_from_left_edge", 
    "fieldtype": "Float", 
@@ -344,6 +351,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "Acc. Payee", 
    "depends_on": "eval:doc.is_account_payable", 
    "fieldname": "message_to_show", 
    "fieldtype": "Data", 
@@ -421,6 +429,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "1.00", 
    "fieldname": "date_dist_from_top_edge", 
    "fieldtype": "Float", 
    "hidden": 0, 
@@ -446,6 +455,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "15.00", 
    "depends_on": "", 
    "fieldname": "date_dist_from_left_edge", 
    "fieldtype": "Float", 
@@ -497,6 +507,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "2.00", 
    "fieldname": "payer_name_from_top_edge", 
    "fieldtype": "Float", 
    "hidden": 0, 
@@ -522,6 +533,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "3.00", 
    "fieldname": "payer_name_from_left_edge", 
    "fieldtype": "Float", 
    "hidden": 0, 
@@ -597,6 +609,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "3.00", 
    "fieldname": "amt_in_words_from_top_edge", 
    "fieldtype": "Float", 
    "hidden": 0, 
@@ -622,6 +635,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "4.00", 
    "fieldname": "amt_in_words_from_left_edge", 
    "fieldtype": "Float", 
    "hidden": 0, 
@@ -647,6 +661,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "15.00", 
    "fieldname": "amt_in_word_width", 
    "fieldtype": "Float", 
    "hidden": 0, 
@@ -672,6 +687,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "0.50", 
    "fieldname": "amt_in_words_line_spacing", 
    "fieldtype": "Float", 
    "hidden": 0, 
@@ -722,6 +738,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "3.50", 
    "fieldname": "amt_in_figures_from_top_edge", 
    "fieldtype": "Float", 
    "hidden": 0, 
@@ -747,6 +764,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "16.00", 
    "fieldname": "amt_in_figures_from_left_edge", 
    "fieldtype": "Float", 
    "hidden": 0, 
@@ -822,6 +840,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "5.00", 
    "fieldname": "acc_no_dist_from_top_edge", 
    "fieldtype": "Float", 
    "hidden": 0, 
@@ -847,6 +866,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "4.00", 
    "fieldname": "acc_no_dist_from_left_edge", 
    "fieldtype": "Float", 
    "hidden": 0, 
@@ -897,6 +917,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "6.00", 
    "fieldname": "signatory_from_top_edge", 
    "fieldtype": "Float", 
    "hidden": 0, 
@@ -922,6 +943,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "default": "15.00", 
    "fieldname": "signatory_from_left_edge", 
    "fieldtype": "Float", 
    "hidden": 0, 
@@ -996,13 +1018,14 @@
  "hide_heading": 0, 
  "hide_toolbar": 0, 
  "idx": 0, 
+ "image_view": 0, 
  "in_create": 0, 
  "in_dialog": 0, 
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 1, 
- "modified": "2016-05-19 13:30:26.754096", 
+ "modified": "2016-06-23 20:19:11.694932", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Cheque Print Template", 
diff --git a/erpnext/accounts/doctype/cost_center/cost_center.js b/erpnext/accounts/doctype/cost_center/cost_center.js
index 85a6052..a541901 100644
--- a/erpnext/accounts/doctype/cost_center/cost_center.js
+++ b/erpnext/accounts/doctype/cost_center/cost_center.js
@@ -3,7 +3,7 @@
 
 frappe.provide("erpnext.accounts");
 
-cur_frm.list_route = "Accounts Browser/Cost Center";
+cur_frm.list_route = "Tree/Cost Center";
 
 
 frappe.ui.form.on('Cost Center', {
@@ -34,7 +34,7 @@
 	cur_frm.set_intro(intro_txt);
 
 	cur_frm.add_custom_button(__('Chart of Cost Centers'),
-		function() { frappe.set_route("Accounts Browser", "Cost Center"); }, __("View"))
+		function() { frappe.set_route("Tree", "Cost Center"); }, __("View"))
 }
 
 cur_frm.cscript.parent_cost_center = function(doc, cdt, cdn) {
diff --git a/erpnext/accounts/doctype/cost_center/cost_center_tree.js b/erpnext/accounts/doctype/cost_center/cost_center_tree.js
new file mode 100644
index 0000000..ac82f23
--- /dev/null
+++ b/erpnext/accounts/doctype/cost_center/cost_center_tree.js
@@ -0,0 +1,26 @@
+frappe.treeview_settings["Cost Center"] = {
+	breadcrumbs: "Accounts",
+	get_tree_root: false,
+	filters: [{
+		fieldname: "company",
+		fieldtype:"Select",
+		options: $.map(locals[':Company'], function(c) { return c.name; }).sort(),
+		label: __("Company"),
+		default: frappe.defaults.get_default('company') ? frappe.defaults.get_default('company'): ""
+	}],
+	root_label: "Cost Centers",
+	get_tree_nodes: 'erpnext.accounts.utils.get_children',
+	add_tree_node: 'erpnext.accounts.utils.add_cc',
+	menu_items:[
+		{
+			label: __('New Company'),
+			action: function() { newdoc('Company'); },
+			condition: 'frappe.boot.user.can_create.indexOf("Company") === -1'
+		}
+	],
+	fields:[
+		{fieldtype:'Data', fieldname:'cost_center_name', label:__('New Cost Center Name'), reqd:true},
+		{fieldtype:'Check', fieldname:'is_group', label:__('Is Group'),
+			description:__('Further cost centers can be made under Groups but entries can be made against non-Groups')}
+	]
+}
\ No newline at end of file
diff --git a/erpnext/accounts/page/accounts_browser/README.md b/erpnext/accounts/page/accounts_browser/README.md
deleted file mode 100644
index b879561..0000000
--- a/erpnext/accounts/page/accounts_browser/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Tree view browser for Chart of Accounts and Chart of Cost Centers
\ No newline at end of file
diff --git a/erpnext/accounts/page/accounts_browser/__init__.py b/erpnext/accounts/page/accounts_browser/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/accounts/page/accounts_browser/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.js b/erpnext/accounts/page/accounts_browser/accounts_browser.js
deleted file mode 100644
index ec906f8..0000000
--- a/erpnext/accounts/page/accounts_browser/accounts_browser.js
+++ /dev/null
@@ -1,334 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-// tree of chart of accounts / cost centers
-// multiple companies
-// add node
-// edit node
-// see ledger
-
-frappe.pages["Accounts Browser"].on_page_load  = function(wrapper){
-	frappe.ui.make_app_page({
-		parent: wrapper,
-		single_column: true
-	})
-
-	frappe.breadcrumbs.add("Accounts");
-
-	var main = wrapper.page.main,
-		chart_area = $("<div>")
-			.css({"margin-bottom": "15px", "min-height": "200px"})
-			.appendTo(main),
-		help_area = $('<hr><div style="padding: 0px 15px;">'+
-		'<h4>'+__('Quick Help')+'</h4>'+
-		'<ol>'+
-			'<li>'+__('To add child nodes, explore tree and click on the node under which you want to add more nodes.')+'</li>'+
-			'<li>'+
-			      __('Accounting Entries can be made against leaf nodes. Entries against Groups are not allowed.')+
-		    '</li>'+
-			'<li>'+__('Please do NOT create Accounts for Customers and Suppliers. They are created directly from the Customer / Supplier masters.')+'</li>'+
-			'<li>'+
-			     '<b>'+__('To create a Bank Account')+'</b>: '+
-			      __('Go to the appropriate group (usually Application of Funds > Current Assets > Bank Accounts and create a new Account (by clicking on Add Child) of type "Bank"')+
-			'</li>'+
-			'<li>'+
-			      '<b>'+__('To create a Tax Account') +'</b>: '+
-			      __('Go to the appropriate group (usually Source of Funds > Current Liabilities > Taxes and Duties and create a new Account (by clicking on Add Child) of type "Tax" and do mention the Tax rate.')+
-			'</li>'+
-		'</ol>'+
-		'<p>'+__('Please setup your chart of accounts before you start Accounting Entries')+'</p></div>').appendTo(main);
-
-	if (frappe.boot.user.can_create.indexOf("Company") !== -1) {
-		wrapper.page.add_menu_item(__('New Company'), function() { newdoc('Company'); }, true);
-	}
-
-	wrapper.page.add_menu_item(__('Refresh'), function() {
-			wrapper.$company_select.change();
-		});
-
-	wrapper.page.set_primary_action(__('New'), function() {
-		erpnext.account_chart && erpnext.account_chart.make_new();
-	}, "octicon octicon-plus");
-
-	var company_list = $.map(locals[':Company'], function(c) { return c.name; }).sort();
-
-	// company-select
-	wrapper.$company_select = wrapper.page.add_select("Company", company_list)
-		.change(function() {
-			var ctype = frappe.get_route()[1] || 'Account';
-			erpnext.account_chart = new erpnext.AccountsChart(ctype, $(this).val(),
-				chart_area.get(0), wrapper.page);
-		})
-
-	if(frappe.defaults.get_default('company')) {
-		wrapper.$company_select.val(frappe.defaults.get_default('company'));
-	}
-	wrapper.$company_select.change();
-}
-
-frappe.pages["Accounts Browser"].on_page_show = function(wrapper){
-	// set route
-	var ctype = frappe.get_route()[1] || 'Account';
-
-	if(frappe.route_options) {
-		if(frappe.route_options.company) {
-			wrapper.$company_select.val(frappe.route_options.company).change();
-		}
-		frappe.route_options = null;
-	} else if(erpnext.account_chart && erpnext.account_chart.ctype != ctype) {
-		wrapper.$company_select.change();
-	}
-
-}
-
-erpnext.AccountsChart = Class.extend({
-	init: function(ctype, company, wrapper, page) {
-		$(wrapper).empty();
-		var me = this;
-		me.ctype = ctype;
-		me.can_create = frappe.model.can_create(this.ctype);
-		me.can_delete = frappe.model.can_delete(this.ctype);
-		me.can_write = frappe.model.can_write(this.ctype);
-		me.page = page;
-		me.set_title();
-
-		// __("Accounts"), __("Cost Centers")
-
-		me.company = company;
-		this.tree = new frappe.ui.Tree({
-			parent: $(wrapper),
-			label: ctype==="Account" ? "Accounts" : "Cost Centers",
-			args: {ctype: ctype, comp: company},
-			method: 'erpnext.accounts.page.accounts_browser.accounts_browser.get_children',
-			click: function(link) {
-				// bold
-				$('.bold').removeClass('bold'); // deselect
-				$(link).parent().find('.balance-area:first').addClass('bold'); // select
-
-			},
-			toolbar: [
-				{ toggle_btn: true },
-				{
-					label: __("Open"),
-					condition: function(node) { return !node.root },
-					click: function(node, btn) {
-						 frappe.set_route("Form", me.ctype, node.label);
-					}
-				},
-				{
-					condition: function(node) { return node.expandable; },
-					label: __("Add Child"),
-					click: function() {
-						me.make_new()
-					},
-					btnClass: "hidden-xs"
-				},
-				{
-					condition: function(node) {
-						return !node.root && me.ctype === 'Account'
-							&& frappe.boot.user.can_read.indexOf("GL Entry") !== -1
-					},
-					label: __("View Ledger"),
-					click: function(node, btn) {
-						frappe.route_options = {
-							"account": node.label,
-							"from_date": sys_defaults.year_start_date,
-							"to_date": sys_defaults.year_end_date,
-							"company": me.company
-						};
-						frappe.set_route("query-report", "General Ledger");
-					},
-					btnClass: "hidden-xs"
-				},
-				{
-					condition: function(node) { return !node.root && me.can_write },
-					label: __("Rename"),
-					click: function(node) {
-						frappe.model.rename_doc(me.ctype, node.label, function(new_name) {
-							node.reload_parent();
-						});
-					},
-					btnClass: "hidden-xs"
-				},
-				{
-					condition: function(node) { return !node.root && me.can_delete },
-					label: __("Delete"),
-					click: function(node) {
-						frappe.model.delete_doc(me.ctype, node.label, function() {
-							node.parent.remove();
-						});
-					},
-					btnClass: "hidden-xs"
-				}
-			],
-			onrender: function(node) {
-				var dr_or_cr = node.data.balance < 0 ? "Cr" : "Dr";
-				if (me.ctype == 'Account' && node.data && node.data.balance!==undefined) {
-					$('<span class="balance-area pull-right text-muted small">'
-						+ (node.data.balance_in_account_currency ?
-							(format_currency(Math.abs(node.data.balance_in_account_currency),
-								node.data.account_currency) + " / ") : "")
-						+ format_currency(Math.abs(node.data.balance), node.data.company_currency)
-						+ " " + dr_or_cr
-						+ '</span>').insertBefore(node.$ul);
-				}
-			}
-		});
-	},
-	set_title: function(val) {
-		var chart_str = this.ctype=="Account" ? __("Chart of Accounts") : __("Chart of Cost Centers");
-		if(val) {
-			this.page.set_title(chart_str + " - " + cstr(val));
-		} else {
-			this.page.set_title(chart_str);
-		}
-	},
-
-	make_new: function() {
-		if(this.ctype=='Account') {
-			this.new_account();
-		} else {
-			this.new_cost_center();
-		}
-	},
-
-	new_account: function() {
-		var me = this;
-
-		var node = me.tree.get_selected_node();
-
-		if(!(node && node.expandable)) {
-			frappe.msgprint(__("Select a group node first."));
-			return;
-		}
-
-		// the dialog
-		var d = new frappe.ui.Dialog({
-			title:__('New Account'),
-			fields: [
-				{fieldtype:'Data', fieldname:'account_name', label:__('New Account Name'), reqd:true,
-					description: __("Name of new Account. Note: Please don't create accounts for Customers and Suppliers")},
-				{fieldtype:'Check', fieldname:'is_group', label:__('Is Group'),
-					description: __('Further accounts can be made under Groups, but entries can be made against non-Groups')},
-				{fieldtype:'Select', fieldname:'root_type', label:__('Root Type'),
-					options: ['Asset', 'Liability', 'Equity', 'Income', 'Expense'].join('\n'),
-				},
-				{fieldtype:'Select', fieldname:'account_type', label:__('Account Type'),
-					options: ['', 'Bank', 'Cash', 'Warehouse', 'Tax', 'Chargeable'].join('\n'),
-					description: __("Optional. This setting will be used to filter in various transactions.") },
-				{fieldtype:'Float', fieldname:'tax_rate', label:__('Tax Rate')},
-				{fieldtype:'Link', fieldname:'warehouse', label:__('Warehouse'), options:"Warehouse"},
-				{fieldtype:'Link', fieldname:'account_currency', label:__('Currency'), options:"Currency",
-					description: __("Optional. Sets company's default currency, if not specified.")}
-			]
-		})
-
-		var fd = d.fields_dict;
-
-		// account type if ledger
-		$(fd.is_group.input).change(function() {
-			if($(this).prop("checked")) {
-				$(fd.account_type.wrapper).toggle(false);
-				$(fd.tax_rate.wrapper).toggle(false);
-				$(fd.warehouse.wrapper).toggle(false);
-			} else {
-				$(fd.account_type.wrapper).toggle(node.root ? false : true);
-				fd.account_type.$input.trigger("change");
-			}
-		});
-
-		// tax rate if tax
-		$(fd.account_type.input).change(function() {
-			$(fd.tax_rate.wrapper).toggle(fd.account_type.get_value()==='Tax');
-			$(fd.warehouse.wrapper).toggle(fd.account_type.get_value()==='Warehouse');
-		})
-
-		// create
-		d.set_primary_action(__("Create New"), function() {
-			var btn = this;
-			var v = d.get_values();
-			if(!v) return;
-
-			if(v.account_type==="Warehouse" && !v.warehouse) {
-				msgprint(__("Warehouse is required"));
-				return;
-			}
-
-			var node = me.tree.get_selected_node();
-			v.parent_account = node.label;
-			v.company = me.company;
-
-			if(node.root) {
-				v.is_root = 1;
-				v.parent_account = null;
-			} else {
-				v.is_root = 0;
-				v.root_type = null;
-			}
-
-			return frappe.call({
-				args: v,
-				method: 'erpnext.accounts.utils.add_ac',
-				callback: function(r) {
-					d.hide();
-					if(node.expanded) {
-						node.toggle_node();
-					}
-					node.load();
-				}
-			});
-		});
-
-		// show
-		d.on_page_show = function() {
-			$(fd.is_group.input).change();
-			$(fd.account_type.input).change();
-		}
-
-		$(fd.is_group.input).prop("checked", false).change();
-		
-		// In case of root, show root type and hide account_type, is_group
-		$(fd.root_type.wrapper).toggle(node.root);
-		$(fd.is_group.wrapper).toggle(!node.root);
-		
-		d.show();
-	},
-
-	new_cost_center: function(){
-		var me = this;
-		// the dialog
-		var d = new frappe.ui.Dialog({
-			title:__('New Cost Center'),
-			fields: [
-				{fieldtype:'Data', fieldname:'cost_center_name', label:__('New Cost Center Name'), reqd:true},
-				{fieldtype:'Check', fieldname:'is_group', label:__('Is Group'),
-					description:__('Further cost centers can be made under Groups but entries can be made against non-Groups')},
-				{fieldtype:'Button', fieldname:'create_new', label:__('Create New') }
-			]
-		});
-
-		// create
-		$(d.fields_dict.create_new.input).click(function() {
-			var v = d.get_values();
-			if(!v) return;
-
-			var node = me.tree.get_selected_node();
-
-			v.parent_cost_center = node.label;
-			v.company = me.company;
-
-			return frappe.call({
-				args: v,
-				method: 'erpnext.accounts.utils.add_cc',
-				callback: function(r) {
-					d.hide();
-					if(node.expanded) {
-						node.toggle_node();
-					}
-					node.load();
-				}
-			});
-		});
-		d.show();
-	}
-});
diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.json b/erpnext/accounts/page/accounts_browser/accounts_browser.json
deleted file mode 100644
index f0fe2e8..0000000
--- a/erpnext/accounts/page/accounts_browser/accounts_browser.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "creation": "2012-06-14 15:07:28.000000",
- "docstatus": 0,
- "doctype": "Page",
- "icon": "icon-sitemap",
- "idx": 1,
- "modified": "2013-07-11 14:39:42.000000",
- "modified_by": "Administrator",
- "module": "Accounts",
- "name": "accounts-browser",
- "owner": "Administrator",
- "page_name": "Accounts Browser",
- "roles": [
-  {
-   "role": "Accounts User"
-  },
-  {
-   "role": "Accounts Manager"
-  }
- ],
- "standard": "Yes"
-}
diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.py b/erpnext/accounts/page/accounts_browser/accounts_browser.py
deleted file mode 100644
index d96b213..0000000
--- a/erpnext/accounts/page/accounts_browser/accounts_browser.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-import frappe.defaults
-from frappe.utils import flt
-from erpnext.accounts.utils import get_balance_on
-from erpnext.accounts.report.financial_statements import sort_root_accounts
-
-@frappe.whitelist()
-def get_companies():
-	"""get a list of companies based on permission"""
-	return [d.name for d in frappe.get_list("Company", fields=["name"],
-		order_by="name")]
-
-@frappe.whitelist()
-def get_children():
-	args = frappe.local.form_dict
-	ctype, company = args['ctype'], args['comp']
-	fieldname = frappe.db.escape(ctype.lower().replace(' ','_'))
-	doctype = frappe.db.escape(ctype)
-
-	# root
-	if args['parent'] in ("Accounts", "Cost Centers"):
-		fields = ", root_type, report_type, account_currency" if ctype=="Account" else ""
-		acc = frappe.db.sql(""" select
-			name as value, is_group as expandable {fields}
-			from `tab{doctype}`
-			where ifnull(`parent_{fieldname}`,'') = ''
-			and `company` = %s	and docstatus<2
-			order by name""".format(fields=fields, fieldname = fieldname, doctype=doctype),
-				company, as_dict=1)
-
-		if args["parent"]=="Accounts":
-			sort_root_accounts(acc)
-	else:
-		# other
-		fields = ", account_currency" if ctype=="Account" else ""
-		acc = frappe.db.sql("""select
-			name as value, is_group as expandable, parent_{fieldname} as parent {fields}
-	 		from `tab{doctype}`
-			where ifnull(`parent_{fieldname}`,'') = %s
-			and docstatus<2
-			order by name""".format(fields=fields, fieldname=fieldname, doctype=doctype),
-				args['parent'], as_dict=1)
-
-	if ctype == 'Account':
-		company_currency = frappe.db.get_value("Company", company, "default_currency")
-		for each in acc:
-			each["company_currency"] = company_currency
-			each["balance"] = flt(get_balance_on(each.get("value"), in_account_currency=False))
-
-			if each.account_currency != company_currency:
-				each["balance_in_account_currency"] = flt(get_balance_on(each.get("value")))
-
-	return acc
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index 27f1394..fbead26 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -10,6 +10,8 @@
 
 # imported to enable erpnext.accounts.utils.get_account_currency
 from erpnext.accounts.doctype.account.account import get_account_currency
+import frappe.defaults
+from erpnext.accounts.report.financial_statements import sort_root_accounts
 
 class FiscalYearError(frappe.ValidationError): pass
 
@@ -127,7 +129,7 @@
 	if not args:
 		args = frappe.local.form_dict
 		args.pop("cmd")
-
+	
 	ac = frappe.new_doc("Account")
 
 	if args.get("ignore_permissions"):
@@ -135,6 +137,10 @@
 		args.pop("ignore_permissions")
 
 	ac.update(args)
+
+	if not ac.parent_account:
+		ac.parent_account = args.get("parent")
+	
 	ac.old_parent = ""
 	ac.freeze_account = "No"
 	if cint(ac.get("is_root")):
@@ -153,6 +159,10 @@
 
 	cc = frappe.new_doc("Cost Center")
 	cc.update(args)
+
+	if not cc.parent_cost_center:
+		cc.parent_cost_center = args.get("parent")
+
 	cc.old_parent = ""
 	cc.insert()
 	return cc.name
@@ -428,3 +438,51 @@
 		"account_currency": account_currency or frappe.defaults.get_defaults().currency,
 		"company": company or frappe.defaults.get_defaults().company
 	}, "name")
+
+@frappe.whitelist()
+def get_companies():
+	"""get a list of companies based on permission"""
+	return [d.name for d in frappe.get_list("Company", fields=["name"],
+		order_by="name")]
+
+@frappe.whitelist()
+def get_children():
+	args = frappe.local.form_dict
+	doctype, company = args['doctype'], args['company']
+	fieldname = frappe.db.escape(doctype.lower().replace(' ','_'))
+	doctype = frappe.db.escape(doctype)
+
+	# root
+	if args['parent'] in ("Accounts", "Cost Centers"):
+		fields = ", root_type, report_type, account_currency" if doctype=="Account" else ""
+		acc = frappe.db.sql(""" select
+			name as value, is_group as expandable {fields}
+			from `tab{doctype}`
+			where ifnull(`parent_{fieldname}`,'') = ''
+			and `company` = %s	and docstatus<2
+			order by name""".format(fields=fields, fieldname = fieldname, doctype=doctype),
+				company, as_dict=1)
+
+		if args["parent"]=="Accounts":
+			sort_root_accounts(acc)
+	else:
+		# other
+		fields = ", account_currency" if doctype=="Account" else ""
+		acc = frappe.db.sql("""select
+			name as value, is_group as expandable, parent_{fieldname} as parent {fields}
+			from `tab{doctype}`
+			where ifnull(`parent_{fieldname}`,'') = %s
+			and docstatus<2
+			order by name""".format(fields=fields, fieldname=fieldname, doctype=doctype),
+				args['parent'], as_dict=1)
+
+	if doctype == 'Account':
+		company_currency = frappe.db.get_value("Company", company, "default_currency")
+		for each in acc:
+			each["company_currency"] = company_currency
+			each["balance"] = flt(get_balance_on(each.get("value"), in_account_currency=False))
+
+			if each.account_currency != company_currency:
+				each["balance_in_account_currency"] = flt(get_balance_on(each.get("value")))
+
+	return acc
diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py
index e2ee374..b02c22e 100644
--- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py
+++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py
@@ -101,7 +101,7 @@
 
 		frappe.sendmail(recipients=data.email_id, sender=sender, subject=subject,
 			message=frappe.get_template(template).render(args),
-			attachments = [frappe.attach_print('Request for Quotation', self.name)],as_bulk=True)
+			attachments = [frappe.attach_print('Request for Quotation', self.name)])
 		frappe.msgprint(_("Email sent to supplier {0}").format(data.supplier))
 
 @frappe.whitelist()
diff --git a/erpnext/config/accounts.py b/erpnext/config/accounts.py
index e11544a..b6b1480 100644
--- a/erpnext/config/accounts.py
+++ b/erpnext/config/accounts.py
@@ -51,10 +51,10 @@
 				},
 				{
 					"type": "page",
-					"name": "Accounts Browser",
+					"name": "Tree",
 					"icon": "icon-sitemap",
 					"label": _("Chart of Accounts"),
-					"route": "Accounts Browser/Account",
+					"route": "Tree/Account",
 					"description": _("Tree of financial accounts."),
 					"doctype": "Account",
 				},
@@ -193,10 +193,10 @@
 			"items": [
 				{
 					"type": "page",
-					"name": "Accounts Browser",
+					"name": "Tree",
 					"icon": "icon-sitemap",
 					"label": _("Chart of Cost Centers"),
-					"route": "Accounts Browser/Cost Center",
+					"route": "Tree/Cost Center",
 					"description": _("Tree of financial Cost Centers."),
 					"doctype": "Cost Center",
 				},
diff --git a/erpnext/config/buying.py b/erpnext/config/buying.py
index 0dc51f6..b423ee9 100644
--- a/erpnext/config/buying.py
+++ b/erpnext/config/buying.py
@@ -97,10 +97,10 @@
 				},
 				{
 					"type": "page",
-					"name": "Sales Browser",
+					"name": "Tree",
 					"icon": "icon-sitemap",
 					"label": _("Item Group"),
-					"link": "Sales Browser/Item Group",
+					"link": "Tree/Item Group",
 					"description": _("Tree of Item Groups."),
 					"doctype": "Item Group",
 				},
diff --git a/erpnext/config/crm.py b/erpnext/config/crm.py
index 26e9e03..52958e3 100644
--- a/erpnext/config/crm.py
+++ b/erpnext/config/crm.py
@@ -40,6 +40,12 @@
 				},
 				{
 					"type": "report",
+					"name": "Minutes to First Response for Opportunity",
+					"doctype": "Opportunity",
+					"is_query_report": True
+				},
+				{
+					"type": "report",
 					"is_query_report": True,
 					"name": "Lead Details",
 					"doctype": "Lead"
@@ -86,27 +92,27 @@
 				{
 					"type": "page",
 					"label": _("Customer Group"),
-					"name": "Sales Browser",
+					"name": "Tree",
 					"icon": "icon-sitemap",
-					"link": "Sales Browser/Customer Group",
+					"link": "Tree/Customer Group",
 					"description": _("Manage Customer Group Tree."),
 					"doctype": "Customer Group",
 				},
 				{
 					"type": "page",
 					"label": _("Territory"),
-					"name": "Sales Browser",
+					"name": "Tree",
 					"icon": "icon-sitemap",
-					"link": "Sales Browser/Territory",
+					"link": "Tree/Territory",
 					"description": _("Manage Territory Tree."),
 					"doctype": "Territory",
 				},
 				{
 					"type": "page",
 					"label": _("Sales Person"),
-					"name": "Sales Browser",
+					"name": "Tree",
 					"icon": "icon-sitemap",
-					"link": "Sales Browser/Sales Person",
+					"link": "Tree/Sales Person",
 					"description": _("Manage Sales Person Tree."),
 					"doctype": "Sales Person",
 				},
diff --git a/erpnext/config/hr.py b/erpnext/config/hr.py
index eea65b8..110aea9 100644
--- a/erpnext/config/hr.py
+++ b/erpnext/config/hr.py
@@ -15,7 +15,7 @@
 					"type": "doctype",
 					"name": "Employee Attendance Tool",
 					"label": _("Employee Attendance Tool"),
-					"description":_("Mark Employee Attendance in Bulk"),
+					"description":_("Mark Attendance for multiple employees"),
 					"hide_count": True
 				},
 				{
diff --git a/erpnext/config/selling.py b/erpnext/config/selling.py
index 771a0d7..1a725e2 100644
--- a/erpnext/config/selling.py
+++ b/erpnext/config/selling.py
@@ -30,9 +30,9 @@
 				{
 					"type": "page",
 					"label": _("Customer Group"),
-					"name": "Sales Browser",
+					"name": "Tree",
 					"icon": "icon-sitemap",
-					"link": "Sales Browser/Customer Group",
+					"link": "Tree/Customer Group",
 					"description": _("Manage Customer Group Tree."),
 					"doctype": "Customer Group",
 				},
@@ -69,10 +69,10 @@
 				},
 				{
 					"type": "page",
-					"name": "Sales Browser",
+					"name": "Tree",
 					"icon": "icon-sitemap",
 					"label": _("Item Group"),
-					"link": "Sales Browser/Item Group",
+					"link": "Tree/Item Group",
 					"description": _("Tree of Item Groups."),
 					"doctype": "Item Group",
 				},
@@ -101,9 +101,9 @@
 				{
 					"type": "page",
 					"label": _("Territory"),
-					"name": "Sales Browser",
+					"name": "Tree",
 					"icon": "icon-sitemap",
-					"link": "Sales Browser/Territory",
+					"link": "Tree/Territory",
 					"description": _("Manage Territory Tree."),
 					"doctype": "Territory",
 				},
@@ -115,9 +115,9 @@
 				{
 					"type": "page",
 					"label": _("Sales Person"),
-					"name": "Sales Browser",
+					"name": "Tree",
 					"icon": "icon-sitemap",
-					"link": "Sales Browser/Sales Person",
+					"link": "Tree/Sales Person",
 					"description": _("Manage Sales Person Tree."),
 					"doctype": "Sales Person",
 				},
diff --git a/erpnext/config/stock.py b/erpnext/config/stock.py
index cf3a7ba..320d906 100644
--- a/erpnext/config/stock.py
+++ b/erpnext/config/stock.py
@@ -78,10 +78,10 @@
 				},
 				{
 					"type": "page",
-					"name": "Sales Browser",
+					"name": "Tree",
 					"icon": "icon-sitemap",
 					"label": _("Item Group"),
-					"link": "Sales Browser/Item Group",
+					"link": "Tree/Item Group",
 					"description": _("Tree of Item Groups."),
 					"doctype": "Item Group",
 				},
diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py
index 1976cc6..1e685e5 100644
--- a/erpnext/controllers/stock_controller.py
+++ b/erpnext/controllers/stock_controller.py
@@ -321,6 +321,7 @@
 	warehouse_account = frappe._dict()
 
 	for d in frappe.db.sql("""select warehouse, name, account_currency from tabAccount
-		where account_type = 'Warehouse' and (warehouse is not null and warehouse != '')""", as_dict=1):
+		where account_type = 'Warehouse' and (warehouse is not null and warehouse != ''
+		and is_group != 1)""", as_dict=1):
 			warehouse_account.setdefault(d.warehouse, d)
 	return warehouse_account
diff --git a/erpnext/controllers/website_list_for_contact.py b/erpnext/controllers/website_list_for_contact.py
index 6b514b2..30f9172 100644
--- a/erpnext/controllers/website_list_for_contact.py
+++ b/erpnext/controllers/website_list_for_contact.py
@@ -19,7 +19,7 @@
 	}
 
 def get_transaction_list(doctype, txt=None, filters=None, limit_start=0, limit_page_length=20):
-	from frappe.templates.pages.list import get_list
+	from frappe.www.list import get_list
 	user = frappe.session.user
 	key = None
 
diff --git a/erpnext/crm/doctype/newsletter/newsletter.py b/erpnext/crm/doctype/newsletter/newsletter.py
index be1235b..dbf7dde 100755
--- a/erpnext/crm/doctype/newsletter/newsletter.py
+++ b/erpnext/crm/doctype/newsletter/newsletter.py
@@ -7,23 +7,23 @@
 import frappe.utils
 from frappe import throw, _
 from frappe.model.document import Document
-from frappe.email.bulk import check_bulk_limit
+from frappe.email.queue import check_email_limit
 from frappe.utils.verified_command import get_signed_params, verify_request
 from frappe.utils.background_jobs import enqueue
 from frappe.utils.scheduler import log
-from frappe.email.bulk import send
+from frappe.email.queue import send
 from erpnext.crm.doctype.newsletter_list.newsletter_list import add_subscribers
 
 class Newsletter(Document):
 	def onload(self):
 		if self.email_sent:
 			self.get("__onload").status_count = dict(frappe.db.sql("""select status, count(name)
-				from `tabBulk Email` where reference_doctype=%s and reference_name=%s
+				from `tabEmail Queue` where reference_doctype=%s and reference_name=%s
 				group by status""", (self.doctype, self.name))) or None
 
 	def test_send(self, doctype="Lead"):
 		self.recipients = frappe.utils.split_emails(self.test_email_id)
-		self.send_bulk()
+		self.queue_all()
 		frappe.msgprint(_("Scheduled to send to {0}").format(self.test_email_id))
 
 	def send_emails(self):
@@ -40,13 +40,13 @@
 			enqueue(send_newsletter, queue='default', timeout=1500, event='send_newsletter', newsletter=self.name)
 
 		else:
-			self.send_bulk()
+			self.queue_all()
 
 		frappe.msgprint(_("Scheduled to send to {0} recipients").format(len(self.recipients)))
 
 		frappe.db.set(self, "email_sent", 1)
 
-	def send_bulk(self):
+	def queue_all(self):
 		if not self.get("recipients"):
 			# in case it is called via worker
 			self.recipients = self.get_recipients()
@@ -63,7 +63,7 @@
 			reference_doctype = self.doctype, reference_name = self.name,
 			unsubscribe_method = "/api/method/erpnext.crm.doctype.newsletter.newsletter.unsubscribe",
 			unsubscribe_params = {"name": self.newsletter_list},
-			bulk_priority = 0)
+			send_priority = 0)
 
 		if not frappe.flags.in_test:
 			frappe.db.auto_commit_on_many_writes = False
@@ -76,7 +76,7 @@
 	def validate_send(self):
 		if self.get("__islocal"):
 			throw(_("Please save the Newsletter before sending"))
-		check_bulk_limit(self.recipients)
+		check_email_limit(self.recipients)
 
 @frappe.whitelist()
 def get_lead_options():
@@ -144,7 +144,7 @@
 	<p><a href="{2}">{3}</a></p>
 	"""
 
-	frappe.sendmail(email, subject=_("Confirm Your Email"), content=content.format(*messages), bulk=True)
+	frappe.sendmail(email, subject=_("Confirm Your Email"), content=content.format(*messages))
 
 @frappe.whitelist(allow_guest=True)
 def confirm_subscription(email):
@@ -169,7 +169,7 @@
 def send_newsletter(newsletter):
 	try:
 		doc = frappe.get_doc("Newsletter", newsletter)
-		doc.send_bulk()
+		doc.queue_all()
 
 	except:
 		frappe.db.rollback()
diff --git a/erpnext/crm/doctype/newsletter/test_newsletter.py b/erpnext/crm/doctype/newsletter/test_newsletter.py
index 580982a..2019b65 100644
--- a/erpnext/crm/doctype/newsletter/test_newsletter.py
+++ b/erpnext/crm/doctype/newsletter/test_newsletter.py
@@ -22,7 +22,7 @@
 
 	def test_send(self):
 		self.send_newsletter()
-		self.assertEquals(len(frappe.get_all("Bulk Email")), 3)
+		self.assertEquals(len(frappe.get_all("Email Queue")), 3)
 
 	def test_unsubscribe(self):
 		# test unsubscribe
@@ -33,10 +33,10 @@
 		unsubscribe(email, "_Test Newsletter List")
 
 		self.send_newsletter()
-		self.assertEquals(len(frappe.get_all("Bulk Email")), 2)
+		self.assertEquals(len(frappe.get_all("Email Queue")), 2)
 
 	def send_newsletter(self):
-		frappe.db.sql("delete from `tabBulk Email`")
+		frappe.db.sql("delete from `tabEmail Queue`")
 		frappe.delete_doc("Newsletter", "_Test Newsletting")
 		newsletter = frappe.get_doc({
 			"doctype": "Newsletter",
diff --git a/erpnext/crm/doctype/newsletter_list/newsletter_list.py b/erpnext/crm/doctype/newsletter_list/newsletter_list.py
index c3604f8..68c445f 100644
--- a/erpnext/crm/doctype/newsletter_list/newsletter_list.py
+++ b/erpnext/crm/doctype/newsletter_list/newsletter_list.py
@@ -89,3 +89,14 @@
 	frappe.msgprint(_("{0} subscribers added").format(count))
 
 	return frappe.get_doc("Newsletter List", name).update_total_subscribers()
+
+def restrict_newsletter_list(doc, method):
+	from frappe.limits import get_limits
+
+	newsletter_list_limit = get_limits().get('newsletter_recipients')
+	if not newsletter_list_limit:
+		return
+
+	nl = frappe.get_doc("Newsletter List", doc.newsletter_list)
+	if nl.get_total_subscribers() >= newsletter_list_limit:
+		frappe.throw(_("Please Upgrade to add more than {0} subscribers").format(newsletter_list_limit))
\ No newline at end of file
diff --git a/erpnext/crm/doctype/opportunity/opportunity.py b/erpnext/crm/doctype/opportunity/opportunity.py
index b977e26..ad8eea6 100644
--- a/erpnext/crm/doctype/opportunity/opportunity.py
+++ b/erpnext/crm/doctype/opportunity/opportunity.py
@@ -48,13 +48,16 @@
 			if not lead_name:
 				sender_name = get_fullname(self.contact_email)
 				if sender_name == self.contact_email:
-					sender_name = None 
-				
-				account = ''
-				email_name = self.contact_email[0:self.contact_email.index('@')]
-				email_split = email_name.split('.')
-				for s in email_split:
-					account = account + s.capitalize() + ' '
+					sender_name = None
+
+				account = _('Unknown')
+
+				if self.contact_email.index('@'):
+					email_name = self.contact_email[0:self.contact_email.index('@')]
+
+					email_split = email_name.split('.')
+					for s in email_split:
+						account = account + s.capitalize() + ' '
 
 				lead = frappe.get_doc({
 					"doctype": "Lead",
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/crm/report/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/crm/report/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/crm/report/minutes_to_first_response_for_opportunity/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/crm/report/minutes_to_first_response_for_opportunity/__init__.py
diff --git a/erpnext/crm/report/minutes_to_first_response_for_opportunity/minutes_to_first_response_for_opportunity.js b/erpnext/crm/report/minutes_to_first_response_for_opportunity/minutes_to_first_response_for_opportunity.js
new file mode 100644
index 0000000..b1e4917
--- /dev/null
+++ b/erpnext/crm/report/minutes_to_first_response_for_opportunity/minutes_to_first_response_for_opportunity.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
+
+frappe.query_reports["Minutes to First Response for Opportunity"] = {
+    "filters": [
+        {
+            "fieldname":"from_date",
+            "label": __("From Date"),
+            "fieldtype": "Date",
+			'reqd': 1,
+            "default": frappe.datetime.add_days(frappe.datetime.nowdate(), -30)
+        },
+        {
+            "fieldname":"to_date",
+            "label": __("To Date"),
+            "fieldtype": "Date",
+			'reqd': 1,
+            "default":frappe.datetime.nowdate()
+        },
+    ],
+	get_chart_data: function(columns, result) {
+		return {
+			data: {
+				x: 'Date',
+				columns: [
+					['Date'].concat($.map(result, function(d) { return d[0]; })),
+					['Mins to first response'].concat($.map(result, function(d) { return d[1]; }))
+				]
+				// rows: [['Date', 'Mins to first response']].concat(result)
+			},
+		    axis: {
+		        x: {
+		            type: 'timeseries',
+		            tick: {
+		                format: frappe.ui.py_date_format
+		            }
+		        }
+		    },
+			chart_type: 'line',
+
+		}
+	}
+}
diff --git a/erpnext/crm/report/minutes_to_first_response_for_opportunity/minutes_to_first_response_for_opportunity.json b/erpnext/crm/report/minutes_to_first_response_for_opportunity/minutes_to_first_response_for_opportunity.json
new file mode 100644
index 0000000..a366b3e
--- /dev/null
+++ b/erpnext/crm/report/minutes_to_first_response_for_opportunity/minutes_to_first_response_for_opportunity.json
@@ -0,0 +1,18 @@
+{
+ "add_total_row": 0, 
+ "apply_user_permissions": 0, 
+ "creation": "2016-06-17 11:28:25.867258", 
+ "disabled": 0, 
+ "docstatus": 0, 
+ "doctype": "Report", 
+ "idx": 0, 
+ "is_standard": "Yes", 
+ "modified": "2016-06-17 11:28:25.867258", 
+ "modified_by": "Administrator", 
+ "module": "CRM", 
+ "name": "Minutes to First Response for Opportunity", 
+ "owner": "Administrator", 
+ "ref_doctype": "Opportunity", 
+ "report_name": "Minutes to First Response for Opportunity", 
+ "report_type": "Script Report"
+}
\ No newline at end of file
diff --git a/erpnext/crm/report/minutes_to_first_response_for_opportunity/minutes_to_first_response_for_opportunity.py b/erpnext/crm/report/minutes_to_first_response_for_opportunity/minutes_to_first_response_for_opportunity.py
new file mode 100644
index 0000000..54e3a60
--- /dev/null
+++ b/erpnext/crm/report/minutes_to_first_response_for_opportunity/minutes_to_first_response_for_opportunity.py
@@ -0,0 +1,28 @@
+# Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+
+def execute(filters=None):
+	columns = [
+		{
+			'fieldname': 'creation_date',
+			'label': 'Date',
+			'fieldtype': 'Date'
+		},
+		{
+			'fieldname': 'mins',
+			'fieldtype': 'Float',
+			'label': 'Mins to First Response'
+		},
+	]
+
+	data = frappe.db.sql('''select date(creation) as creation_date,
+		avg(mins_to_first_response) as mins
+		from tabOpportunity
+			where date(creation) between %s and %s
+			and mins_to_first_response > 0
+		group by creation_date order by creation_date desc''', (filters.from_date, filters.to_date))
+
+	return columns, data
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/accounts/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/accounts/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/accounts/multi-currency/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/accounts/multi-currency/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/articles/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/articles/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/buying/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/buying/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/crm/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/crm/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/customize/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/customize/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/human-resources/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/human-resources/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/manufacturing/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/manufacturing/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/multilingual_print_format/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/multilingual_print_format/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/pos-setting/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/pos-setting/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/price-list/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/price-list/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/project/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/project/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/selling/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/selling/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/setup-wizard/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/setup-wizard/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/setup/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/setup/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/setup/customize/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/setup/customize/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/setup/data-import/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/setup/data-import/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/setup/data/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/setup/data/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/setup/email/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/setup/email/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/setup/print/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/setup/print/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/setup/settings/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/setup/settings/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/setup/users/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/setup/users/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/stock/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/stock/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/support/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/support/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/taxes/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/taxes/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/users-and-permissions/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/users-and-permissions/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/videos/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/videos/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/img/website/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/img/website/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/old_images/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/old_images/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/assets/old_images/erpnext/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/assets/old_images/erpnext/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/__init__.py
similarity index 100%
rename from erpnext/manufacturing/page/bom_browser/__init__.py
rename to erpnext/docs/user/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/Beispiel/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/Beispiel/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/CRM/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/CRM/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/CRM/setup/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/CRM/setup/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/accounts/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/accounts/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/accounts/setup/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/accounts/setup/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/accounts/tools/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/accounts/tools/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/buying/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/buying/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/buying/setup/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/buying/setup/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/customer-portal/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/customer-portal/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/customize-erpnext/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/customize-erpnext/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/customize-erpnext/custom-scripts/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/customize-erpnext/custom-scripts/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/customize-erpnext/custom-scripts/custom-script-examples/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/customize-erpnext/custom-scripts/custom-script-examples/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/human-resources/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/human-resources/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/human-resources/setup/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/human-resources/setup/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/human-resources/tools/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/human-resources/tools/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/introduction/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/introduction/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/manufacturing/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/manufacturing/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/manufacturing/setup/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/manufacturing/setup/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/manufacturing/tools/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/manufacturing/tools/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/projects/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/projects/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/selling/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/selling/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/selling/setup/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/selling/setup/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/setting-up/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/setting-up/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/setting-up/data/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/setting-up/data/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/setting-up/email/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/setting-up/email/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/setting-up/print/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/setting-up/print/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/setting-up/settings/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/setting-up/settings/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/setting-up/setup-wizard/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/setting-up/setup-wizard/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/setting-up/users-and-permissions/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/setting-up/users-and-permissions/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/stock/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/stock/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/stock/accounting-of-inventory-stock/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/stock/accounting-of-inventory-stock/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/stock/articles/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/stock/articles/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/stock/setup/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/stock/setup/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/stock/tools/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/stock/tools/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/support/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/support/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/using-erpnext/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/using-erpnext/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/website/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/website/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/de/website/setup/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/de/website/setup/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/CRM/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/CRM/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/CRM/setup/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/CRM/setup/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/accounts/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/accounts/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/accounts/articles/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/accounts/articles/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/accounts/setup/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/accounts/setup/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/accounts/tools/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/accounts/tools/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/buying/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/buying/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/buying/articles/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/buying/articles/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/buying/setup/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/buying/setup/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/customer-portal/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/customer-portal/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/customize-erpnext/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/customize-erpnext/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/customize-erpnext/articles/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/customize-erpnext/articles/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/customize-erpnext/custom-scripts/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/customize-erpnext/custom-scripts/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/customize-erpnext/custom-scripts/custom-script-examples/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/customize-erpnext/custom-scripts/custom-script-examples/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/human-resources/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/human-resources/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/human-resources/articles/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/human-resources/articles/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/human-resources/setup/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/human-resources/setup/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/human-resources/tools/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/human-resources/tools/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/introduction/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/introduction/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/manufacturing/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/manufacturing/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/manufacturing/articles/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/manufacturing/articles/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/manufacturing/setup/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/manufacturing/setup/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/manufacturing/tools/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/manufacturing/tools/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/projects/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/projects/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/projects/articles/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/projects/articles/__init__.py
diff --git a/erpnext/docs/user/manual/en/projects/tasks.md b/erpnext/docs/user/manual/en/projects/tasks.md
index dd9d77a..ef59748 100644
--- a/erpnext/docs/user/manual/en/projects/tasks.md
+++ b/erpnext/docs/user/manual/en/projects/tasks.md
@@ -5,29 +5,29 @@
 
 ### Status of the Task
 
-A Task can have either of the following status - Open, Working, Pending Review, Closed, Cancelled.
+A Task can have one of the following statuses - Open, Working, Pending Review, Closed, or Cancelled.
 
 <img class="screenshot" alt="Task - Status" src="{{docs_base_url}}/assets/img/project/task_status.png">
 
-* By default each new Task created shall have the status set to 'Open'.
+* By default each new Task created has the status set to 'Open'.
 
-* If a Time Log is made against a task, its status shall be set to 'Working'.
+* If a Time Log is made against a task, its status will be set to 'Working'.
 
 ### Dependent Task
 
-You can specify a list of dependent task under the 'Depends On' section.
+You can specify a list of dependent tasks under the 'Depends On' section.
 
 <img class="screenshot" alt="Depends On" src="{{docs_base_url}}/assets/img/project/task_depends_on.png">
 
-* You cannot close the parent Task until all 'Dependant Task' are closed.
+* You cannot close the parent task until all dependent tasks are closed.
 
-* If the Dependent Task are delayed and overlap with the expected Start Date of the Parent task, the system will reschedule the parent task.
+* If the dependent tasks are delayed and overlap with the expected Start Date of the Parent task, the system will reschedule the parent task.
 
 ### Managing Time
 
 ERPNext uses [Time Log]({{docs_base_url}}/user/manual/en/projects/time-log.html) to track the progress of a Task.
 You can create multiple Time Logs against each task.
-The Actual Start and End Time along with the costing shall then be updated based on the Time Log.
+The Actual Start and End Time along with the costing is updated based on the Time Log.
 
 * To view Time Log made against a Task click on 'Time Logs'
 
@@ -35,7 +35,7 @@
 
 <img class="screenshot" alt="Task - Time Log List" src="{{docs_base_url}}/assets/img/project/task_time_log_list.png">
 
-* You can also create a Time Log directlly and link it to the Task.
+* You can also create a Time Log directly and link it to the Task.
 
 <img class="screenshot" alt="Task - Link Time Log" src="{{docs_base_url}}/assets/img/project/task_time_log_link.png">
 
@@ -48,7 +48,7 @@
 
 <img class="screenshot" alt="Task - View Expense Claim" src="{{docs_base_url}}/assets/img/project/task_view_expense_claim.png">
 
-* You can also create a Expense Claims directlly and link it to the Task.
+* You can also create a Expense Claims directly and link it to the Task.
 
 <img class="screenshot" alt="Task - Link Expense Claim" src="{{docs_base_url}}/assets/img/project/task_expense_claim_link.png">
 
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/selling/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/selling/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/selling/articles/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/selling/articles/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/selling/setup/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/selling/setup/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/setting-up/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/setting-up/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/setting-up/articles/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/setting-up/articles/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/setting-up/data/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/setting-up/data/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/setting-up/email/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/setting-up/email/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/setting-up/print/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/setting-up/print/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/setting-up/settings/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/setting-up/settings/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/setting-up/setup-wizard/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/setting-up/setup-wizard/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/setting-up/users-and-permissions/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/setting-up/users-and-permissions/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/stock/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/stock/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/stock/accounting-of-inventory-stock/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/stock/accounting-of-inventory-stock/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/stock/articles/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/stock/articles/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/stock/item/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/stock/item/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/stock/setup/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/stock/setup/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/stock/tools/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/stock/tools/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/support/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/support/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/using-erpnext/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/using-erpnext/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/using-erpnext/articles/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/using-erpnext/articles/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/website/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/website/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/website/articles/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/website/articles/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/en/website/setup/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/en/website/setup/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/es/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/es/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/manual/es/accounts/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/manual/es/accounts/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/videos/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/videos/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/docs/user/videos/learn/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/docs/user/videos/learn/__init__.py
diff --git a/erpnext/fixtures/web_form.json b/erpnext/fixtures/web_form.json
deleted file mode 100644
index d8b79f3..0000000
--- a/erpnext/fixtures/web_form.json
+++ /dev/null
@@ -1,535 +0,0 @@
-[
- {
-  "allow_comments": 1, 
-  "allow_delete": 1, 
-  "allow_edit": 1, 
-  "allow_multiple": 1, 
-  "breadcrumbs": "[{\"title\":\"Collaborative Project Management\", \"name\":\"projects?project=Collaborative Project Management\"}]", 
-  "doc_type": "Task", 
-  "docstatus": 0, 
-  "doctype": "Web Form", 
-  "introduction_text": null, 
-  "is_standard": 1, 
-  "login_required": 1, 
-  "modified": "2016-03-30 01:27:27.469840", 
-  "name": "tasks", 
-  "page_name": "tasks", 
-  "published": 1, 
-  "success_message": null, 
-  "success_url": "/projects?project=Collaborative Project Management", 
-  "title": "Task", 
-  "web_form_fields": [
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "project", 
-    "fieldtype": "Link", 
-    "hidden": 0, 
-    "label": "Project", 
-    "options": "Project", 
-    "read_only": 1, 
-    "reqd": 1
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "subject", 
-    "fieldtype": "Data", 
-    "hidden": 0, 
-    "label": "Subject", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 1
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "status", 
-    "fieldtype": "Select", 
-    "hidden": 0, 
-    "label": "Status", 
-    "options": "Open\nClosed\nCancelled", 
-    "read_only": 0, 
-    "reqd": 0
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "description", 
-    "fieldtype": "Text", 
-    "hidden": 0, 
-    "label": "Details", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 0
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "priority", 
-    "fieldtype": "Select", 
-    "hidden": 0, 
-    "label": "Priority", 
-    "options": "Low\nMedium\nHigh\nUrgent", 
-    "read_only": 0, 
-    "reqd": 0
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "exp_start_date", 
-    "fieldtype": "Date", 
-    "hidden": 0, 
-    "label": "Expected Start Date", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 0
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "exp_end_date", 
-    "fieldtype": "Date", 
-    "hidden": 0, 
-    "label": "Expected End Date", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 0
-   }
-  ], 
-  "web_page_link_text": null
- }, 
- {
-  "allow_comments": 0, 
-  "allow_delete": 1, 
-  "allow_edit": 0, 
-  "allow_multiple": 0, 
-  "breadcrumbs": "[{\"title\":\"Collaborative Project Management\", \"name\":\"project?project=Collaborative Project Management\"}]", 
-  "doc_type": "Time Log", 
-  "docstatus": 0, 
-  "doctype": "Web Form", 
-  "introduction_text": null, 
-  "is_standard": 0, 
-  "login_required": 1, 
-  "modified": "2016-03-30 01:28:00.061700", 
-  "name": "time-log", 
-  "page_name": "time-log", 
-  "published": 1, 
-  "success_message": null, 
-  "success_url": "/test?project=Collaborative Project Management", 
-  "title": "Time Log", 
-  "web_form_fields": [
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "project", 
-    "fieldtype": "Link", 
-    "hidden": 0, 
-    "label": "Project", 
-    "options": "Project", 
-    "read_only": 1, 
-    "reqd": 1
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "title", 
-    "fieldtype": "Data", 
-    "hidden": 0, 
-    "label": "Title", 
-    "options": null, 
-    "read_only": 1, 
-    "reqd": 0
-   }, 
-   {
-    "default": "Open", 
-    "description": null, 
-    "fieldname": "status", 
-    "fieldtype": "Select", 
-    "hidden": 0, 
-    "label": "Status", 
-    "options": "Open\nWorking\nPending Review\nClosed\nCancelled", 
-    "read_only": 1, 
-    "reqd": 1
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "employee", 
-    "fieldtype": "Link", 
-    "hidden": 0, 
-    "label": "Employee", 
-    "options": "Employee", 
-    "read_only": 1, 
-    "reqd": 0
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "from_time", 
-    "fieldtype": "Date", 
-    "hidden": 0, 
-    "label": "From Time", 
-    "options": null, 
-    "read_only": 1, 
-    "reqd": 1
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "to_time", 
-    "fieldtype": "Date", 
-    "hidden": 0, 
-    "label": "To Time", 
-    "options": null, 
-    "read_only": 1, 
-    "reqd": 1
-   }, 
-   {
-    "default": "0", 
-    "description": null, 
-    "fieldname": "hours", 
-    "fieldtype": "Data", 
-    "hidden": 0, 
-    "label": "Hours", 
-    "options": null, 
-    "read_only": 1, 
-    "reqd": 0
-   }, 
-   {
-    "default": null, 
-    "description": "Will be updated when batched.", 
-    "fieldname": "time_log_batch", 
-    "fieldtype": "Link", 
-    "hidden": 0, 
-    "label": "Time Log Batch", 
-    "options": "Time Log Batch", 
-    "read_only": 0, 
-    "reqd": 0
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "note", 
-    "fieldtype": "Text", 
-    "hidden": 0, 
-    "label": "Note", 
-    "options": null, 
-    "read_only": 1, 
-    "reqd": 0
-   }
-  ], 
-  "web_page_link_text": null
- }, 
- {
-  "allow_comments": 1, 
-  "allow_delete": 1, 
-  "allow_edit": 1, 
-  "allow_multiple": 1, 
-  "breadcrumbs": "[{\"title\":\"Issues\", \"name\":\"issues\"}]", 
-  "doc_type": "Issue", 
-  "docstatus": 0, 
-  "doctype": "Web Form", 
-  "introduction_text": null, 
-  "is_standard": 1, 
-  "login_required": 1, 
-  "modified": "2016-03-30 01:22:09.921515", 
-  "name": "issues", 
-  "page_name": "issues", 
-  "published": 1, 
-  "success_message": "", 
-  "success_url": "/issues", 
-  "title": "Issue", 
-  "web_form_fields": [
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "subject", 
-    "fieldtype": "Data", 
-    "hidden": 0, 
-    "label": "Subject", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 1
-   }, 
-   {
-    "default": "Open", 
-    "description": null, 
-    "fieldname": "status", 
-    "fieldtype": "Select", 
-    "hidden": 0, 
-    "label": "Status", 
-    "options": "Open\nReplied\nHold\nClosed", 
-    "read_only": 1, 
-    "reqd": 0
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "description", 
-    "fieldtype": "Text", 
-    "hidden": 0, 
-    "label": "Description", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 0
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "attachment", 
-    "fieldtype": "Attach", 
-    "hidden": 0, 
-    "label": "Attachment", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 0
-   }
-  ], 
-  "web_page_link_text": null
- }, 
- {
-  "allow_comments": 0, 
-  "allow_delete": 0, 
-  "allow_edit": 1, 
-  "allow_multiple": 1, 
-  "breadcrumbs": null, 
-  "doc_type": "Address", 
-  "docstatus": 0, 
-  "doctype": "Web Form", 
-  "introduction_text": null, 
-  "is_standard": 1, 
-  "login_required": 1, 
-  "modified": "2016-03-30 01:22:04.728685", 
-  "name": "addresses", 
-  "page_name": "addresses", 
-  "published": 1, 
-  "success_message": null, 
-  "success_url": "/addresses", 
-  "title": "Address", 
-  "web_form_fields": [
-   {
-    "default": null, 
-    "description": "", 
-    "fieldname": "address_title", 
-    "fieldtype": "Data", 
-    "hidden": 0, 
-    "label": "Address Title", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 0
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "address_type", 
-    "fieldtype": "Select", 
-    "hidden": 0, 
-    "label": "Address Type", 
-    "options": "Billing\nShipping\nOffice\nPersonal\nPlant\nPostal\nShop\nSubsidiary\nWarehouse\nOther", 
-    "read_only": 0, 
-    "reqd": 1
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "address_line1", 
-    "fieldtype": "Data", 
-    "hidden": 0, 
-    "label": "Address Line 1", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 1
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "address_line2", 
-    "fieldtype": "Data", 
-    "hidden": 0, 
-    "label": "Address Line 2", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 0
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "city", 
-    "fieldtype": "Data", 
-    "hidden": 0, 
-    "label": "City/Town", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 1
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "state", 
-    "fieldtype": "Data", 
-    "hidden": 0, 
-    "label": "State", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 0
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "pincode", 
-    "fieldtype": "Data", 
-    "hidden": 0, 
-    "label": "Postal Code", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 0
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "country", 
-    "fieldtype": "Link", 
-    "hidden": 0, 
-    "label": "Country", 
-    "options": "Country", 
-    "read_only": 0, 
-    "reqd": 1
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": null, 
-    "fieldtype": "Column Break", 
-    "hidden": 0, 
-    "label": null, 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 0
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "email_id", 
-    "fieldtype": "Data", 
-    "hidden": 0, 
-    "label": "Email Id", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 0
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "phone", 
-    "fieldtype": "Data", 
-    "hidden": 0, 
-    "label": "Phone", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 1
-   }, 
-   {
-    "default": "0", 
-    "description": "", 
-    "fieldname": "is_primary_address", 
-    "fieldtype": "Check", 
-    "hidden": 0, 
-    "label": "Preferred Billing Address", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 0
-   }, 
-   {
-    "default": "0", 
-    "description": "", 
-    "fieldname": "is_shipping_address", 
-    "fieldtype": "Check", 
-    "hidden": 0, 
-    "label": "Preferred Shipping Address", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 0
-   }
-  ], 
-  "web_page_link_text": null
- }, 
- {
-  "allow_comments": 0, 
-  "allow_delete": 0, 
-  "allow_edit": 0, 
-  "allow_multiple": 0, 
-  "breadcrumbs": "[{\"title\":\"Jobs\", \"name\":\"jobs\"}]", 
-  "doc_type": "Job Applicant", 
-  "docstatus": 0, 
-  "doctype": "Web Form", 
-  "introduction_text": null, 
-  "is_standard": 0, 
-  "login_required": 0, 
-  "modified": "2016-03-30 01:21:57.425828", 
-  "name": "job_application", 
-  "page_name": "job_application", 
-  "published": 1, 
-  "success_message": "Thank you for applying.", 
-  "success_url": "/jobs", 
-  "title": "Job Applicant", 
-  "web_form_fields": [
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "job_title", 
-    "fieldtype": "Data", 
-    "hidden": 0, 
-    "label": "Job Title", 
-    "options": "", 
-    "read_only": 1, 
-    "reqd": 0
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "applicant_name", 
-    "fieldtype": "Data", 
-    "hidden": 0, 
-    "label": "Applicant Name", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 1
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "email_id", 
-    "fieldtype": "Data", 
-    "hidden": 0, 
-    "label": "Email Id", 
-    "options": "Email", 
-    "read_only": 0, 
-    "reqd": 0
-   }, 
-   {
-    "default": "Cover Letter/Message", 
-    "description": null, 
-    "fieldname": "message", 
-    "fieldtype": "Text", 
-    "hidden": 0, 
-    "label": "Message", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 1
-   }, 
-   {
-    "default": null, 
-    "description": null, 
-    "fieldname": "upload_cv", 
-    "fieldtype": "Attach", 
-    "hidden": 0, 
-    "label": "Upload CV", 
-    "options": null, 
-    "read_only": 0, 
-    "reqd": 0
-   }
-  ], 
-  "web_page_link_text": null
- }
-]
\ No newline at end of file
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 2bb2ca6..0c8de2a 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -136,6 +136,10 @@
 		"validate": "erpnext.shopping_cart.cart.set_customer_in_address"
 	},
 
+	"Newsletter List Subscriber": {
+		"validate": "erpnext.crm.doctype.newsletter_list.newsletter_list.restrict_newsletter_list"
+	},
+
 	# bubble transaction notification on master
 	('Opportunity', 'Quotation', 'Sales Order', 'Delivery Note', 'Sales Invoice',
 		'Supplier Quotation', 'Purchase Order', 'Purchase Receipt',
diff --git a/erpnext/hr/doctype/employee/employee.py b/erpnext/hr/doctype/employee/employee.py
index 9e02baf..4919229 100755
--- a/erpnext/hr/doctype/employee/employee.py
+++ b/erpnext/hr/doctype/employee/employee.py
@@ -239,8 +239,7 @@
 			frappe.sendmail(recipients=filter(lambda u: u not in (e.company_email, e.personal_email, e.user_id), users),
 				subject=_("Birthday Reminder for {0}").format(e.employee_name),
 				message=_("""Today is {0}'s birthday!""").format(e.employee_name),
-				reply_to=e.company_email or e.personal_email or e.user_id,
-				bulk=True)
+				reply_to=e.company_email or e.personal_email or e.user_id)
 
 def get_employees_who_are_born_today():
 	"""Get Employee properties whose birthday is today."""
diff --git a/erpnext/hr/doctype/employee/test_employee.py b/erpnext/hr/doctype/employee/test_employee.py
index dbd510b..a2fed53 100644
--- a/erpnext/hr/doctype/employee/test_employee.py
+++ b/erpnext/hr/doctype/employee/test_employee.py
@@ -20,7 +20,7 @@
 
 		self.assertTrue(employee.name in [e.name for e in get_employees_who_are_born_today()])
 
-		frappe.db.sql("delete from `tabBulk Email`")
+		frappe.db.sql("delete from `tabEmail Queue`")
 
 		hr_settings = frappe.get_doc("HR Settings", "HR Settings")
 		hr_settings.stop_birthday_reminders = 0
@@ -28,7 +28,7 @@
 
 		send_birthday_reminders()
 
-		bulk_mails = frappe.db.sql("""select * from `tabBulk Email`""", as_dict=True)
+		email_queue = frappe.db.sql("""select * from `tabEmail Queue`""", as_dict=True)
 		self.assertTrue("Subject: Birthday Reminder for {0}".format(employee.employee_name) \
-			in bulk_mails[0].message)
+			in email_queue[0].message)
 
diff --git a/erpnext/hr/doctype/job_opening/job_opening.json b/erpnext/hr/doctype/job_opening/job_opening.json
index 3cf1431..4556ed3 100644
--- a/erpnext/hr/doctype/job_opening/job_opening.json
+++ b/erpnext/hr/doctype/job_opening/job_opening.json
@@ -3,6 +3,7 @@
  "allow_import": 0, 
  "allow_rename": 0, 
  "autoname": "field:job_title", 
+ "beta": 0, 
  "creation": "2013-01-15 16:13:36", 
  "custom": 0, 
  "description": "Description of a Job Opening", 
@@ -63,6 +64,32 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "depends_on": "publish", 
+   "fieldname": "route", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Route", 
+   "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": 1
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "status", 
    "fieldtype": "Select", 
    "hidden": 0, 
@@ -108,71 +135,20 @@
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "depends_on": "publish", 
-   "fieldname": "page_name", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Page Name", 
-   "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, 
-   "default": "jobs", 
-   "fieldname": "parent_website_route", 
-   "fieldtype": "Data", 
-   "hidden": 1, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Parent Website Route", 
-   "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
   }
  ], 
  "hide_heading": 0, 
  "hide_toolbar": 0, 
  "icon": "icon-bookmark", 
  "idx": 1, 
+ "image_view": 0, 
  "in_create": 0, 
  "in_dialog": 0, 
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2016-03-02 01:44:28.280777", 
+ "modified": "2016-06-23 14:45:46.102129", 
  "modified_by": "Administrator", 
  "module": "HR", 
  "name": "Job Opening", 
@@ -199,7 +175,9 @@
    "write": 1
   }
  ], 
+ "quick_entry": 0, 
  "read_only": 0, 
  "read_only_onload": 0, 
- "sort_order": "ASC"
+ "sort_order": "ASC", 
+ "track_seen": 0
 }
\ No newline at end of file
diff --git a/erpnext/hr/doctype/job_opening/job_opening.py b/erpnext/hr/doctype/job_opening/job_opening.py
index acc40b7..267e7a8 100644
--- a/erpnext/hr/doctype/job_opening/job_opening.py
+++ b/erpnext/hr/doctype/job_opening/job_opening.py
@@ -17,9 +17,9 @@
 		condition_field = "publish",
 		page_title_field = "job_title",
 	)
-	
-	def get_route(self):
-		return 'jobs/' + quoted(self.page_name)
+
+	def make_route(self):
+		return 'jobs/' + self.scrub(self.job_title)
 
 	def get_context(self, context):
 		context.parents = [{'name': 'jobs', 'title': _('All Jobs') }]
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py
index 0c1f8c8..d1fac25 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.py
@@ -214,7 +214,6 @@
 		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)], 
-				bulk=True, reference_doctype= self.doctype, reference_name= self.name)
+				attachments=[frappe.attach_print(self.doctype, self.name, file_name=self.name)], reference_doctype= self.doctype, reference_name= self.name)
 		else:
 			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 106b8a2..4ddaecc 100644
--- a/erpnext/hr/doctype/salary_slip/test_salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/test_salary_slip.py
@@ -96,19 +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`")
+		frappe.db.sql("delete from `tabEmail Queue`")
 
 		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)
-		
+		email_queue = frappe.db.sql("""select name from `tabEmail Queue`""")
+		self.assertTrue(email_queue)
+
 
 	def make_employee(self, user):
 		if not frappe.db.get_value("User", user):
diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js
index 6f45ff2..de8ac94 100644
--- a/erpnext/manufacturing/doctype/bom/bom.js
+++ b/erpnext/manufacturing/doctype/bom/bom.js
@@ -24,7 +24,7 @@
 				frm.events.update_cost(frm);
 			});
 			frm.add_custom_button(__("Browse BOM"), function() {
-				frappe.set_route("bom-browser", frm.doc.name);
+				frappe.set_route("Tree", "BOM");
 			});
 		}
 
diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py
index 6730141..287ee9b 100644
--- a/erpnext/manufacturing/doctype/bom/bom.py
+++ b/erpnext/manufacturing/doctype/bom/bom.py
@@ -438,3 +438,14 @@
 	if item and not (bom.item.lower() == item.lower() or \
 		bom.item.lower() == cstr(frappe.db.get_value("Item", item, "variant_of")).lower()):
 		frappe.throw(_("BOM {0} does not belong to Item {1}").format(bom_no, item))
+
+@frappe.whitelist()
+def get_children(parent=None):
+	if parent:
+		return frappe.db.sql("""select item_code,
+			bom_no as value, qty,
+			if(ifnull(bom_no, "")!="", 1, 0) as expandable
+			from `tabBOM Item`
+			where parent=%s
+			order by idx
+			""", parent, as_dict=True)
\ No newline at end of file
diff --git a/erpnext/manufacturing/doctype/bom/bom_tree.js b/erpnext/manufacturing/doctype/bom/bom_tree.js
new file mode 100644
index 0000000..0404360
--- /dev/null
+++ b/erpnext/manufacturing/doctype/bom/bom_tree.js
@@ -0,0 +1,35 @@
+frappe.treeview_settings["BOM"] = {
+	get_tree_nodes: 'erpnext.manufacturing.doctype.bom.bom.get_children',
+	filters: [
+		{
+			fieldname: "bom",
+			fieldtype:"Link",
+			options: "BOM",
+			label: __("BOM")
+		}
+	],
+	title: "BOM",
+	breadcrumb: "Manufacturing",
+	disable_add_node: true,
+	root_label: "bom", //fieldname from filters
+	get_label: function(node) {
+		if(node.data.qty) {
+			return node.data.qty + " x " + node.data.item_code;
+		} else {
+			return node.data.item_code || node.data.value;
+		}
+	},
+	toolbar: [
+		{toggle_btn: true},
+		{
+			label:__("Edit"),
+			condition: function(node) {
+				return node.expandable;
+			},
+			click: function(node) {
+				
+				frappe.set_route("Form", "BOM", node.data.value);
+			}
+		}
+	],
+}
\ No newline at end of file
diff --git a/erpnext/manufacturing/page/bom_browser/bom_browser.js b/erpnext/manufacturing/page/bom_browser/bom_browser.js
deleted file mode 100644
index 3c13905..0000000
--- a/erpnext/manufacturing/page/bom_browser/bom_browser.js
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.pages['bom-browser'].on_page_load = function(wrapper) {
-	var page = frappe.ui.make_app_page({
-		parent: wrapper,
-		title: 'BOM Browser',
-		single_column: true
-	});
-
-	page.main.css({
-		"min-height": "300px",
-		"padding-bottom": "25px"
-	});
-
-	page.tree_area = $('<div class="padding"><p class="text-muted">'+
-		__("Select BOM to start")
-		+'</p></div>').appendTo(page.main);
-
-	frappe.breadcrumbs.add(frappe.breadcrumbs.last_module || "Manufacturing");
-
-	var make_tree = function() {
-		erpnext.bom_tree = new erpnext.BOMTree(page.$bom_select.val(), page, page.tree_area);
-	}
-
-	page.$bom_select = wrapper.page.add_field({fieldname: "bom",
-		fieldtype:"Link", options: "BOM", label: __("BOM")}).$input
-		.change(function() {
-			make_tree();
-		});
-
-	page.set_secondary_action(__('Refresh'), function() {
-		make_tree();
-	});
-}
-
-
-frappe.pages['bom-browser'].on_page_show = function(wrapper){
-	// set from route
-	var bom = null;
-	if(frappe.get_route()[1]) {
-		var bom = frappe.get_route().splice(1).join("/");
-	}
-	if(frappe.route_options && frappe.route_options.bom) {
-		var bom = frappe.route_options.bom;
-	}
-	if(bom) {
-		wrapper.page.$bom_select.val(bom).trigger("change");
-	}
-};
-
-erpnext.BOMTree = Class.extend({
-	init: function(root, page, parent) {
-		$(parent).empty();
-		var me = this;
-		me.page = page;
-		me.bom = page.$bom_select.val();
-		me.can_read = frappe.model.can_read("BOM");
-		me.can_create = frappe.boot.user.can_create.indexOf("BOM") !== -1 ||
-					frappe.boot.user.in_create.indexOf("BOM") !== -1;
-		me.can_write = frappe.model.can_write("BOM");
-		me.can_delete = frappe.model.can_delete("BOM");
-		this.tree = new frappe.ui.Tree({
-			parent: $(parent),
-			label: me.bom,
-			args: {parent: me.bom},
-			method: 'erpnext.manufacturing.page.bom_browser.bom_browser.get_children',
-			toolbar: [
-				{toggle_btn: true},
-				{
-					label:__("Edit"),
-					condition: function(node) {
-						return node.expandable;
-					},
-					click: function(node) {
-						frappe.set_route("Form", "BOM", node.data.value);
-					}
-				}
-			],
-			get_label: function(node) {
-				if(node.data.qty) {
-					return node.data.qty + " x " + node.data.item_code;
-				} else {
-					return node.data.item_code || node.data.value;
-				}
-			}
-		});
-	}
-});
diff --git a/erpnext/manufacturing/page/bom_browser/bom_browser.json b/erpnext/manufacturing/page/bom_browser/bom_browser.json
deleted file mode 100644
index 5b75463..0000000
--- a/erpnext/manufacturing/page/bom_browser/bom_browser.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "content": null, 
- "creation": "2015-05-25 02:57:33.472044", 
- "docstatus": 0, 
- "doctype": "Page", 
- "modified": "2015-05-25 02:57:33.472044", 
- "modified_by": "Administrator", 
- "module": "Manufacturing", 
- "name": "bom-browser", 
- "owner": "Administrator", 
- "page_name": "bom-browser", 
- "roles": [
-  {
-   "role": "Manufacturing User"
-  }
- ], 
- "script": null, 
- "standard": "Yes", 
- "style": null, 
- "title": "BOM Browser"
-}
\ No newline at end of file
diff --git a/erpnext/manufacturing/page/bom_browser/bom_browser.py b/erpnext/manufacturing/page/bom_browser/bom_browser.py
deleted file mode 100644
index 8099389..0000000
--- a/erpnext/manufacturing/page/bom_browser/bom_browser.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-@frappe.whitelist()
-def get_children(parent):
-	return frappe.db.sql("""select item_code,
-		bom_no as value, qty,
-		if(ifnull(bom_no, "")!="", 1, 0) as expandable
-		from `tabBOM Item`
-		where parent=%s
-		order by idx
-		""", parent, as_dict=True)
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index e3aa04b..eda2c70 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -271,3 +271,6 @@
 execute:frappe.db.sql('update tabQuotation set status="Cancelled" where docstatus=2')
 execute:frappe.rename_doc("DocType", "Payments", "Sales Invoice Payment", force=True)
 erpnext.patches.v7_0.update_mins_to_first_response
+erpnext.patches.v6_20x.repost_valuation_rate_for_negative_inventory
+erpnext.patches.v7_0.re_route
+erpnext.patches.v7_0.create_warehouse_nestedset
diff --git a/erpnext/patches/v4_2/default_website_style.py b/erpnext/patches/v4_2/default_website_style.py
index e9f2cb9..cdf0a7a 100644
--- a/erpnext/patches/v4_2/default_website_style.py
+++ b/erpnext/patches/v4_2/default_website_style.py
@@ -1,6 +1,6 @@
 from __future__ import unicode_literals
 import frappe
-from frappe.templates.pages.style_settings import default_properties
+from frappe.www.style_settings import default_properties
 
 def execute():
 	frappe.reload_doc('website', 'doctype', 'style_settings')
diff --git a/erpnext/patches/v6_20x/repost_valuation_rate_for_negative_inventory.py b/erpnext/patches/v6_20x/repost_valuation_rate_for_negative_inventory.py
new file mode 100644
index 0000000..8369fea
--- /dev/null
+++ b/erpnext/patches/v6_20x/repost_valuation_rate_for_negative_inventory.py
@@ -0,0 +1,11 @@
+# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe.utils import cint
+from erpnext.stock.stock_balance import repost
+
+def execute():
+	if cint(frappe.db.get_value("Stock Settings", None, "allow_negative_stock")):
+		repost(only_actual=True)
\ No newline at end of file
diff --git a/erpnext/patches/v6_5/show_in_website_for_template_item.py b/erpnext/patches/v6_5/show_in_website_for_template_item.py
index 48040ee..af6e830 100644
--- a/erpnext/patches/v6_5/show_in_website_for_template_item.py
+++ b/erpnext/patches/v6_5/show_in_website_for_template_item.py
@@ -9,7 +9,7 @@
 		item = frappe.get_doc("Item", item_code)
 		item.db_set("show_in_website", 1, update_modified=False)
 
-		item.get_route()
-		item.db_set("page_name", item.page_name, update_modified=False)
+		item.make_route()
+		item.db_set("route", item.route, update_modified=False)
 
 	frappe.website.render.clear_cache()
diff --git a/erpnext/patches/v7_0/create_warehouse_nestedset.py b/erpnext/patches/v7_0/create_warehouse_nestedset.py
new file mode 100644
index 0000000..80dbf2e
--- /dev/null
+++ b/erpnext/patches/v7_0/create_warehouse_nestedset.py
@@ -0,0 +1,48 @@
+import frappe
+from frappe import _
+
+def execute():
+	frappe.reload_doc("stock", "doctype", "warehouse")
+	
+	for company in frappe.get_all("Company", fields=["name", "abbr"]):
+		if not frappe.db.get_value("Warehouse", "{0} - {1}".format(_("All Warehouses"), company.abbr)):
+			create_default_warehouse_group(company)
+		
+		for warehouse in frappe.get_all("Warehouse", filters={"company": company.name}, fields=["name", "create_account_under",
+			"parent_warehouse", "is_group"]):
+			set_parent_to_warehouses(warehouse, company)
+			set_parent_to_warehouse_acounts(warehouse, company)
+
+def set_parent_to_warehouses(warehouse, company):
+	warehouse = frappe.get_doc("Warehouse", warehouse.name)
+	warehouse.is_group = "Yes" if warehouse.is_group == "Yes" else "No"
+	
+	if not warehouse.parent_warehouse and warehouse.name != "{0} - {1}".format(_("All Warehouses"), company.abbr):
+		warehouse.parent_warehouse = "{0} - {1}".format(_("All Warehouses"), company.abbr)
+	
+	warehouse.save(ignore_permissions=True)
+
+def set_parent_to_warehouse_acounts(warehouse, company):
+	account = frappe.db.get_value("Account", {"warehouse": warehouse.name})
+	stock_group = frappe.db.get_value("Account", {"account_type": "Stock",
+		"is_group": 1, "company": company.name})
+
+	if account and account != "{0} - {1}".format(_("All Warehouses"), company.abbr):
+		account = frappe.get_doc("Account", account)
+		
+		if warehouse.create_account_under == stock_group or not warehouse.create_account_under:
+			if not warehouse.parent_warehouse:
+				account.parent_account = "{0} - {1}".format(_("All Warehouses"), company.abbr)
+			else:
+				account.parent_account = frappe.db.get_value("Account", warehouse.parent_warehouse)
+
+		account.save(ignore_permissions=True)
+
+def create_default_warehouse_group(company):
+	frappe.get_doc({
+		"doctype": "Warehouse",
+		"warehouse_name": _("All Warehouses"),
+		"is_group": "Yes",
+		"company": company.name,
+		"parent_warehouse": ""
+	}).insert(ignore_permissions=True)
\ No newline at end of file
diff --git a/erpnext/patches/v7_0/re_route.py b/erpnext/patches/v7_0/re_route.py
new file mode 100644
index 0000000..1db4920
--- /dev/null
+++ b/erpnext/patches/v7_0/re_route.py
@@ -0,0 +1,4 @@
+from frappe.patches.v7_0.re_route import update_routes
+
+def execute():
+	update_routes(['Item', 'Item Group', 'Sales Partner', 'Job Opening'])
\ No newline at end of file
diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py
index e7f5b7a..65b19b0 100644
--- a/erpnext/projects/doctype/project/project.py
+++ b/erpnext/projects/doctype/project/project.py
@@ -144,7 +144,7 @@
 
 		for user in self.users:
 			if user.welcome_email_sent==0:
-				frappe.sendmail(user.user, subject=_("Project Collaboration Invitation"), content=content.format(*messages), bulk=True)
+				frappe.sendmail(user.user, subject=_("Project Collaboration Invitation"), content=content.format(*messages))
 				user.welcome_email_sent=1
 
 
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/projects/web_form/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/projects/web_form/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/projects/web_form/tasks/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/projects/web_form/tasks/__init__.py
diff --git a/erpnext/projects/web_form/tasks/tasks.js b/erpnext/projects/web_form/tasks/tasks.js
new file mode 100644
index 0000000..699703c
--- /dev/null
+++ b/erpnext/projects/web_form/tasks/tasks.js
@@ -0,0 +1,3 @@
+frappe.ready(function() {
+	// bind events here
+})
\ No newline at end of file
diff --git a/erpnext/projects/web_form/tasks/tasks.json b/erpnext/projects/web_form/tasks/tasks.json
new file mode 100644
index 0000000..912b4c4
--- /dev/null
+++ b/erpnext/projects/web_form/tasks/tasks.json
@@ -0,0 +1,84 @@
+{
+ "allow_comments": 1, 
+ "allow_delete": 1, 
+ "allow_edit": 1, 
+ "allow_multiple": 1, 
+ "breadcrumbs": "[{\"title\":\"Tasks\", \"name\":\"tasks\"}]", 
+ "creation": "2016-06-24 15:50:33.091287", 
+ "doc_type": "Task", 
+ "docstatus": 0, 
+ "doctype": "Web Form", 
+ "idx": 0, 
+ "is_standard": 1, 
+ "login_required": 1, 
+ "modified": "2016-06-24 16:11:10.935835", 
+ "modified_by": "Administrator", 
+ "module": "Projects", 
+ "name": "tasks", 
+ "owner": "Administrator", 
+ "published": 1, 
+ "route": "tasks", 
+ "success_url": "/projects?project=Collaborative Project Management", 
+ "title": "Task", 
+ "web_form_fields": [
+  {
+   "fieldname": "project", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "label": "Project", 
+   "options": "Project", 
+   "read_only": 1, 
+   "reqd": 1
+  }, 
+  {
+   "fieldname": "subject", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "label": "Subject", 
+   "read_only": 0, 
+   "reqd": 1
+  }, 
+  {
+   "fieldname": "status", 
+   "fieldtype": "Select", 
+   "hidden": 0, 
+   "label": "Status", 
+   "options": "Open\nClosed\nCancelled", 
+   "read_only": 0, 
+   "reqd": 0
+  }, 
+  {
+   "fieldname": "description", 
+   "fieldtype": "Text", 
+   "hidden": 0, 
+   "label": "Details", 
+   "read_only": 0, 
+   "reqd": 0
+  }, 
+  {
+   "fieldname": "priority", 
+   "fieldtype": "Select", 
+   "hidden": 0, 
+   "label": "Priority", 
+   "options": "Low\nMedium\nHigh\nUrgent", 
+   "read_only": 0, 
+   "reqd": 0
+  }, 
+  {
+   "fieldname": "exp_start_date", 
+   "fieldtype": "Date", 
+   "hidden": 0, 
+   "label": "Expected Start Date", 
+   "read_only": 0, 
+   "reqd": 0
+  }, 
+  {
+   "fieldname": "exp_end_date", 
+   "fieldtype": "Date", 
+   "hidden": 0, 
+   "label": "Expected End Date", 
+   "read_only": 0, 
+   "reqd": 0
+  }
+ ]
+}
\ No newline at end of file
diff --git a/erpnext/projects/web_form/tasks/tasks.py b/erpnext/projects/web_form/tasks/tasks.py
new file mode 100644
index 0000000..2334f8b
--- /dev/null
+++ b/erpnext/projects/web_form/tasks/tasks.py
@@ -0,0 +1,7 @@
+from __future__ import unicode_literals
+
+import frappe
+
+def get_context(context):
+	# do your magic here
+	pass
diff --git a/erpnext/public/js/conf.js b/erpnext/public/js/conf.js
index d8133ce..233bd2e 100644
--- a/erpnext/public/js/conf.js
+++ b/erpnext/public/js/conf.js
@@ -20,12 +20,12 @@
 
 // doctypes created via tree
 $.extend(frappe.create_routes, {
-	"Customer Group": "Sales Browser/Customer Group",
-	"Territory": "Sales Browser/Territory",
-	"Item Group": "Sales Browser/Item Group",
-	"Sales Person": "Sales Browser/Sales Person",
-	"Account": "Accounts Browser/Account",
-	"Cost Center": "Accounts Browser/Cost Center"
+	"Customer Group": "Tree/Customer Group",
+	"Territory": "Tree/Territory",
+	"Item Group": "Tree/Item Group",
+	"Sales Person": "Tree/Sales Person",
+	"Account": "Tree/Account",
+	"Cost Center": "Tree/Cost Center"
 });
 
 // preferred modules for breadcrumbs
diff --git a/erpnext/public/js/queries.js b/erpnext/public/js/queries.js
index 12307fb..acc0409 100644
--- a/erpnext/public/js/queries.js
+++ b/erpnext/public/js/queries.js
@@ -71,7 +71,11 @@
 
 	warehouse: function(doc) {
 		return {
-			filters: [["Warehouse", "company", "in", ["", cstr(doc.company)]]]
+			filters: [
+				["Warehouse", "company", "in", ["", cstr(doc.company)]],
+				["Warehouse", "is_group", "=", "No"]
+				
+			]
 		}
 	}
 });
diff --git a/erpnext/public/js/setup_wizard.js b/erpnext/public/js/setup_wizard.js
index d3ff8eb..511925c 100644
--- a/erpnext/public/js/setup_wizard.js
+++ b/erpnext/public/js/setup_wizard.js
@@ -20,7 +20,7 @@
 					description: __('Max 5 characters'), placeholder: __('e.g. "MC"'), reqd:1},
 				{fieldname:'company_tagline', label: __('What does it do?'), fieldtype:'Data',
 					placeholder:__('e.g. "Build tools for builders"'), reqd:1},
-				{fieldname:'bank_account', label: __('Bank Account'), fieldtype:'Data',
+				{fieldname:'bank_account', label: __('Bank Name'), fieldtype:'Data',
 					placeholder: __('e.g. "XYZ National Bank"'), reqd:1 },
 				{fieldname:'domain', label: __('Domain'), fieldtype:'Select',
 					options: [
diff --git a/erpnext/selling/page/sales_browser/README.md b/erpnext/selling/page/sales_browser/README.md
deleted file mode 100644
index d6a20e1..0000000
--- a/erpnext/selling/page/sales_browser/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Tree editor for Territory, Customer Group, Item Group, Sales Partner
\ No newline at end of file
diff --git a/erpnext/selling/page/sales_browser/__init__.py b/erpnext/selling/page/sales_browser/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/selling/page/sales_browser/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/selling/page/sales_browser/sales_browser.js b/erpnext/selling/page/sales_browser/sales_browser.js
deleted file mode 100644
index a99fe72..0000000
--- a/erpnext/selling/page/sales_browser/sales_browser.js
+++ /dev/null
@@ -1,166 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.pages["Sales Browser"].on_page_load = function(wrapper){
-	var page = frappe.ui.make_app_page({
-		parent: wrapper,
-		single_column: true,
-	});
-
-	wrapper.page.add_menu_item(__('Refresh'), function() {
-			wrapper.make_tree();
-		});
-
-	wrapper.make_tree = function() {
-		var ctype = frappe.get_route()[1] || 'Territory';
-		return frappe.call({
-			method: 'erpnext.selling.page.sales_browser.sales_browser.get_children',
-			args: {ctype: ctype},
-			callback: function(r) {
-				var root = r.message[0]["value"];
-				erpnext.sales_chart = new erpnext.SalesChart(ctype, root, page,
-					page.main.css({
-						"min-height": "300px",
-						"padding-bottom": "25px"
-					}));
-			}
-		});
-	}
-
-	wrapper.make_tree();
-}
-
-frappe.pages['Sales Browser'].on_page_show = function(wrapper){
-	// set route
-	var ctype = frappe.get_route()[1] || 'Territory';
-
-	wrapper.page.set_title(__('{0} Tree',[__(ctype)]));
-
-	if(erpnext.sales_chart && erpnext.sales_chart.ctype != ctype) {
-		wrapper.make_tree();
-	}
-
-	frappe.breadcrumbs.add(frappe.breadcrumbs.last_module || "Selling");
-};
-
-erpnext.SalesChart = Class.extend({
-	init: function(ctype, root, page, parent) {
-		$(parent).empty();
-		var me = this;
-		me.ctype = ctype;
-		me.page = page;
-		me.can_read = frappe.model.can_read(this.ctype);
-		me.can_create = frappe.boot.user.can_create.indexOf(this.ctype) !== -1 ||
-					frappe.boot.user.in_create.indexOf(this.ctype) !== -1;
-		me.can_write = frappe.model.can_write(this.ctype);
-		me.can_delete = frappe.model.can_delete(this.ctype);
-
-		me.page.set_primary_action(__("New"), function() {
-			me.new_node();
-		}, "octicon octicon-plus");
-
-		this.tree = new frappe.ui.Tree({
-			parent: $(parent),
-			label: __(root),
-			args: {ctype: ctype},
-			method: 'erpnext.selling.page.sales_browser.sales_browser.get_children',
-			toolbar: [
-				{toggle_btn: true},
-				{
-					label:__("Edit"),
-					condition: function(node) {
-						return !node.root && me.can_read;
-					},
-					click: function(node) {
-						frappe.set_route("Form", me.ctype, node.label);
-					}
-				},
-				{
-					label:__("Add Child"),
-					condition: function(node) { return me.can_create && node.expandable; },
-					click: function(node) {
-						me.new_node();
-					},
-					btnClass: "hidden-xs"
-				},
-				{
-					label:__("Rename"),
-					condition: function(node) { return !node.root && me.can_write; },
-					click: function(node) {
-						frappe.model.rename_doc(me.ctype, node.label, function(new_name) {
-							node.$a.html(new_name);
-						});
-					},
-					btnClass: "hidden-xs"
-				},
-				{
-					label:__("Delete"),
-					condition: function(node) { return !node.root && me.can_delete; },
-					click: function(node) {
-						frappe.model.delete_doc(me.ctype, node.label, function() {
-							node.parent.remove();
-						});
-					},
-					btnClass: "hidden-xs"
-				}
-
-			]
-		});
-	},
-	new_node: function() {
-		var me = this;
-		var node = me.tree.get_selected_node();
-
-		if(!(node && node.expandable)) {
-			frappe.msgprint(__("Select a group node first."));
-			return;
-		}
-
-		var fields = [
-			{fieldtype:'Data', fieldname: 'name_field',
-				label:__('New {0} Name',[__(me.ctype)]), reqd:true},
-			{fieldtype:'Select', fieldname:'is_group', label:__('Group Node'), options:'No\nYes',
-				description: __("Further nodes can be only created under 'Group' type nodes")}
-		]
-
-		if(me.ctype == "Sales Person") {
-			fields.splice(-1, 0, {fieldtype:'Link', fieldname:'employee', label:__('Employee'),
-				options:'Employee', description: __("Please enter Employee Id of this sales person")});
-		}
-
-		// the dialog
-		var d = new frappe.ui.Dialog({
-			title: __('New {0}',[__(me.ctype)]),
-			fields: fields
-		})
-
-		d.set_value("is_group", "No");
-		// create
-		d.set_primary_action(__("Create New"), function() {
-			var btn = this;
-			var v = d.get_values();
-			if(!v) return;
-
-			var node = me.tree.get_selected_node();
-
-			v.parent = node.label;
-			v.ctype = me.ctype;
-
-			return frappe.call({
-				method: 'erpnext.selling.page.sales_browser.sales_browser.add_node',
-				args: v,
-				callback: function(r) {
-					if(!r.exc) {
-						d.hide();
-						if(node.expanded) {
-							node.toggle_node();
-						}
-						node.reload();
-					}
-				}
-			});
-		});
-
-		d.show();
-	},
-});
diff --git a/erpnext/selling/page/sales_browser/sales_browser.json b/erpnext/selling/page/sales_browser/sales_browser.json
deleted file mode 100644
index 54cac65..0000000
--- a/erpnext/selling/page/sales_browser/sales_browser.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "creation": "2012-06-14 15:07:26.000000",
- "docstatus": 0,
- "doctype": "Page",
- "icon": "icon-sitemap",
- "idx": 1,
- "modified": "2013-07-11 14:43:56.000000",
- "modified_by": "Administrator",
- "module": "Selling",
- "name": "sales-browser",
- "owner": "Administrator",
- "page_name": "Sales Browser",
- "roles": [
-  {
-   "role": "Sales Master Manager"
-  },
-  {
-   "role": "Material Master Manager"
-  },
-  {
-   "role": "Accounts Manager"
-  },
-  {
-   "role": "Sales Master Manager"
-  },
-  {
-   "role": "Purchase Manager"
-  },
-  {
-   "role": "Purchase Master Manager"
-  },
-  {
-   "role": "Material Manager"
-  }
- ],
- "standard": "Yes"
-}
diff --git a/erpnext/selling/page/sales_browser/sales_browser.py b/erpnext/selling/page/sales_browser/sales_browser.py
deleted file mode 100644
index 018ba3b..0000000
--- a/erpnext/selling/page/sales_browser/sales_browser.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-
-
-@frappe.whitelist()
-def get_children():
-	ctype = frappe.local.form_dict.get('ctype')
-	parent_field = 'parent_' + ctype.lower().replace(' ', '_')
-	parent = frappe.form_dict.get("parent") or ""
-
-	return frappe.db.sql("""select name as value,
-		if(is_group='Yes', 1, 0) as expandable
-		from `tab{ctype}`
-		where docstatus < 2
-		and ifnull(`{parent_field}`,'') = %s
-		order by name""".format(ctype=frappe.db.escape(ctype), parent_field=frappe.db.escape(parent_field)),
-		parent, as_dict=1)
-
-@frappe.whitelist()
-def add_node():
-	ctype = frappe.form_dict.get('ctype')
-	parent_field = 'parent_' + ctype.lower().replace(' ', '_')
-	name_field = ctype.lower().replace(' ', '_') + '_name'
-
-	doc = frappe.new_doc(ctype)
-	doc.update({
-		name_field: frappe.form_dict['name_field'],
-		parent_field: frappe.form_dict['parent'],
-		"is_group": frappe.form_dict['is_group']
-	})
-	if ctype == "Sales Person":
-		doc.employee = frappe.form_dict.get('employee')
-
-	doc.save()
diff --git a/erpnext/setup/doctype/company/company.js b/erpnext/setup/doctype/company/company.js
index dfa6c0a..2a18286 100644
--- a/erpnext/setup/doctype/company/company.js
+++ b/erpnext/setup/doctype/company/company.js
@@ -18,11 +18,11 @@
 				!frm.doc.__onload.transactions_exist));
 
 			frm.add_custom_button(__('Cost Centers'), function() {
-				frappe.set_route('Accounts Browser', 'Cost Center', {'company': frm.doc.name})
+				frappe.set_route('Tree', 'Cost Center', {'company': frm.doc.name})
 			})
 
 			frm.add_custom_button(__('Chart of Accounts'), function() {
-				frappe.set_route('Accounts Browser', 'Account', {'company': frm.doc.name})
+				frappe.set_route('Tree', 'Account', {'company': frm.doc.name})
 			})
 		}
 
diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py
index 7da7c25..7d88297 100644
--- a/erpnext/setup/doctype/company/company.py
+++ b/erpnext/setup/doctype/company/company.py
@@ -87,15 +87,23 @@
 				.format(self.country.lower()))(self)
 
 	def create_default_warehouses(self):
-		for whname in (_("Stores"), _("Work In Progress"), _("Finished Goods")):
-			if not frappe.db.exists("Warehouse", whname + " - " + self.abbr):
+		for wh_detail in [
+			{"warehouse_name": _("All Warehouses"), "is_group": "Yes"},
+			{"warehouse_name": _("Stores"), "is_group": "No"},
+			{"warehouse_name": _("Work In Progress"), "is_group": "No"},
+			{"warehouse_name": _("Finished Goods"), "is_group": "No"}]:
+			
+			if not frappe.db.exists("Warehouse", "{0} - {1}".format(wh_detail["warehouse_name"], self.abbr)):
 				stock_group = frappe.db.get_value("Account", {"account_type": "Stock",
 					"is_group": 1, "company": self.name})
 				if stock_group:
 					warehouse = frappe.get_doc({
 						"doctype":"Warehouse",
-						"warehouse_name": whname,
+						"warehouse_name": wh_detail["warehouse_name"],
+						"is_group": wh_detail["is_group"],
 						"company": self.name,
+						"parent_warehouse": "{0} - {1}".format(_("All Warehouses"), self.abbr) \
+							if wh_detail["is_group"] == "No" else "",
 						"create_account_under": stock_group
 					})
 					warehouse.flags.ignore_permissions = True
diff --git a/erpnext/setup/doctype/customer_group/customer_group.js b/erpnext/setup/doctype/customer_group/customer_group.js
index 7a5d2fa..3dc5c6c 100644
--- a/erpnext/setup/doctype/customer_group/customer_group.js
+++ b/erpnext/setup/doctype/customer_group/customer_group.js
@@ -1,7 +1,7 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-cur_frm.list_route = "Sales Browser/Customer Group";
+cur_frm.list_route = "Tree/Customer Group";
 
 cur_frm.cscript.refresh = function(doc, cdt, cdn) {
 	cur_frm.cscript.set_root_readonly(doc);
diff --git a/erpnext/setup/doctype/email_digest/email_digest.py b/erpnext/setup/doctype/email_digest/email_digest.py
index 2053fc0..4f70cd8 100644
--- a/erpnext/setup/doctype/email_digest/email_digest.py
+++ b/erpnext/setup/doctype/email_digest/email_digest.py
@@ -60,7 +60,6 @@
 						recipients=user_id,
 						subject="{frequency} Digest".format(frequency=self.frequency),
 						message=msg_for_this_receipient,
-						bulk=True,
 						reference_doctype = self.doctype,
 						reference_name = self.name,
 						unsubscribe_message = _("Unsubscribe from this Email Digest"))
diff --git a/erpnext/setup/doctype/item_group/item_group.js b/erpnext/setup/doctype/item_group/item_group.js
index d440c26..d6adebc 100644
--- a/erpnext/setup/doctype/item_group/item_group.js
+++ b/erpnext/setup/doctype/item_group/item_group.js
@@ -3,7 +3,7 @@
 
 frappe.ui.form.on("Item Group", {
 	onload: function(frm) {
-		frm.list_route = "Sales Browser/Item Group";
+		frm.list_route = "Tree/Item Group";
 
 		//get query select item group
 		frm.fields_dict['parent_item_group'].get_query = function(doc,cdt,cdn) {
@@ -19,7 +19,7 @@
 	refresh: function(frm) {
 		frm.trigger("set_root_readonly");
 		frm.add_custom_button(__("Item Group Tree"), function() {
-			frappe.set_route("Sales Browser", "Item Group");
+			frappe.set_route("Tree", "Item Group");
 		}, "icon-sitemap");
 	},
 
diff --git a/erpnext/setup/doctype/item_group/item_group.json b/erpnext/setup/doctype/item_group/item_group.json
index e5ccc2d..37d8c81 100644
--- a/erpnext/setup/doctype/item_group/item_group.json
+++ b/erpnext/setup/doctype/item_group/item_group.json
@@ -3,6 +3,7 @@
  "allow_import": 1, 
  "allow_rename": 1, 
  "autoname": "field:item_group_name", 
+ "beta": 0, 
  "creation": "2013-03-28 10:35:29", 
  "custom": 0, 
  "description": "Item Classification", 
@@ -268,17 +269,18 @@
    "bold": 0, 
    "collapsible": 0, 
    "depends_on": "show_in_website", 
-   "fieldname": "page_name", 
+   "fieldname": "route", 
    "fieldtype": "Data", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
-   "label": "Page Name", 
+   "label": "Route", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
+   "precision": "", 
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
@@ -286,33 +288,7 @@
    "reqd": 0, 
    "search_index": 0, 
    "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "depends_on": "show_in_website", 
-   "fieldname": "parent_website_route", 
-   "fieldtype": "Read Only", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Parent Website Route", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "", 
-   "permlevel": 0, 
-   "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
+   "unique": 1
   }, 
   {
    "allow_on_submit": 0, 
@@ -478,13 +454,14 @@
  "hide_toolbar": 0, 
  "icon": "icon-sitemap", 
  "idx": 1, 
+ "image_view": 0, 
  "in_create": 1, 
  "in_dialog": 0, 
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 3, 
- "modified": "2016-03-28 08:38:30.868523", 
+ "modified": "2016-06-23 14:44:46.228923", 
  "modified_by": "Administrator", 
  "module": "Setup", 
  "name": "Item Group", 
@@ -611,6 +588,7 @@
    "write": 0
   }
  ], 
+ "quick_entry": 0, 
  "read_only": 0, 
  "read_only_onload": 0, 
  "search_fields": "parent_item_group", 
diff --git a/erpnext/setup/doctype/item_group/item_group.py b/erpnext/setup/doctype/item_group/item_group.py
index dc30de1..3feff6b 100644
--- a/erpnext/setup/doctype/item_group/item_group.py
+++ b/erpnext/setup/doctype/item_group/item_group.py
@@ -16,13 +16,16 @@
 	website = frappe._dict(
 		condition_field = "show_in_website",
 		template = "templates/generators/item_group.html",
-		parent_website_route_field = "parent_item_group",
 		no_cache = 1
 	)
 
 	def autoname(self):
 		self.name = self.item_group_name
 
+	def validate(self):
+		super(ItemGroup, self).validate()
+		self.make_route()
+
 	def on_update(self):
 		NestedSet.on_update(self)
 		WebsiteGenerator.on_update(self)
@@ -30,6 +33,17 @@
 		self.validate_name_with_item()
 		self.validate_one_root()
 
+	def make_route(self):
+		'''Make website route'''
+		if not self.route:
+			self.route = ''
+			if self.parent_item_group:
+				self.route = frappe.get_doc('Item Group', self.parent_item_group).route + '/'
+
+			self.route += self.scrub(self.item_group_name)
+			
+			return self.route
+
 	def after_rename(self, olddn, newdn, merge=False):
 		NestedSet.after_rename(self, olddn, newdn, merge)
 		WebsiteGenerator.after_rename(self, olddn, newdn, merge)
@@ -38,16 +52,6 @@
 		NestedSet.on_trash(self)
 		WebsiteGenerator.on_trash(self)
 
-	def set_parent_website_route(self):
-		"""Overwrite `parent_website_route` from `WebsiteGenerator`.
-			Only set `parent_website_route` if parent is visble.
-
-			e.g. If `show_in_website` is set for Products then url should be `/products`"""
-		if self.parent_item_group and frappe.db.get_value("Item Group", self.parent_item_group, "show_in_website"):
-			WebsiteGenerator.set_parent_website_route(self)
-		else:
-			self.parent_website_route = ""
-
 	def validate_name_with_item(self):
 		if frappe.db.exists("Item", self.name):
 			frappe.throw(frappe._("An item exists with same name ({0}), please change the item group name or rename the item").format(self.name))
@@ -74,9 +78,8 @@
 	child_groups = ", ".join(['"' + i[0] + '"' for i in get_child_groups(product_group)])
 
 	# base query
-	query = """select name, item_name, item_code, page_name, image, website_image, thumbnail, item_group,
-			description, web_long_description as website_description,
-			concat(parent_website_route, "/", page_name) as route
+	query = """select name, item_name, item_code, route, image, website_image, thumbnail, item_group,
+			description, web_long_description as website_description
 		from `tabItem`
 		where show_in_website = 1
 			and disabled=0
@@ -127,7 +130,7 @@
 
 def get_parent_item_groups(item_group_name):
 	item_group = frappe.get_doc("Item Group", item_group_name)
-	return frappe.db.sql("""select name, page_name from `tabItem Group`
+	return frappe.db.sql("""select name, route from `tabItem Group`
 		where lft <= %s and rgt >= %s
 		and show_in_website=1
 		order by lft asc""", (item_group.lft, item_group.rgt), as_dict=True)
@@ -138,6 +141,5 @@
 
 	for d in get_parent_item_groups(item_group):
 		d = frappe.get_doc("Item Group", d.name)
-		route = d.get_route()
-		if route:
-			clear_cache(route)
+		if d.route:
+			clear_cache(d.route)
diff --git a/erpnext/setup/doctype/sales_partner/sales_partner.json b/erpnext/setup/doctype/sales_partner/sales_partner.json
index d6a49c5..7cdb30d 100644
--- a/erpnext/setup/doctype/sales_partner/sales_partner.json
+++ b/erpnext/setup/doctype/sales_partner/sales_partner.json
@@ -1,664 +1,694 @@
 {
- "allow_copy": 0,
- "allow_import": 1,
- "allow_rename": 1,
- "autoname": "field:partner_name",
- "creation": "2013-04-12 15:34:06",
- "custom": 0,
- "description": "A third party distributor / dealer / commission agent / affiliate / reseller who sells the companies products for a commission.",
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "Setup",
+ "allow_copy": 0, 
+ "allow_import": 1, 
+ "allow_rename": 1, 
+ "autoname": "field:partner_name", 
+ "beta": 0, 
+ "creation": "2013-04-12 15:34:06", 
+ "custom": 0, 
+ "description": "A third party distributor / dealer / commission agent / affiliate / reseller who sells the companies products for a commission.", 
+ "docstatus": 0, 
+ "doctype": "DocType", 
+ "document_type": "Setup", 
  "fields": [
   {
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "fieldname": "partner_name",
-   "fieldtype": "Data",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 1,
-   "in_list_view": 0,
-   "label": "Sales Partner Name",
-   "length": 0,
-   "no_copy": 0,
-   "oldfieldname": "partner_name",
-   "oldfieldtype": "Data",
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 1,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "partner_name", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 1, 
+   "in_list_view": 0, 
+   "label": "Sales Partner Name", 
+   "length": 0, 
+   "no_copy": 0, 
+   "oldfieldname": "partner_name", 
+   "oldfieldtype": "Data", 
+   "permlevel": 0, 
+   "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": "partner_type",
-   "fieldtype": "Select",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 1,
-   "in_list_view": 1,
-   "label": "Partner Type",
-   "length": 0,
-   "no_copy": 0,
-   "oldfieldname": "partner_type",
-   "oldfieldtype": "Select",
-   "options": "\nChannel Partner\nDistributor\nDealer\nAgent\nRetailer\nImplementation Partner\nReseller",
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "partner_type", 
+   "fieldtype": "Select", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 1, 
+   "in_list_view": 1, 
+   "label": "Partner Type", 
+   "length": 0, 
+   "no_copy": 0, 
+   "oldfieldname": "partner_type", 
+   "oldfieldtype": "Select", 
+   "options": "\nChannel Partner\nDistributor\nDealer\nAgent\nRetailer\nImplementation Partner\nReseller", 
+   "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,
-   "description": "",
-   "fieldname": "territory",
-   "fieldtype": "Link",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 1,
-   "label": "Territory",
-   "length": 0,
-   "no_copy": 0,
-   "options": "Territory",
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 1,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "description": "", 
+   "fieldname": "territory", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 1, 
+   "label": "Territory", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Territory", 
+   "permlevel": 0, 
+   "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_break0",
-   "fieldtype": "Column Break",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "length": 0,
-   "no_copy": 0,
-   "oldfieldtype": "Column Break",
-   "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, 
+   "fieldname": "column_break0", 
+   "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, 
+   "oldfieldtype": "Column Break", 
+   "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, 
    "width": "50%"
-  },
+  }, 
   {
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "fieldname": "commission_rate",
-   "fieldtype": "Float",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "label": "Commission Rate",
-   "length": 0,
-   "no_copy": 0,
-   "oldfieldname": "commission_rate",
-   "oldfieldtype": "Currency",
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 1,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "commission_rate", 
+   "fieldtype": "Float", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Commission Rate", 
+   "length": 0, 
+   "no_copy": 0, 
+   "oldfieldname": "commission_rate", 
+   "oldfieldtype": "Currency", 
+   "permlevel": 0, 
+   "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": "address_contacts",
-   "fieldtype": "Section Break",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "label": "Address & Contacts",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "address_contacts", 
+   "fieldtype": "Section Break", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Address & Contacts", 
+   "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,
-   "depends_on": "eval:doc.__islocal",
-   "fieldname": "address_desc",
-   "fieldtype": "HTML",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "label": "Address Desc",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "depends_on": "eval:doc.__islocal", 
+   "fieldname": "address_desc", 
+   "fieldtype": "HTML", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Address Desc", 
+   "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,
-   "fieldname": "address_html",
-   "fieldtype": "HTML",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "label": "Address HTML",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 1,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "address_html", 
+   "fieldtype": "HTML", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Address HTML", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "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_break1",
-   "fieldtype": "Column Break",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "column_break1", 
+   "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, 
+   "search_index": 0, 
+   "set_only_once": 0, 
    "unique": 0
-  },
+  }, 
   {
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "depends_on": "eval:doc.__islocal",
-   "fieldname": "contact_desc",
-   "fieldtype": "HTML",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "label": "Contact Desc",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "depends_on": "eval:doc.__islocal", 
+   "fieldname": "contact_desc", 
+   "fieldtype": "HTML", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Contact Desc", 
+   "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,
-   "fieldname": "contact_html",
-   "fieldtype": "HTML",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "label": "Contact HTML",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 1,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "contact_html", 
+   "fieldtype": "HTML", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Contact HTML", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "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": "partner_target_details_section_break",
-   "fieldtype": "Section Break",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "label": "Sales Partner Target",
-   "length": 0,
-   "no_copy": 0,
-   "oldfieldtype": "Section Break",
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "partner_target_details_section_break", 
+   "fieldtype": "Section Break", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Sales Partner Target", 
+   "length": 0, 
+   "no_copy": 0, 
+   "oldfieldtype": "Section Break", 
+   "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,
-   "fieldname": "targets",
-   "fieldtype": "Table",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "label": "Targets",
-   "length": 0,
-   "no_copy": 0,
-   "oldfieldname": "partner_target_details",
-   "oldfieldtype": "Table",
-   "options": "Target Detail",
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "targets", 
+   "fieldtype": "Table", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Targets", 
+   "length": 0, 
+   "no_copy": 0, 
+   "oldfieldname": "partner_target_details", 
+   "oldfieldtype": "Table", 
+   "options": "Target Detail", 
+   "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,
-   "description": "Select Monthly Distribution to unevenly distribute targets across months.",
-   "fieldname": "distribution_id",
-   "fieldtype": "Link",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "label": "Target Distribution",
-   "length": 0,
-   "no_copy": 0,
-   "oldfieldname": "distribution_id",
-   "oldfieldtype": "Link",
-   "options": "Monthly Distribution",
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "description": "Select Monthly Distribution to unevenly distribute targets across months.", 
+   "fieldname": "distribution_id", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Target Distribution", 
+   "length": 0, 
+   "no_copy": 0, 
+   "oldfieldname": "distribution_id", 
+   "oldfieldtype": "Link", 
+   "options": "Monthly Distribution", 
+   "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,
-   "fieldname": "website",
-   "fieldtype": "Section Break",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "label": "Website",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "website", 
+   "fieldtype": "Section Break", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Website", 
+   "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,
-   "fieldname": "show_in_website",
-   "fieldtype": "Check",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "label": "Show In Website",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "show_in_website", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Show In Website", 
+   "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,
-   "depends_on": "eval:cint(doc.show_in_website)",
-   "fieldname": "section_break_17",
-   "fieldtype": "Section Break",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "depends_on": "show_in_website", 
+   "fieldname": "section_break_17", 
+   "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, 
+   "search_index": 0, 
+   "set_only_once": 0, 
    "unique": 0
-  },
+  }, 
   {
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "fieldname": "logo",
-   "fieldtype": "Attach",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "label": "Logo",
-   "length": 0,
-   "no_copy": 0,
-   "options": "",
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "route", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Route", 
+   "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": 1
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "column_break_20", 
+   "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, 
+   "search_index": 0, 
+   "set_only_once": 0, 
    "unique": 0
-  },
+  }, 
   {
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "fieldname": "partner_website",
-   "fieldtype": "Data",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "label": "Partner's Website",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "logo", 
+   "fieldtype": "Attach", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Logo", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "", 
+   "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,
-   "fieldname": "column_break_20",
-   "fieldtype": "Column Break",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "partner_website", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Partner website", 
+   "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,
-   "fieldname": "page_name",
-   "fieldtype": "Data",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "label": "Page Name",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 1,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "depends_on": "show_in_website", 
+   "fieldname": "section_break_22", 
+   "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, 
+   "search_index": 0, 
+   "set_only_once": 0, 
    "unique": 0
-  },
+  }, 
   {
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "depends_on": "eval:cint(doc.show_in_website)",
-   "fieldname": "section_break_22",
-   "fieldtype": "Section Break",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "introduction", 
+   "fieldtype": "Text", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Introduction", 
+   "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,
-   "fieldname": "introduction",
-   "fieldtype": "Text",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "label": "Introduction",
-   "length": 0,
-   "no_copy": 0,
-   "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,
-   "fieldname": "description",
-   "fieldtype": "Text Editor",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "label": "Description",
-   "length": 0,
-   "no_copy": 0,
-   "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,
-   "default": "partners",
-   "fieldname": "parent_website_route",
-   "fieldtype": "Read Only",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "in_filter": 0,
-   "in_list_view": 0,
-   "label": "Parent Website Route",
-   "length": 0,
-   "no_copy": 0,
-   "options": "",
-   "permlevel": 0,
-   "print_hide": 0,
-   "read_only": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "description", 
+   "fieldtype": "Text Editor", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Description", 
+   "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
   }
- ],
- "hide_heading": 0,
- "hide_toolbar": 0,
- "icon": "icon-user",
- "idx": 1,
- "in_create": 0,
- "in_dialog": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2015-11-16 06:29:57.096980",
- "modified_by": "Administrator",
- "module": "Setup",
- "name": "Sales Partner",
- "owner": "Administrator",
+ ], 
+ "hide_heading": 0, 
+ "hide_toolbar": 0, 
+ "icon": "icon-user", 
+ "idx": 1, 
+ "image_view": 0, 
+ "in_create": 0, 
+ "in_dialog": 0, 
+ "is_submittable": 0, 
+ "issingle": 0, 
+ "istable": 0, 
+ "max_attachments": 0, 
+ "modified": "2016-06-23 14:45:31.978973", 
+ "modified_by": "Administrator", 
+ "module": "Setup", 
+ "name": "Sales Partner", 
+ "owner": "Administrator", 
  "permissions": [
   {
-   "amend": 0,
-   "apply_user_permissions": 0,
-   "cancel": 0,
-   "create": 0,
-   "delete": 0,
-   "email": 1,
-   "export": 0,
-   "if_owner": 0,
-   "import": 0,
-   "permlevel": 0,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Sales Manager",
-   "set_user_permissions": 0,
-   "share": 0,
-   "submit": 0,
+   "amend": 0, 
+   "apply_user_permissions": 0, 
+   "cancel": 0, 
+   "create": 0, 
+   "delete": 0, 
+   "email": 1, 
+   "export": 0, 
+   "if_owner": 0, 
+   "import": 0, 
+   "permlevel": 0, 
+   "print": 1, 
+   "read": 1, 
+   "report": 1, 
+   "role": "Sales Manager", 
+   "set_user_permissions": 0, 
+   "share": 0, 
+   "submit": 0, 
    "write": 0
-  },
+  }, 
   {
-   "amend": 0,
-   "apply_user_permissions": 0,
-   "cancel": 0,
-   "create": 0,
-   "delete": 0,
-   "email": 1,
-   "export": 0,
-   "if_owner": 0,
-   "import": 0,
-   "permlevel": 0,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Sales User",
-   "set_user_permissions": 0,
-   "share": 0,
-   "submit": 0,
+   "amend": 0, 
+   "apply_user_permissions": 0, 
+   "cancel": 0, 
+   "create": 0, 
+   "delete": 0, 
+   "email": 1, 
+   "export": 0, 
+   "if_owner": 0, 
+   "import": 0, 
+   "permlevel": 0, 
+   "print": 1, 
+   "read": 1, 
+   "report": 1, 
+   "role": "Sales User", 
+   "set_user_permissions": 0, 
+   "share": 0, 
+   "submit": 0, 
    "write": 0
-  },
+  }, 
   {
-   "amend": 0,
-   "apply_user_permissions": 0,
-   "cancel": 0,
-   "create": 1,
-   "delete": 0,
-   "email": 1,
-   "export": 0,
-   "if_owner": 0,
-   "import": 0,
-   "permlevel": 0,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Sales Master Manager",
-   "set_user_permissions": 0,
-   "share": 1,
-   "submit": 0,
+   "amend": 0, 
+   "apply_user_permissions": 0, 
+   "cancel": 0, 
+   "create": 1, 
+   "delete": 0, 
+   "email": 1, 
+   "export": 0, 
+   "if_owner": 0, 
+   "import": 0, 
+   "permlevel": 0, 
+   "print": 1, 
+   "read": 1, 
+   "report": 1, 
+   "role": "Sales Master Manager", 
+   "set_user_permissions": 0, 
+   "share": 1, 
+   "submit": 0, 
    "write": 1
   }
- ],
- "read_only": 0,
- "read_only_onload": 0
-}
+ ], 
+ "quick_entry": 0, 
+ "read_only": 0, 
+ "read_only_onload": 0, 
+ "sort_order": "ASC", 
+ "track_seen": 0
+}
\ No newline at end of file
diff --git a/erpnext/setup/doctype/sales_partner/sales_partner.py b/erpnext/setup/doctype/sales_partner/sales_partner.py
index 0e0f4ba..5a2aa49 100644
--- a/erpnext/setup/doctype/sales_partner/sales_partner.py
+++ b/erpnext/setup/doctype/sales_partner/sales_partner.py
@@ -22,7 +22,8 @@
 		self.name = self.partner_name
 
 	def validate(self):
-		self.parent_website_route = "partners"
+		if not self.route:
+			self.route = "partners/" + self.scrub(self.partner_name)
 		super(SalesPartner, self).validate()
 		if self.partner_website and not self.partner_website.startswith("http"):
 			self.partner_website = "http://" + self.partner_website
diff --git a/erpnext/setup/doctype/sales_person/sales_person.js b/erpnext/setup/doctype/sales_person/sales_person.js
index 8bae546..1368392 100644
--- a/erpnext/setup/doctype/sales_person/sales_person.js
+++ b/erpnext/setup/doctype/sales_person/sales_person.js
@@ -1,7 +1,7 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-cur_frm.list_route = "Sales Browser/Sales Person";
+cur_frm.list_route = "Tree/Sales Person";
 
 cur_frm.cscript.refresh = function(doc, cdt, cdn) {
 	cur_frm.cscript.set_root_readonly(doc);
diff --git a/erpnext/setup/doctype/sales_person/sales_person_tree.js b/erpnext/setup/doctype/sales_person/sales_person_tree.js
new file mode 100644
index 0000000..fd2127d
--- /dev/null
+++ b/erpnext/setup/doctype/sales_person/sales_person_tree.js
@@ -0,0 +1,11 @@
+frappe.treeview_settings["Sales Person"] = {
+	fields: [
+		{fieldtype:'Data', fieldname: 'name_field',
+			label:__('New Sales Person Name'), reqd:true},
+		{fieldtype:'Link', fieldname:'employee',
+			label:__('Employee'), options:'Employee',
+			description: __("Please enter Employee Id of this sales person")},
+		{fieldtype:'Select', fieldname:'is_group', label:__('Group Node'), options:'No\nYes',
+			description: __("Further nodes can be only created under 'Group' type nodes")}
+	],
+}
\ No newline at end of file
diff --git a/erpnext/setup/doctype/territory/territory.js b/erpnext/setup/doctype/territory/territory.js
index cde04b3..bf4e29b 100644
--- a/erpnext/setup/doctype/territory/territory.js
+++ b/erpnext/setup/doctype/territory/territory.js
@@ -1,7 +1,7 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-cur_frm.list_route = "Sales Browser/Territory";
+cur_frm.list_route = "Tree/Territory";
 
 cur_frm.cscript.refresh = function(doc, cdt, cdn) {
 	cur_frm.cscript.set_root_readonly(doc);
diff --git a/erpnext/shopping_cart/cart.py b/erpnext/shopping_cart/cart.py
index daecaa6..d5cde4a 100644
--- a/erpnext/shopping_cart/cart.py
+++ b/erpnext/shopping_cart/cart.py
@@ -155,7 +155,7 @@
 def decorate_quotation_doc(doc):
 	for d in doc.get("items", []):
 		d.update(frappe.db.get_value("Item", d.item_code,
-			["thumbnail", "website_image", "description", "page_name"], as_dict=True))
+			["thumbnail", "website_image", "description", "route"], as_dict=True))
 
 	return doc
 
diff --git a/erpnext/startup/boot.py b/erpnext/startup/boot.py
index 7bdcb0a..97ef329 100644
--- a/erpnext/startup/boot.py
+++ b/erpnext/startup/boot.py
@@ -52,26 +52,26 @@
 	bootinfo.page_info.update({
 		"Chart of Accounts": {
 			"title": "Chart of Accounts",
-			"route": "Accounts Browser/Account"
+			"route": "Tree/Account"
 		},
 		"Chart of Cost Centers": {
 			"title": "Chart of Cost Centers",
-			"route": "Accounts Browser/Cost Center"
+			"route": "Tree/Cost Center"
 		},
 		"Item Group Tree": {
 			"title": "Item Group Tree",
-			"route": "Sales Browser/Item Group"
+			"route": "Tree/Item Group"
 		},
 		"Customer Group Tree": {
 			"title": "Customer Group Tree",
-			"route": "Sales Browser/Customer Group"
+			"route": "Tree/Customer Group"
 		},
 		"Territory Tree": {
 			"title": "Territory Tree",
-			"route": "Sales Browser/Territory"
+			"route": "Tree/Territory"
 		},
 		"Sales Person Tree": {
 			"title": "Sales Person Tree",
-			"route": "Sales Browser/Sales Person"
+			"route": "Tree/Sales Person"
 		}
 	})
diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py
index a1580d5..2378e3f 100644
--- a/erpnext/stock/doctype/bin/bin.py
+++ b/erpnext/stock/doctype/bin/bin.py
@@ -3,6 +3,7 @@
 
 from __future__ import unicode_literals
 import frappe
+from frappe import _
 from frappe.utils import flt, nowdate
 import frappe.defaults
 from frappe.model.document import Document
@@ -15,13 +16,19 @@
 		self.validate_mandatory()
 
 		self.projected_qty = flt(self.actual_qty) + flt(self.ordered_qty) + \
-		 	flt(self.indented_qty) + flt(self.planned_qty) - flt(self.reserved_qty)
+			flt(self.indented_qty) + flt(self.planned_qty) - flt(self.reserved_qty)
+		
+		self.block_transactions_against_group_warehouse()
 
 	def validate_mandatory(self):
 		qf = ['actual_qty', 'reserved_qty', 'ordered_qty', 'indented_qty']
 		for f in qf:
 			if (not getattr(self, f, None)) or (not self.get(f)):
 				self.set(f, 0.0)
+	
+	def block_transactions_against_group_warehouse(self):
+		from erpnext.stock.utils import is_group_warehouse
+		is_group_warehouse(self.warehouse)
 
 	def update_stock(self, args, allow_negative_stock=False, via_landed_cost_voucher=False):
 		self.update_qty(args)
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.json b/erpnext/stock/doctype/delivery_note/delivery_note.json
index fdba48b..bf2f4f3 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.json
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.json
@@ -2216,7 +2216,7 @@
    "bold": 0, 
    "collapsible": 0, 
    "fieldname": "per_billed", 
-   "fieldtype": "Currency", 
+   "fieldtype": "Percent", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
@@ -2914,4 +2914,4 @@
  "timeline_field": "customer", 
  "title_field": "title", 
  "track_seen": 0
-}
\ No newline at end of file
+}
diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js
index fe7e54e..f35fa58 100644
--- a/erpnext/stock/doctype/item/item.js
+++ b/erpnext/stock/doctype/item/item.js
@@ -160,6 +160,28 @@
 		frm.fields_dict.supplier_items.grid.get_field("supplier").get_query = function(doc, cdt, cdn) {
 			return { query: "erpnext.controllers.queries.supplier_query" }
 		}
+		
+		frm.fields_dict['default_warehouse'].get_query = function(doc) {
+			return {
+				filters: { "is_group": "No" }
+			}
+		}
+		
+		frm.fields_dict.reorder_levels.grid.get_field("warehouse_group").get_query = function(doc, cdt, cdn) {
+			return {
+				filters: { "is_group": "Yes" }
+			}
+		}
+		
+		frm.fields_dict.reorder_levels.grid.get_field("warehouse").get_query = function(doc, cdt, cdn) {
+			var d = locals[cdt][cdn];
+			return {
+				filters: {
+					"is_group": "No",
+					"parent_warehouse": d.warehouse_group
+				}
+			}
+		}
 
 	},
 
diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json
index 2d6dae2..fd7a31b 100644
--- a/erpnext/stock/doctype/item/item.json
+++ b/erpnext/stock/doctype/item/item.json
@@ -1861,18 +1861,18 @@
    "bold": 0, 
    "collapsible": 0, 
    "depends_on": "show_in_website", 
-   "description": "website page link", 
-   "fieldname": "page_name", 
+   "fieldname": "route", 
    "fieldtype": "Data", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
-   "label": "Page Name", 
+   "label": "Route", 
    "length": 0, 
-   "no_copy": 1, 
+   "no_copy": 0, 
    "permlevel": 0, 
+   "precision": "", 
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
@@ -1880,7 +1880,7 @@
    "reqd": 0, 
    "search_index": 0, 
    "set_only_once": 0, 
-   "unique": 0
+   "unique": 1
   }, 
   {
    "allow_on_submit": 0, 
@@ -2170,31 +2170,6 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "fieldname": "parent_website_route", 
-   "fieldtype": "Read Only", 
-   "hidden": 0, 
-   "ignore_user_permissions": 1, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Parent Website Route", 
-   "length": 0, 
-   "no_copy": 1, 
-   "options": "", 
-   "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, 
    "fieldname": "total_projected_qty", 
    "fieldtype": "Float", 
    "hidden": 1, 
@@ -2222,13 +2197,14 @@
  "icon": "icon-tag", 
  "idx": 2, 
  "image_field": "image", 
+ "image_view": 0, 
  "in_create": 0, 
  "in_dialog": 0, 
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 1, 
- "modified": "2016-06-02 14:48:46.128121", 
+ "modified": "2016-06-23 14:44:31.115557", 
  "modified_by": "Administrator", 
  "module": "Stock", 
  "name": "Item", 
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index bd2ada9..d156739 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -22,7 +22,6 @@
 		page_title_field = "item_name",
 		condition_field = "show_in_website",
 		template = "templates/generators/item.html",
-		parent_website_route_field = "item_group",
 		no_cache = 1
 	)
 
@@ -133,6 +132,14 @@
 
 			stock_entry.add_comment("Comment", _("Opening Stock"))
 
+	def make_route(self):
+		if not self.route:
+			return frappe.db.get_value('Item Group', self.item_group, 'route') + '/' + self.scrub(self.item_name)
+
+	def get_parents(self, context):
+		item_group, route = frappe.db.get_value('Item Group', self.item_group, ['name', 'route'])
+		context.parents = [{'name': route, 'label': item_group}]
+
 	def validate_website_image(self):
 		"""Validate if the website image is a public file"""
 		auto_set_website_image = False
@@ -218,7 +225,7 @@
 		if self.variant_of:
 			# redirect to template page!
 			template_item = frappe.get_doc("Item", self.variant_of)
-			frappe.flags.redirect_location = template_item.get_route() + "?variant=" + urllib.quote(self.name)
+			frappe.flags.redirect_location = template_item.route + "?variant=" + urllib.quote(self.name)
 			raise frappe.Redirect
 
 		context.parent_groups = get_parent_item_groups(self.item_group) + \
@@ -506,9 +513,9 @@
 
 	def after_rename(self, old_name, new_name, merge):
 		super(Item, self).after_rename(old_name, new_name, merge)
-		if self.page_name:
+		if self.route:
 			invalidate_cache_for_item(self)
-			clear_cache(self.page_name)
+			clear_cache(self.route)
 
 		frappe.db.set_value("Item", new_name, "item_code", new_name)
 
diff --git a/erpnext/stock/doctype/item/test_records.json b/erpnext/stock/doctype/item/test_records.json
index fcf2d0b..c05c5f3 100644
--- a/erpnext/stock/doctype/item/test_records.json
+++ b/erpnext/stock/doctype/item/test_records.json
@@ -227,6 +227,35 @@
        "warehouse_reorder_qty": 20
       }
   ]
+ },
+ {
+  "default_warehouse": "_Test Warehouse Group-C1 - _TC",
+  "description": "_Test Item 1",
+  "doctype": "Item",
+  "expense_account": "_Test Account Cost for Goods Sold - _TC",
+  "cost_center": "_Test Cost Center - _TC",
+  "has_batch_no": 0,
+  "has_serial_no": 0,
+  "income_account": "Sales - _TC",
+  "inspection_required": 0,
+  "is_stock_item": 1,
+  "is_sub_contracted_item": 0,
+  "item_code": "_Test Item Warehouse Group Wise Reorder",
+  "item_group": "_Test Item Group",
+  "item_name": "_Test Item Warehouse Group Wise Reorder",
+  "apply_warehouse_wise_reorder_level": 1,
+  "reorder_levels": [
+   {
+	"warehouse_group": "_Test Warehouse Group - _TC",
+    "material_request_type": "Purchase",
+    "warehouse": "_Test Warehouse Group-C1 - _TC",
+    "warehouse_reorder_level": 20,
+    "warehouse_reorder_qty": 20
+   }
+  ],
+  "stock_uom": "_Test UOM",
+  "show_in_website": 1,
+  "website_warehouse": "_Test Warehouse Group-C1 - _TC"
  }
 
 ]
diff --git a/erpnext/stock/doctype/item_reorder/item_reorder.json b/erpnext/stock/doctype/item_reorder/item_reorder.json
index fea8bf0..27a311d 100644
--- a/erpnext/stock/doctype/item_reorder/item_reorder.json
+++ b/erpnext/stock/doctype/item_reorder/item_reorder.json
@@ -3,19 +3,48 @@
  "allow_import": 0, 
  "allow_rename": 0, 
  "autoname": "hash", 
+ "beta": 0, 
  "creation": "2013-03-07 11:42:59", 
  "custom": 0, 
  "docstatus": 0, 
  "doctype": "DocType", 
+ "document_type": "Setup", 
  "fields": [
   {
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "fieldname": "warehouse_group", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Warehouse Group", 
+   "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": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "warehouse", 
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Warehouse", 
@@ -24,6 +53,7 @@
    "options": "Warehouse", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -39,6 +69,7 @@
    "fieldtype": "Float", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Re-order Level", 
@@ -46,6 +77,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -61,6 +93,7 @@
    "fieldtype": "Float", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Re-order Qty", 
@@ -68,6 +101,7 @@
    "no_copy": 0, 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -83,6 +117,7 @@
    "fieldtype": "Select", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
    "in_filter": 0, 
    "in_list_view": 1, 
    "label": "Material Request Type", 
@@ -91,6 +126,7 @@
    "options": "Purchase\nTransfer", 
    "permlevel": 0, 
    "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
    "reqd": 1, 
@@ -102,18 +138,21 @@
  "hide_heading": 0, 
  "hide_toolbar": 0, 
  "idx": 1, 
+ "image_view": 0, 
  "in_create": 1, 
  "in_dialog": 0, 
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 1, 
  "max_attachments": 0, 
- "modified": "2015-11-16 06:29:48.492627", 
+ "modified": "2016-06-20 15:52:01.978593", 
  "modified_by": "Administrator", 
  "module": "Stock", 
  "name": "Item Reorder", 
  "owner": "Administrator", 
  "permissions": [], 
+ "quick_entry": 0, 
  "read_only": 0, 
- "read_only_onload": 0
+ "read_only_onload": 0, 
+ "track_seen": 0
 }
\ No newline at end of file
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index 7cea640..70cef36 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -192,7 +192,8 @@
 					stock_value_diff = frappe.db.get_value("Stock Ledger Entry", 
 						{"voucher_type": "Purchase Receipt", "voucher_no": self.name, 
 						"voucher_detail_no": d.name}, "stock_value_difference")
-
+					if not stock_value_diff:
+						continue
 					gl_entries.append(self.get_gl_dict({
 						"account": warehouse_account[d.warehouse]["name"],
 						"against": stock_rbnb,
diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
index 0c33ff7..24d0546 100644
--- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
@@ -79,8 +79,11 @@
 
 	def test_auto_material_request_for_variant(self):
 		self._test_auto_material_request("_Test Variant Item-S")
-
-	def _test_auto_material_request(self, item_code, material_request_type="Purchase"):
+	
+	def test_auto_material_request_for_warehouse_group(self):
+		self._test_auto_material_request("_Test Item Warehouse Group Wise Reorder", warehouse="_Test Warehouse Group-C1 - _TC")
+		
+	def _test_auto_material_request(self, item_code, material_request_type="Purchase", warehouse="_Test Warehouse - _TC"):
 		item = frappe.get_doc("Item", item_code)
 
 		if item.variant_of:
@@ -89,14 +92,14 @@
 			template = item
 
 		projected_qty, actual_qty = frappe.db.get_value("Bin", {"item_code": item_code,
-			"warehouse": "_Test Warehouse - _TC"}, ["projected_qty", "actual_qty"]) or [0, 0]
+			"warehouse": warehouse}, ["projected_qty", "actual_qty"]) or [0, 0]
 
 		# stock entry reqd for auto-reorder
-		create_stock_reconciliation(item_code=item_code, warehouse="_Test Warehouse - _TC",
+		create_stock_reconciliation(item_code=item_code, warehouse=warehouse,
 			qty = actual_qty + abs(projected_qty) + 10, rate=100)
 
 		projected_qty = frappe.db.get_value("Bin", {"item_code": item_code,
-			"warehouse": "_Test Warehouse - _TC"}, "projected_qty") or 0
+			"warehouse": warehouse}, "projected_qty") or 0
 
 		frappe.db.set_value("Stock Settings", None, "auto_indent", 1)
 
diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
index 9931ffa..2caabee 100644
--- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
+++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
@@ -25,6 +25,7 @@
 		validate_warehouse_company(self.warehouse, self.company)
 		self.scrub_posting_time()
 		self.validate_and_set_fiscal_year()
+		self.block_transactions_against_group_warehouse()
 
 		from erpnext.accounts.utils import validate_fiscal_year
 		validate_fiscal_year(self.posting_date, self.fiscal_year, self.meta.get_label("posting_date"), self)
@@ -117,6 +118,9 @@
 		if not self.fiscal_year:
 			self.fiscal_year = get_fiscal_year(self.posting_date, company=self.company)[0]
 
+	def block_transactions_against_group_warehouse(self):
+		from erpnext.stock.utils import is_group_warehouse
+		is_group_warehouse(self.warehouse)
 
 def on_doctype_update():
 	if not frappe.db.sql("""show index from `tabStock Ledger Entry`
diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
index f0eea5a..9cc27b7 100644
--- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
@@ -116,10 +116,11 @@
 def set_valuation_method(item_code, valuation_method):
 	frappe.db.set_value("Item", item_code, "valuation_method", valuation_method)
 
-	for warehouse in frappe.get_all("Warehouse", filters={"company": "_Test Company"}):
-		update_entries_after({
-			"item_code": item_code,
-			"warehouse": warehouse.name
-		}, allow_negative_stock=1)
+	for warehouse in frappe.get_all("Warehouse", filters={"company": "_Test Company"}, fields=["name", "is_group"]):
+		if warehouse.is_group == "No":
+			update_entries_after({
+				"item_code": item_code,
+				"warehouse": warehouse.name
+			}, allow_negative_stock=1)
 
 test_dependencies = ["Item", "Warehouse"]
diff --git a/erpnext/stock/doctype/warehouse/test_records.json b/erpnext/stock/doctype/warehouse/test_records.json
index e2162d2..c1dad5c 100644
--- a/erpnext/stock/doctype/warehouse/test_records.json
+++ b/erpnext/stock/doctype/warehouse/test_records.json
@@ -3,35 +3,68 @@
   "company": "_Test Company",
   "create_account_under": "Stock Assets - _TC",
   "doctype": "Warehouse",
-  "warehouse_name": "_Test Warehouse"
- },
- {
-  "company": "_Test Company",
-  "create_account_under": "Fixed Assets - _TC",
-  "doctype": "Warehouse",
-  "warehouse_name": "_Test Warehouse 1"
- },
- {
-  "company": "_Test Company",
-  "create_account_under": "Fixed Assets - _TC",
-  "doctype": "Warehouse",
-  "warehouse_name": "_Test Warehouse 2"
+  "warehouse_name": "_Test Warehouse",
+  "is_group": "No"
  },
  {
   "company": "_Test Company",
   "create_account_under": "Stock Assets - _TC",
   "doctype": "Warehouse",
-  "warehouse_name": "_Test Rejected Warehouse"
+  "warehouse_name": "_Test Warehouse",
+  "is_group": "No"
+ },
+ {
+  "company": "_Test Company",
+  "create_account_under": "Fixed Assets - _TC",
+  "doctype": "Warehouse",
+  "warehouse_name": "_Test Warehouse 1",
+  "is_group": "No"
+ },
+ {
+  "company": "_Test Company",
+  "create_account_under": "Fixed Assets - _TC",
+  "doctype": "Warehouse",
+  "warehouse_name": "_Test Warehouse 2",
+  "is_group": "No"
+ },
+ {
+  "company": "_Test Company",
+  "create_account_under": "Stock Assets - _TC",
+  "doctype": "Warehouse",
+  "warehouse_name": "_Test Rejected Warehouse",
+  "is_group": "No"
  },
  {
   "company": "_Test Company 1",
   "create_account_under": "Stock Assets - _TC1",
   "doctype": "Warehouse",
-  "warehouse_name": "_Test Warehouse 2"
+  "warehouse_name": "_Test Warehouse 2",
+  "is_group": "No"
  },
  {
   "company": "_Test Company",
   "doctype": "Warehouse",
-  "warehouse_name": "_Test Warehouse No Account"
+  "warehouse_name": "_Test Warehouse No Account",
+  "is_group": "No"
+ },
+ {
+  "company": "_Test Company",
+  "doctype": "Warehouse",
+  "warehouse_name": "_Test Warehouse Group",
+  "is_group": "Yes"
+ },
+ {
+  "company": "_Test Company",
+  "doctype": "Warehouse",
+  "warehouse_name": "_Test Warehouse Group-C1",
+  "is_group": "No",
+  "parent_warehouse": "_Test Warehouse Group - _TC"
+ },
+ {
+  "company": "_Test Company",
+  "doctype": "Warehouse",
+  "warehouse_name": "_Test Warehouse Group-C2",
+  "is_group": "No",
+  "parent_warehouse": "_Test Warehouse Group - _TC"
  }
 ]
diff --git a/erpnext/stock/doctype/warehouse/test_warehouse.py b/erpnext/stock/doctype/warehouse/test_warehouse.py
index ca80ca7..b6eaa13 100644
--- a/erpnext/stock/doctype/warehouse/test_warehouse.py
+++ b/erpnext/stock/doctype/warehouse/test_warehouse.py
@@ -4,4 +4,22 @@
 
 
 import frappe
-test_records = frappe.get_test_records('Warehouse')
\ No newline at end of file
+import unittest
+test_records = frappe.get_test_records('Warehouse')
+
+class TestWarehouse(unittest.TestCase):
+	def test_parent_warehouse(self):
+		parent_warehouse = frappe.get_doc("Warehouse", "_Test Warehouse Group - _TC")
+		self.assertEquals(parent_warehouse.is_group, "Yes")
+		
+	def test_warehouse_hierarchy(self):
+		p_warehouse = frappe.get_doc("Warehouse", "_Test Warehouse Group - _TC")
+		
+		child_warehouses =  frappe.db.sql("""select name, is_group, parent_warehouse from `tabWarehouse` wh
+			where wh.lft > %s and wh.rgt < %s""", (p_warehouse.lft, p_warehouse.rgt), as_dict=1)
+		
+		for child_warehouse in child_warehouses:
+			self.assertEquals(p_warehouse.name, child_warehouse.parent_warehouse)
+			self.assertEquals(child_warehouse.is_group, "No")
+		
+		
diff --git a/erpnext/stock/doctype/warehouse/warehouse.js b/erpnext/stock/doctype/warehouse/warehouse.js
index f1f0b66..4a84ead 100644
--- a/erpnext/stock/doctype/warehouse/warehouse.js
+++ b/erpnext/stock/doctype/warehouse/warehouse.js
@@ -1,6 +1,8 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
+cur_frm.list_route = "Tree/Warehouse";
+
 frappe.ui.form.on("Warehouse", {
 	refresh: function(frm) {
 		frm.toggle_display('warehouse_name', frm.doc.__islocal);
@@ -17,10 +19,20 @@
 				frappe.set_route("query-report", "General Ledger");
 			});
  		}
+		
+		frm.fields_dict['parent_warehouse'].get_query = function(doc) {
+			return {
+				filters: {
+					"is_group": "Yes",
+				}
+			}
+		}
 	}
 });
 
 
+
+
 cur_frm.set_query("create_account_under", function() {
 	return {
 		filters: {
diff --git a/erpnext/stock/doctype/warehouse/warehouse.json b/erpnext/stock/doctype/warehouse/warehouse.json
index 4e9dd07..6b60c63 100644
--- a/erpnext/stock/doctype/warehouse/warehouse.json
+++ b/erpnext/stock/doctype/warehouse/warehouse.json
@@ -2,6 +2,7 @@
  "allow_copy": 0, 
  "allow_import": 1, 
  "allow_rename": 1, 
+ "beta": 0, 
  "creation": "2013-03-07 18:50:32", 
  "custom": 0, 
  "description": "A logical Warehouse against which stock entries are made.", 
@@ -420,6 +421,159 @@
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "tree_details", 
+   "fieldtype": "Section Break", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Tree Details", 
+   "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": "parent_warehouse", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 1, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Parent 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": 0, 
+   "search_index": 1, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "is_group", 
+   "fieldtype": "Select", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 1, 
+   "label": "Has Child Node", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "\nYes\nNo", 
+   "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": "lft", 
+   "fieldtype": "Int", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "lft", 
+   "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": "rgt", 
+   "fieldtype": "Int", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "rgt", 
+   "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": "old_parent", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Old Parent", 
+   "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": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
   }
  ], 
  "hide_heading": 0, 
@@ -432,7 +586,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2016-04-18 05:44:24.837579", 
+ "modified": "2016-05-23 21:25:21.396188", 
  "modified_by": "Administrator", 
  "module": "Stock", 
  "name": "Warehouse", 
diff --git a/erpnext/stock/doctype/warehouse/warehouse.py b/erpnext/stock/doctype/warehouse/warehouse.py
index 901b229..f1f1e70 100644
--- a/erpnext/stock/doctype/warehouse/warehouse.py
+++ b/erpnext/stock/doctype/warehouse/warehouse.py
@@ -5,10 +5,11 @@
 import frappe
 from frappe.utils import cint, validate_email_add
 from frappe import throw, msgprint, _
+from frappe.utils.nestedset import NestedSet
 
-from frappe.model.document import Document
-
-class Warehouse(Document):
+class Warehouse(NestedSet):
+	nsm_parent_field = 'parent_warehouse'
+	
 	def autoname(self):
 		suffix = " - " + frappe.db.get_value("Company", self.company, "abbr")
 		if not self.warehouse_name.endswith(suffix):
@@ -45,6 +46,7 @@
 
 	def on_update(self):
 		self.create_account_head()
+		self.update_nsm_model()
 
 	def create_account_head(self):
 		if cint(frappe.defaults.get_global_default("auto_accounting_for_stock")):
@@ -55,8 +57,9 @@
 					ac_doc = frappe.get_doc({
 						"doctype": "Account",
 						'account_name': self.warehouse_name,
-						'parent_account': self.create_account_under,
-						'is_group':0,
+						'parent_account': self.parent_warehouse if self.parent_warehouse \
+							else self.create_account_under,
+						'is_group': 1 if self.is_group=="Yes" else 0 ,
 						'company':self.company,
 						"account_type": "Warehouse",
 						"warehouse": self.name,
@@ -75,13 +78,16 @@
 				{"account_name": "Stock Assets", "company": self.company})
 
 			if parent_account:
+				frappe.db.set_value("Warehouse", self.name, "create_account_under", parent_account)
 				self.create_account_under = parent_account
 			else:
 				frappe.throw(_("Please enter parent account group for warehouse {0}").format(self.name))
 		elif frappe.db.get_value("Account", self.create_account_under, "company") != self.company:
 			frappe.throw(_("Warehouse {0}: Parent account {1} does not bolong to the company {2}")
 				.format(self.name, self.create_account_under, self.company))
-
+	
+	def update_nsm_model(self):
+		frappe.utils.nestedset.update_nsm(self)
 
 	def on_trash(self):
 		# delete bin
@@ -101,6 +107,11 @@
 		if frappe.db.sql("""select name from `tabStock Ledger Entry`
 				where warehouse = %s""", self.name):
 			throw(_("Warehouse can not be deleted as stock ledger entry exists for this warehouse."))
+		
+		if frappe.db.sql("""select name from `tabWarehouse` where parent_warehouse = %s""", self.name):
+			throw(_("Child warehouse exists for this warehouse. You can not delete this warehouse."))
+		
+		self.update_nsm_model()
 
 	def before_rename(self, olddn, newdn, merge=False):
 		# Add company abbr if not provided
@@ -161,3 +172,51 @@
 
 		frappe.db.set_value("Stock Settings", None, "allow_negative_stock", existing_allow_negative_stock)
 		frappe.db.auto_commit_on_many_writes = 0
+
+@frappe.whitelist()
+def get_children():
+	from erpnext.stock.utils import get_stock_value_on
+	doctype = frappe.local.form_dict.get('doctype')
+	company = frappe.local.form_dict.get('company')
+	
+	parent_field = 'parent_' + doctype.lower().replace(' ', '_')
+	parent = frappe.form_dict.get("parent") or ""
+	
+	if parent == "Warehouses":
+		parent = ""
+
+	warehouses = frappe.db.sql("""select name as value,
+		if(is_group='Yes', 1, 0) as expandable
+		from `tab{doctype}`
+		where docstatus < 2
+		and ifnull(`{parent_field}`,'') = %s and `company` = %s
+		order by name""".format(doctype=frappe.db.escape(doctype), parent_field=frappe.db.escape(parent_field)),
+		(parent, company), as_dict=1)
+	
+	# return warehouses
+	for wh in warehouses:
+		wh["balance"] = get_stock_value_on(warehouse=wh.value)
+	return warehouses
+		
+@frappe.whitelist()
+def add_node():
+	doctype = frappe.form_dict.get('doctype')
+	company = frappe.form_dict.get('company')
+	parent_field = 'parent_' + doctype.lower().replace(' ', '_')
+	name_field = doctype.lower().replace(' ', '_') + '_name'
+	
+	doc = frappe.new_doc(doctype)
+	
+	parent = frappe.form_dict['parent']
+	
+	if cint(frappe.form_dict['is_root']):
+		parent = None
+
+	doc.update({
+		name_field: frappe.form_dict['name_field'],
+		parent_field: parent,
+		"is_group": frappe.form_dict['is_group'],
+		"company": company
+	})
+	
+	doc.save()
diff --git a/erpnext/stock/doctype/warehouse/warehouse_tree.js b/erpnext/stock/doctype/warehouse/warehouse_tree.js
new file mode 100644
index 0000000..0361493
--- /dev/null
+++ b/erpnext/stock/doctype/warehouse/warehouse_tree.js
@@ -0,0 +1,20 @@
+frappe.treeview_settings['Warehouse'] = {
+	get_tree_nodes: "erpnext.stock.doctype.warehouse.warehouse.get_children",
+	add_tree_node: "erpnext.stock.doctype.warehouse.warehouse.add_node",
+	get_tree_root: false,
+	root_label: "Warehouses",
+	filters: [{
+		fieldname: "company",
+		fieldtype:"Select",
+		options: $.map(locals[':Company'], function(c) { return c.name; }).sort(),
+		label: __("Company"),
+		default: frappe.defaults.get_default('company') ? frappe.defaults.get_default('company'): ""
+	}],
+	onrender: function(node) {
+		if (node.data && node.data.balance!==undefined) {
+			$('<span class="balance-area pull-right text-muted small">'
+			+ format_currency(Math.abs(node.data.balance), node.data.company_currency)
+			+ '</span>').insertBefore(node.$ul);
+		}
+	}
+}
\ No newline at end of file
diff --git a/erpnext/stock/reorder_item.py b/erpnext/stock/reorder_item.py
index 4531913..ad810a9 100644
--- a/erpnext/stock/reorder_item.py
+++ b/erpnext/stock/reorder_item.py
@@ -37,7 +37,7 @@
 
 	item_warehouse_projected_qty = get_item_warehouse_projected_qty(items_to_consider)
 
-	def add_to_material_request(item_code, warehouse, reorder_level, reorder_qty, material_request_type):
+	def add_to_material_request(item_code, warehouse, reorder_level, reorder_qty, material_request_type, warehouse_group=None):
 		if warehouse not in warehouse_company:
 			# a disabled warehouse
 			return
@@ -46,7 +46,10 @@
 		reorder_qty = flt(reorder_qty)
 
 		# projected_qty will be 0 if Bin does not exist
-		projected_qty = flt(item_warehouse_projected_qty.get(item_code, {}).get(warehouse))
+		if warehouse_group:
+			projected_qty = flt(item_warehouse_projected_qty.get(item_code, {}).get(warehouse_group))
+		else:
+			projected_qty = flt(item_warehouse_projected_qty.get(item_code, {}).get(warehouse))
 
 		if (reorder_level or reorder_qty) and projected_qty < reorder_level:
 			deficiency = reorder_level - projected_qty
@@ -70,7 +73,7 @@
 		if item.get("reorder_levels"):
 			for d in item.get("reorder_levels"):
 				add_to_material_request(item_code, d.warehouse, d.warehouse_reorder_level,
-					d.warehouse_reorder_qty, d.material_request_type)
+					d.warehouse_reorder_qty, d.material_request_type, warehouse_group=d.warehouse_group)
 
 	if material_requests:
 		return create_material_request(material_requests)
@@ -82,9 +85,17 @@
 		from tabBin where item_code in ({0})
 			and (warehouse != "" and warehouse is not null)"""\
 		.format(", ".join(["%s"] * len(items_to_consider))), items_to_consider):
-
+		
 		item_warehouse_projected_qty.setdefault(item_code, {})[warehouse] = flt(projected_qty)
-
+		
+		warehouse_doc = frappe.get_doc("Warehouse", warehouse)
+		
+		if warehouse_doc.parent_warehouse:
+			if not item_warehouse_projected_qty.get(item_code, {}).get(warehouse_doc.parent_warehouse):
+				item_warehouse_projected_qty.setdefault(item_code, {})[warehouse_doc.parent_warehouse] = flt(projected_qty)
+			else:
+				item_warehouse_projected_qty[item_code][warehouse_doc.parent_warehouse] += flt(projected_qty)
+				
 	return item_warehouse_projected_qty
 
 def create_material_request(material_requests):
diff --git a/erpnext/stock/report/stock_balance/stock_balance.py b/erpnext/stock/report/stock_balance/stock_balance.py
index 43b6b9a..696f2b0 100644
--- a/erpnext/stock/report/stock_balance/stock_balance.py
+++ b/erpnext/stock/report/stock_balance/stock_balance.py
@@ -71,7 +71,9 @@
 		conditions += " and item_code = '%s'" % frappe.db.escape(filters.get("item_code"), percent=False)
 
 	if filters.get("warehouse"):
-		conditions += " and warehouse = '%s'" % frappe.db.escape(filters.get("warehouse"), percent=False)
+		lft, rgt = frappe.db.get_value("Warehouse", filters.get("warehouse"), ["lft", "rgt"])
+		conditions += " and exists (select name from `tabWarehouse` wh \
+			where wh.lft >= %s and wh.rgt <= %s and sle.warehouse = wh.name)"%(lft, rgt)
 
 	return conditions
 
@@ -79,9 +81,9 @@
 	conditions = get_conditions(filters)
 	return frappe.db.sql("""select item_code, warehouse, posting_date, actual_qty, valuation_rate,
 			company, voucher_type, qty_after_transaction, stock_value_difference
-		from `tabStock Ledger Entry` force index (posting_sort_index)
+		from `tabStock Ledger Entry` sle force index (posting_sort_index)
 		where docstatus < 2 %s order by posting_date, posting_time, name""" %
-		conditions, as_dict=1)
+		conditions, as_dict=1, debug=1)
 
 def get_item_warehouse_map(filters):
 	iwb_map = {}
diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.py b/erpnext/stock/report/stock_ledger/stock_ledger.py
index ac4cbbd..b2e4670 100644
--- a/erpnext/stock/report/stock_ledger/stock_ledger.py
+++ b/erpnext/stock/report/stock_ledger/stock_ledger.py
@@ -41,7 +41,7 @@
 	return frappe.db.sql("""select concat_ws(" ", posting_date, posting_time) as date,
 			item_code, warehouse, actual_qty, qty_after_transaction, incoming_rate, valuation_rate,
 			stock_value, voucher_type, voucher_no, batch_no, serial_no, company
-		from `tabStock Ledger Entry`
+		from `tabStock Ledger Entry` sle
 		where company = %(company)s and
 			posting_date between %(from_date)s and %(to_date)s
 			{sle_conditions}
@@ -73,7 +73,7 @@
 		conditions.append("""item_code in (select name from tabItem
 			{item_conditions})""".format(item_conditions=item_conditions))
 	if filters.get("warehouse"):
-		conditions.append("warehouse=%(warehouse)s")
+		conditions.append(get_warehouse_condition(filters.get("warehouse")))
 	if filters.get("voucher_no"):
 		conditions.append("voucher_no=%(voucher_no)s")
 
@@ -86,7 +86,7 @@
 	from erpnext.stock.stock_ledger import get_previous_sle
 	last_entry = get_previous_sle({
 		"item_code": filters.item_code,
-		"warehouse": filters.warehouse,
+		"warehouse": get_warehouse_condition(filters.warehouse),
 		"posting_date": filters.from_date,
 		"posting_time": "00:00:00"
 	})
@@ -96,4 +96,11 @@
 	for i, v in ((9, 'qty_after_transaction'), (11, 'valuation_rate'), (12, 'stock_value')):
 			row[i] = last_entry.get(v, 0)
 		
-	return row
\ No newline at end of file
+	return row
+	
+def get_warehouse_condition(warehouse):
+	lft, rgt = frappe.db.get_value("Warehouse", warehouse, ["lft", "rgt"])
+	
+	return " exists (select name from `tabWarehouse` wh \
+		where wh.lft >= %s and wh.rgt <= %s and sle.warehouse = wh.name)"%(lft, rgt)
+	
\ No newline at end of file
diff --git a/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py b/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py
index 89963ab..409833a 100644
--- a/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py
+++ b/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py
@@ -57,16 +57,20 @@
 	return data
 
 def get_bin_list(filters):
-	bin_filters = frappe._dict()
+	conditions = []
+	
 	if filters.item_code:
-		bin_filters.item_code = filters.item_code
+		conditions.append("item_code = '%s' "%filters.item_code)
+		
 	if filters.warehouse:
-		bin_filters.warehouse = filters.warehouse
+		lft, rgt = frappe.db.get_value("Warehouse", filters.warehouse, ["lft", "rgt"])
+	
+		conditions.append(" exists (select name from `tabWarehouse` wh \
+			where wh.lft >= %s and wh.rgt <= %s and sle.warehouse = wh.name)"%(lft, rgt))
 
-	bin_list = frappe.get_all("Bin", fields=["item_code", "warehouse",
-		"actual_qty", "planned_qty", "indented_qty", "ordered_qty", "reserved_qty",
-		"reserved_qty_for_production", "projected_qty"],
-		filters=bin_filters, order_by="item_code, warehouse")
+	bin_list = frappe.db.sql("""select item_code, warehouse, actual_qty, planned_qty, indented_qty,
+		ordered_qty, reserved_qty, reserved_qty_for_production, projected_qty
+		from tabBin where %s order by item_code, warehouse """% " and ".join(conditions), as_dict=1,debug=1)
 
 	return bin_list
 
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index 292bd61..096a5e0 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -229,27 +229,35 @@
 				# calculate new valuation rate only if stock value is positive
 				# else it remains the same as that of previous entry
 				self.valuation_rate = new_stock_value / new_stock_qty
-
+		
 	def get_moving_average_values(self, sle):
 		actual_qty = flt(sle.actual_qty)
+		new_stock_qty = flt(self.qty_after_transaction) + actual_qty
+		if new_stock_qty >= 0:
+			if actual_qty > 0:
+				if flt(self.qty_after_transaction) <= 0:
+					self.valuation_rate = sle.incoming_rate
+				else:
+					new_stock_value = (self.qty_after_transaction * self.valuation_rate) + \
+						(actual_qty * sle.incoming_rate)
 
-		if actual_qty > 0 or flt(sle.outgoing_rate) > 0:
-			rate = flt(sle.incoming_rate) if actual_qty > 0 else flt(sle.outgoing_rate)
+					self.valuation_rate = new_stock_value / new_stock_qty
 
-			if self.qty_after_transaction < 0 and not self.valuation_rate:
-				# if negative stock, take current valuation rate as incoming rate
-				self.valuation_rate = rate
+			elif sle.outgoing_rate:
+				if new_stock_qty:
+					new_stock_value = (self.qty_after_transaction * self.valuation_rate) + \
+						(actual_qty * sle.outgoing_rate)
 
-			new_stock_qty = abs(self.qty_after_transaction) + actual_qty
-			new_stock_value = (abs(self.qty_after_transaction) * self.valuation_rate) + (actual_qty * rate)
+					self.valuation_rate = new_stock_value / new_stock_qty
+				else:
+					self.valuation_rate = self.outgoing_rate
 
-			if new_stock_qty:
-				self.valuation_rate = new_stock_value / flt(new_stock_qty)
+		else:
+			if flt(self.qty_after_transaction) >= 0 and sle.outgoing_rate:
+				self.valuation_rate = sle.outgoing_rate
 
-		elif not self.valuation_rate and self.qty_after_transaction <= 0:
-			self.valuation_rate = get_valuation_rate(sle.item_code, sle.warehouse, self.allow_zero_rate)
-
-		self.valuation_rate = abs(flt(self.valuation_rate))
+			if not self.valuation_rate and actual_qty > 0:
+				self.valuation_rate = sle.incoming_rate
 
 	def get_fifo_values(self, sle):
 		incoming_rate = flt(sle.incoming_rate)
@@ -268,10 +276,7 @@
 					self.stock_queue.append([actual_qty, incoming_rate])
 				else:
 					qty = self.stock_queue[-1][0] + actual_qty
-					if qty == 0:
-						self.stock_queue.pop(-1)
-					else:
-						self.stock_queue[-1] = [qty, incoming_rate]
+					self.stock_queue[-1] = [qty, incoming_rate]
 		else:
 			qty_to_pop = abs(actual_qty)
 			while qty_to_pop:
@@ -298,7 +303,7 @@
 						break
 				else:
 					index = 0
-
+					
 				# select first batch or the batch with same rate
 				batch = self.stock_queue[index]
 				if qty_to_pop >= batch[0]:
@@ -320,7 +325,11 @@
 		stock_value = sum((flt(batch[0]) * flt(batch[1]) for batch in self.stock_queue))
 		stock_qty = sum((flt(batch[0]) for batch in self.stock_queue))
 
-		self.valuation_rate = (stock_value / flt(stock_qty)) if stock_qty else 0
+		if stock_qty:
+			self.valuation_rate = stock_value / flt(stock_qty)
+		
+		if not self.stock_queue:
+			self.stock_queue.append([0, sle.incoming_rate or sle.outgoing_rate or self.valuation_rate])
 
 	def get_sle_before_datetime(self):
 		"""get previous stock ledger entry before current time-bucket"""
diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py
index 3f9de86..51d82a6 100644
--- a/erpnext/stock/utils.py
+++ b/erpnext/stock/utils.py
@@ -15,24 +15,34 @@
 	values, condition = [posting_date], ""
 
 	if warehouse:
-		values.append(warehouse)
-		condition += " AND warehouse = %s"
+		
+		lft, rgt, is_group = frappe.db.get_value("Warehouse", warehouse, ["lft", "rgt", "is_group"])
+		
+		if is_group == "Yes":
+			values.extend([lft, rgt])
+			condition += "and exists (\
+				select name from `tabWarehouse` wh where wh.name = sle.warehouse\
+				and wh.lft >= %s and wh.rgt <= %s)"
+		
+		else:
+			values.append(warehouse)
+			condition += " AND warehouse = %s"
 
 	if item_code:
 		values.append(item_code)
 		condition.append(" AND item_code = %s")
 
 	stock_ledger_entries = frappe.db.sql("""
-		SELECT item_code, stock_value
-		FROM `tabStock Ledger Entry`
+		SELECT item_code, stock_value, name, warehouse
+		FROM `tabStock Ledger Entry` sle
 		WHERE posting_date <= %s {0}
 		ORDER BY timestamp(posting_date, posting_time) DESC, name DESC
 	""".format(condition), values, as_dict=1)
 
 	sle_map = {}
 	for sle in stock_ledger_entries:
-		sle_map.setdefault(sle.item_code, flt(sle.stock_value))
-
+		sle_map[sle.item_code] = sle_map.get(sle.item_code, 0.0) + flt(sle.stock_value)
+		
 	return sum(sle_map.values())
 
 def get_stock_balance(item_code, warehouse, posting_date=None, posting_time=None, with_valuation_rate=False):
@@ -177,3 +187,8 @@
 	if warehouse_company and warehouse_company != company:
 		frappe.throw(_("Warehouse {0} does not belong to company {1}").format(warehouse, company),
 			InvalidWarehouseCompany)
+
+def is_group_warehouse(warehouse):
+	if frappe.db.get_value("Warehouse", warehouse, "is_group") == "Yes":
+		frappe.throw(_("Group node warehouse is not allowed to select for transactions"))
+	
\ No newline at end of file
diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py
index ab8e6d8..36d0876 100644
--- a/erpnext/support/doctype/issue/issue.py
+++ b/erpnext/support/doctype/issue/issue.py
@@ -64,7 +64,7 @@
 	}
 
 def get_issue_list(doctype, txt, filters, limit_start, limit_page_length=20):
-	from frappe.templates.pages.list import get_list
+	from frappe.www.list import get_list
 	user = frappe.session.user
 	ignore_permissions = False
 	if is_website_user():
diff --git a/erpnext/support/report/minutes_to_first_response_for_issues/minutes_to_first_response_for_issues.js b/erpnext/support/report/minutes_to_first_response_for_issues/minutes_to_first_response_for_issues.js
index 9fd35d9..e84b13c 100644
--- a/erpnext/support/report/minutes_to_first_response_for_issues/minutes_to_first_response_for_issues.js
+++ b/erpnext/support/report/minutes_to_first_response_for_issues/minutes_to_first_response_for_issues.js
@@ -1,20 +1,20 @@
 frappe.query_reports["Minutes to First Response for Issues"] = {
-    "filters": [
-        {
-            "fieldname":"from_date",
-            "label": __("From Date"),
-            "fieldtype": "Date",
+	"filters": [
+		{
+			"fieldname":"from_date",
+			"label": __("From Date"),
+			"fieldtype": "Date",
 			'reqd': 1,
-            "default": frappe.datetime.add_days(frappe.datetime.nowdate(), -30)
-        },
-        {
-            "fieldname":"to_date",
-            "label": __("To Date"),
-            "fieldtype": "Date",
+			"default": frappe.datetime.add_days(frappe.datetime.nowdate(), -30)
+		},
+		{
+			"fieldname":"to_date",
+			"label": __("To Date"),
+			"fieldtype": "Date",
 			'reqd': 1,
-            "default":frappe.datetime.nowdate()
-        },
-    ],
+			"default":frappe.datetime.nowdate()
+		},
+	],
 	get_chart_data: function(columns, result) {
 		return {
 			data: {
@@ -25,14 +25,14 @@
 				]
 				// rows: [['Date', 'Mins to first response']].concat(result)
 			},
-		    axis: {
-		        x: {
-		            type: 'timeseries',
-		            tick: {
-		                format: '%Y-%m-%d'
-		            }
-		        }
-		    },
+			axis: {
+				x: {
+					type: 'timeseries',
+					tick: {
+						format: frappe.ui.py_date_format
+					}
+				}
+			},
 			chart_type: 'line',
 
 		}
diff --git a/erpnext/support/report/minutes_to_first_response_for_issues/minutes_to_first_response_for_issues.py b/erpnext/support/report/minutes_to_first_response_for_issues/minutes_to_first_response_for_issues.py
index e88e756..57c2d44 100644
--- a/erpnext/support/report/minutes_to_first_response_for_issues/minutes_to_first_response_for_issues.py
+++ b/erpnext/support/report/minutes_to_first_response_for_issues/minutes_to_first_response_for_issues.py
@@ -20,7 +20,9 @@
 
 	data = frappe.db.sql('''select date(creation) as creation_date,
 		avg(mins_to_first_response) as mins
-		from tabIssue where date(creation) between %s and %s
+		from tabIssue
+			where date(creation) between %s and %s
+			and mins_to_first_response > 0
 		group by creation_date order by creation_date desc''', (filters.from_date, filters.to_date))
 
 	return columns, data
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/support/web_form/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/support/web_form/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/support/web_form/issues/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/support/web_form/issues/__init__.py
diff --git a/erpnext/support/web_form/issues/issues.js b/erpnext/support/web_form/issues/issues.js
new file mode 100644
index 0000000..699703c
--- /dev/null
+++ b/erpnext/support/web_form/issues/issues.js
@@ -0,0 +1,3 @@
+frappe.ready(function() {
+	// bind events here
+})
\ No newline at end of file
diff --git a/erpnext/support/web_form/issues/issues.json b/erpnext/support/web_form/issues/issues.json
new file mode 100644
index 0000000..4b7c70c
--- /dev/null
+++ b/erpnext/support/web_form/issues/issues.json
@@ -0,0 +1,60 @@
+{
+ "allow_comments": 1, 
+ "allow_delete": 1, 
+ "allow_edit": 1, 
+ "allow_multiple": 1, 
+ "breadcrumbs": "[{\"title\":\"Issues\", \"name\":\"issues\"}]", 
+ "creation": "2016-06-24 15:50:33.186483", 
+ "doc_type": "Issue", 
+ "docstatus": 0, 
+ "doctype": "Web Form", 
+ "idx": 0, 
+ "is_standard": 1, 
+ "login_required": 1, 
+ "modified": "2016-06-24 15:52:24.768558", 
+ "modified_by": "Administrator", 
+ "module": "Support", 
+ "name": "issues", 
+ "owner": "Administrator", 
+ "published": 1, 
+ "route": "issues", 
+ "success_message": "", 
+ "success_url": "/issues", 
+ "title": "Issue", 
+ "web_form_fields": [
+  {
+   "fieldname": "subject", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "label": "Subject", 
+   "read_only": 0, 
+   "reqd": 1
+  }, 
+  {
+   "default": "Open", 
+   "fieldname": "status", 
+   "fieldtype": "Select", 
+   "hidden": 0, 
+   "label": "Status", 
+   "options": "Open\nReplied\nHold\nClosed", 
+   "read_only": 1, 
+   "reqd": 0
+  }, 
+  {
+   "fieldname": "description", 
+   "fieldtype": "Text", 
+   "hidden": 0, 
+   "label": "Description", 
+   "read_only": 0, 
+   "reqd": 0
+  }, 
+  {
+   "fieldname": "attachment", 
+   "fieldtype": "Attach", 
+   "hidden": 0, 
+   "label": "Attachment", 
+   "read_only": 0, 
+   "reqd": 0
+  }
+ ]
+}
\ No newline at end of file
diff --git a/erpnext/support/web_form/issues/issues.py b/erpnext/support/web_form/issues/issues.py
new file mode 100644
index 0000000..2334f8b
--- /dev/null
+++ b/erpnext/support/web_form/issues/issues.py
@@ -0,0 +1,7 @@
+from __future__ import unicode_literals
+
+import frappe
+
+def get_context(context):
+	# do your magic here
+	pass
diff --git a/erpnext/templates/includes/products_as_grid.html b/erpnext/templates/includes/products_as_grid.html
index 0a66de2..7a15c1f 100644
--- a/erpnext/templates/includes/products_as_grid.html
+++ b/erpnext/templates/includes/products_as_grid.html
@@ -1,6 +1,6 @@
 {% from "erpnext/templates/includes/macros.html" import product_image_square %}
 
-<a class="product-link" href="{{ (route or page_name)|abs_url }}">
+<a class="product-link" href="{{ route|abs_url }}">
 	<div class="col-sm-4 col-xs-4 product-image-wrapper">
 		<div class="product-image-img">
 		{{ product_image_square(thumbnail or website_image) }}
diff --git a/erpnext/templates/includes/products_as_list.html b/erpnext/templates/includes/products_as_list.html
index a5523a9..b2069e4 100644
--- a/erpnext/templates/includes/products_as_list.html
+++ b/erpnext/templates/includes/products_as_list.html
@@ -1,6 +1,6 @@
 {% from "erpnext/templates/includes/macros.html" import product_image_square %}
 
-<a class="product-link product-list-link" href="{{ (route or page_name)|abs_url }}">
+<a class="product-link product-list-link" href="{{ route|abs_url }}">
 	<div class='row'>
 		<div class='col-xs-3 col-sm-2 product-image-wrapper'>
 			{{ product_image_square(thumbnail or website_image) }}
diff --git a/erpnext/templates/pages/cart.html b/erpnext/templates/pages/cart.html
index 7d8d0ff..35e4989 100644
--- a/erpnext/templates/pages/cart.html
+++ b/erpnext/templates/pages/cart.html
@@ -75,5 +75,5 @@
 	</div>
 </div>
 
-<!-- no-sidebar -->
+
 {% endblock %}
diff --git a/erpnext/templates/pages/home.py b/erpnext/templates/pages/home.py
index 4440f7e..e62687e 100644
--- a/erpnext/templates/pages/home.py
+++ b/erpnext/templates/pages/home.py
@@ -11,9 +11,7 @@
 	homepage = frappe.get_doc('Homepage')
 
 	for item in homepage.products:
-		parent_website_route, page_name = frappe.db.get_value('Item', item.item_code,
-			['parent_website_route', 'page_name'])
-		item.route = '/' + '/'.join(filter(None, [parent_website_route, page_name]))
+		item.route = '/' + frappe.db.get_value('Item', item.item_code, 'route')
 
 	# show atleast 3 products
 	if len(homepage.products) < 3:
diff --git a/erpnext/templates/pages/order.html b/erpnext/templates/pages/order.html
index b548e1f..7129178 100644
--- a/erpnext/templates/pages/order.html
+++ b/erpnext/templates/pages/order.html
@@ -4,13 +4,10 @@
 {% block breadcrumbs %}
 	{% include "templates/includes/breadcrumbs.html" %}
 {% endblock %}
-{% block title %}
-{{ doc.name }}
-{% endblock %}
 
-{% block header %}
-<h1>{{ doc.name }}</h1>
-{% endblock %}
+{% block title %}{{ doc.name }}{% endblock %}
+
+{% block header %}<h1>{{ doc.name }}</h1>{% endblock %}
 
 {% block page_content %}
 
diff --git a/erpnext/templates/pages/partners.html b/erpnext/templates/pages/partners.html
index 132c06b..72d6a64 100644
--- a/erpnext/templates/pages/partners.html
+++ b/erpnext/templates/pages/partners.html
@@ -10,7 +10,7 @@
 	<div class="row">
 		<div class="col-md-3">
 			{% if partner_info.logo -%}
-			<a href="{{ partner_info.page_name }}">
+			<a href="{{ partner_info.route }}">
 				<img itemprop="brand" src="{{ partner_info.logo }}" class="partner-logo"
 					alt="{{ partner_info.partner_name }}" title="{{ partner_info.partner_name }}" />
 			</a>
diff --git a/erpnext/templates/pages/partners.py b/erpnext/templates/pages/partners.py
index 508ea71..6725a3e 100644
--- a/erpnext/templates/pages/partners.py
+++ b/erpnext/templates/pages/partners.py
@@ -11,9 +11,6 @@
 	partners = frappe.db.sql("""select * from `tabSales Partner`
 			where show_in_website=1 order by name asc""", as_dict=True)
 
-	for p in partners:
-		p.route = frappe.get_doc("Sales Partner", p.name).get_route()
-
 	return {
 		"partners": partners,
 		"title": page_title
diff --git a/erpnext/templates/pages/product_search.py b/erpnext/templates/pages/product_search.py
index 465fdd5..8124215 100644
--- a/erpnext/templates/pages/product_search.py
+++ b/erpnext/templates/pages/product_search.py
@@ -14,8 +14,8 @@
 	# limit = 12 because we show 12 items in the grid view
 
 	# base query
-	query = """select name, item_name, item_code, page_name, website_image, thumbnail, item_group,
-			description, web_long_description as website_description, parent_website_route
+	query = """select name, item_name, item_code, route, website_image, thumbnail, item_group,
+			description, web_long_description as website_description
 		from `tabItem`
 		where show_in_website = 1
 			and disabled=0
@@ -38,9 +38,5 @@
 		"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]
 
diff --git a/erpnext/templates/pages/rfq.html b/erpnext/templates/pages/rfq.html
index cef93a5..5729e89 100644
--- a/erpnext/templates/pages/rfq.html
+++ b/erpnext/templates/pages/rfq.html
@@ -71,5 +71,5 @@
     </div>
 </div>
 
-<!-- no-sidebar -->
+
 {% endblock %}
diff --git a/erpnext/templates/pages/task_info.html b/erpnext/templates/pages/task_info.html
index c756cd5..1d6574b 100644
--- a/erpnext/templates/pages/task_info.html
+++ b/erpnext/templates/pages/task_info.html
@@ -1,23 +1,23 @@
 {% extends "templates/web.html" %}
 {% block title %} {{ doc.name }} {% endblock %}
 {% block breadcrumbs %}
-<div class="page-breadcrumbs" data-html-block="breadcrumbs">	                    
+<div class="page-breadcrumbs" data-html-block="breadcrumbs">
 	<ul class="breadcrumb">
 		<li>
 			<span class="icon icon-angle-left"></span>
 			<a href="/projects?project={{ doc.project }}">{{ doc.project }}</a>
-		</li>	
+		</li>
 	</ul>
 </div>
 {% endblock %}
 {% block page_content %}
-<div class="row">	
+<div class="row">
 	<div class=" col-sm-8 ">
 		<h1> {{ doc.subject }} </h1>
     </div>
-	
+
 	<div class="col-sm-4">
-		<div class="page-header-actions-block" data-html-block="header-actions">	
+		<div class="page-header-actions-block" data-html-block="header-actions">
 			<button type="submit" class="btn btn-primary btn-sm btn-form-submit">
 	    		Update</button>
 	    		<a href="tasks" class="btn btn-default btn-sm">
@@ -28,38 +28,38 @@
 
 <div class="page-content-block">
 	<form role="form" data-web-form="tasks">
-	
+
 		<input type="hidden" name="web_form" value="tasks">
 		<input type="hidden" name="doctype" value="Task">
 		<input type="hidden" name="name" value="TASK00056">
 
 		<div class="row">
 			<div class="col-sm-12" style="max-width: 500px;">
-				<div class="form-group">		
+				<div class="form-group">
 					<label for="project" class="control-label text-muted small">Project</label>
-						<input type="text" class="form-control" name="project" readonly value= "{{ doc.project }}">		
+						<input type="text" class="form-control" name="project" readonly value= "{{ doc.project }}">
 				</div>
 
 				<div class="form-group">
 					<label for="subject" class="control-label text-muted small">Subject</label>
 					<input type="text" class="form-control" name="subject" readonly value="{{ doc.subject }}">
 				</div>
-								
+
 				<div class="form-group">
 					<label for="description" class="control-label text-muted small">Details</label>
 					<textarea class="form-control" style="height: 200px;" name="description">{{ doc.description }}</textarea>
-				</div>						
-								
+				</div>
+
 				<div class="form-group">
 					<label for="priority" class="control-label text-muted small">Priority</label>
 					<input type="text" class="form-control" name="priority" readonly value="{{ doc.priority }}">
 				</div>
-							
+
 				<div class="form-group">
 					<label for="exp_start_date" class="control-label text-muted small">Expected Start Date</label>
 					<input type="text" class="form-control hasDatepicker" name="exp_start_date" readonly value="{{ doc.exp_start_date }}">
 				</div>
-			
+
 				<div class="form-group">
 					<label for="exp_end_date" class="control-label text-muted small">Expected End Date</label>
 					<input type="text" class="form-control hasDatepicker" name="exp_end_date" readonly value="{{ doc.exp_end_date }}">
@@ -78,7 +78,7 @@
 					</select>
 				</div>
 			</div>
-		</div>		
+		</div>
 	</form>
 </div>
 
@@ -93,7 +93,7 @@
 		<a class="add-comment btn btn-default btn-sm">Add Comment</a>
 		<div style="display: none;" id="comment-form">
 			<p>Add Comment</p>
-			<form>	
+			<form>
 				<fieldset>
 					<textarea class="form-control" name="comment" rows="5" placeholder="Comment"></textarea>
 					<p>
@@ -120,7 +120,7 @@
 								reference_doctype: "Task",
 								reference_name: "TASK00069",
 								comment_type: "Comment",
-								page_name: "tasks",
+								route: "tasks",
 							}
 
 							frappe.call({
@@ -145,5 +145,5 @@
 						})
 					});
 				</script>
-					
+
 {% endblock %}
\ No newline at end of file
diff --git a/erpnext/templates/utils.py b/erpnext/templates/utils.py
index 6f4f4ee..f33e647 100644
--- a/erpnext/templates/utils.py
+++ b/erpnext/templates/utils.py
@@ -9,7 +9,7 @@
 
 @frappe.whitelist(allow_guest=True)
 def send_message(subject="Website Query", message="", sender="", status="Open"):
-	from frappe.templates.pages.contact import send_message as website_send_message
+	from frappe.www.contact import send_message as website_send_message
 
 	website_send_message(subject, message, sender)
 
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/utilities/web_form/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/utilities/web_form/__init__.py
diff --git a/erpnext/manufacturing/page/bom_browser/__init__.py b/erpnext/utilities/web_form/addresses/__init__.py
similarity index 100%
copy from erpnext/manufacturing/page/bom_browser/__init__.py
copy to erpnext/utilities/web_form/addresses/__init__.py
diff --git a/erpnext/utilities/web_form/addresses/addresses.js b/erpnext/utilities/web_form/addresses/addresses.js
new file mode 100644
index 0000000..699703c
--- /dev/null
+++ b/erpnext/utilities/web_form/addresses/addresses.js
@@ -0,0 +1,3 @@
+frappe.ready(function() {
+	// bind events here
+})
\ No newline at end of file
diff --git a/erpnext/utilities/web_form/addresses/addresses.json b/erpnext/utilities/web_form/addresses/addresses.json
new file mode 100644
index 0000000..50fe6e9
--- /dev/null
+++ b/erpnext/utilities/web_form/addresses/addresses.json
@@ -0,0 +1,133 @@
+{
+ "allow_comments": 0, 
+ "allow_delete": 0, 
+ "allow_edit": 1, 
+ "allow_multiple": 1, 
+ "creation": "2016-06-24 15:50:33.196990", 
+ "doc_type": "Address", 
+ "docstatus": 0, 
+ "doctype": "Web Form", 
+ "idx": 0, 
+ "is_standard": 1, 
+ "login_required": 1, 
+ "modified": "2016-06-24 16:11:28.802353", 
+ "modified_by": "Administrator", 
+ "module": "Utilities", 
+ "name": "addresses", 
+ "owner": "Administrator", 
+ "published": 1, 
+ "route": "address", 
+ "success_url": "/addresses", 
+ "title": "Address", 
+ "web_form_fields": [
+  {
+   "description": "", 
+   "fieldname": "address_title", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "label": "Address Title", 
+   "read_only": 0, 
+   "reqd": 0
+  }, 
+  {
+   "fieldname": "address_type", 
+   "fieldtype": "Select", 
+   "hidden": 0, 
+   "label": "Address Type", 
+   "options": "Billing\nShipping\nOffice\nPersonal\nPlant\nPostal\nShop\nSubsidiary\nWarehouse\nOther", 
+   "read_only": 0, 
+   "reqd": 1
+  }, 
+  {
+   "fieldname": "address_line1", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "label": "Address Line 1", 
+   "read_only": 0, 
+   "reqd": 1
+  }, 
+  {
+   "fieldname": "address_line2", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "label": "Address Line 2", 
+   "read_only": 0, 
+   "reqd": 0
+  }, 
+  {
+   "fieldname": "city", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "label": "City/Town", 
+   "read_only": 0, 
+   "reqd": 1
+  }, 
+  {
+   "fieldname": "state", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "label": "State", 
+   "read_only": 0, 
+   "reqd": 0
+  }, 
+  {
+   "fieldname": "pincode", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "label": "Postal Code", 
+   "read_only": 0, 
+   "reqd": 0
+  }, 
+  {
+   "fieldname": "country", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "label": "Country", 
+   "options": "Country", 
+   "read_only": 0, 
+   "reqd": 1
+  }, 
+  {
+   "fieldtype": "Column Break", 
+   "hidden": 0, 
+   "read_only": 0, 
+   "reqd": 0
+  }, 
+  {
+   "fieldname": "email_id", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "label": "Email Id", 
+   "read_only": 0, 
+   "reqd": 0
+  }, 
+  {
+   "fieldname": "phone", 
+   "fieldtype": "Data", 
+   "hidden": 0, 
+   "label": "Phone", 
+   "read_only": 0, 
+   "reqd": 1
+  }, 
+  {
+   "default": "0", 
+   "description": "", 
+   "fieldname": "is_primary_address", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "label": "Preferred Billing Address", 
+   "read_only": 0, 
+   "reqd": 0
+  }, 
+  {
+   "default": "0", 
+   "description": "", 
+   "fieldname": "is_shipping_address", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "label": "Preferred Shipping Address", 
+   "read_only": 0, 
+   "reqd": 0
+  }
+ ]
+}
\ No newline at end of file
diff --git a/erpnext/utilities/web_form/addresses/addresses.py b/erpnext/utilities/web_form/addresses/addresses.py
new file mode 100644
index 0000000..2334f8b
--- /dev/null
+++ b/erpnext/utilities/web_form/addresses/addresses.py
@@ -0,0 +1,7 @@
+from __future__ import unicode_literals
+
+import frappe
+
+def get_context(context):
+	# do your magic here
+	pass