[enhancement] sort root accounts as assets, liability, equity, income, expense
diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.py b/erpnext/accounts/page/accounts_browser/accounts_browser.py
index 15cfdd2..2318588 100644
--- a/erpnext/accounts/page/accounts_browser/accounts_browser.py
+++ b/erpnext/accounts/page/accounts_browser/accounts_browser.py
@@ -6,6 +6,7 @@
 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():
@@ -21,12 +22,15 @@
 	# root
 	if args['parent'] in ("Accounts", "Cost Centers"):
 		acc = frappe.db.sql(""" select 
-			name as value, if(group_or_ledger='Group', 1, 0) as expandable
+			name as value, if(group_or_ledger='Group', 1, 0) as expandable, root_type, report_type
 			from `tab%s`
 			where ifnull(parent_%s,'') = ''
 			and `company` = %s	and docstatus<2 
 			order by name""" % (ctype, ctype.lower().replace(' ','_'), '%s'),
 				company, as_dict=1)
+				
+		if args["parent"]=="Accounts":
+			sort_root_accounts(acc)
 	else:	
 		# other
 		acc = frappe.db.sql("""select 
diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py
index 4ae61ca..fc4ebec 100644
--- a/erpnext/accounts/report/financial_statements.py
+++ b/erpnext/accounts/report/financial_statements.py
@@ -186,7 +186,10 @@
 	filtered_accounts = []
 	def add_to_list(parent, level):
 		if level < depth:
-			for child in (parent_children_map.get(parent) or []):
+			children = parent_children_map.get(parent) or []
+			if parent == None:
+				sort_root_accounts(children)
+			for child in children:
 				child.indent = level
 				filtered_accounts.append(child)
 				add_to_list(child.name, level + 1)
@@ -202,6 +205,22 @@
 	add_to_list(None, 0)
 
 	return filtered_accounts, accounts_by_name
+	
+def sort_root_accounts(roots):
+	"""Sort root types as Asset, Liability, Equity, Income, Expense"""
+
+	def compare_roots(a, b):
+		if a.report_type != b.report_type and a.report_type == "Balance Sheet":
+			return -1
+		if a.root_type != b.root_type and a.root_type == "Asset":
+			return -1
+		if a.root_type == "Liability" and b.root_type == "Equity":
+			return -1
+		if a.root_type == "Income" and b.root_type == "Expense":
+			return -1
+		return 1
+
+	roots.sort(compare_roots)
 
 def get_gl_entries(company, from_date, to_date, root_lft, root_rgt, ignore_closing_entries=False):
 	"""Returns a dict like { "account": [gl entries], ... }"""