diff --git a/erpnext/accounts/page/chart_of_accounts/__init__.py b/erpnext/accounts/page/chart_of_accounts/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/accounts/page/chart_of_accounts/__init__.py
diff --git a/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.css b/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.css
new file mode 100644
index 0000000..00e05d4
--- /dev/null
+++ b/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.css
@@ -0,0 +1,21 @@
+.cell-title {
+	font-weight: bold;
+}
+
+.cell-effort-driven {
+	text-align: center;
+}
+
+.toggle {
+	height: 9px;
+	width: 9px;
+	display: inline-block;
+}
+
+.toggle.expand {
+	background: url(images/expand.gif) no-repeat center center;
+}
+
+.toggle.collapse {
+	background: url(images/collapse.gif) no-repeat center center;
+}
\ No newline at end of file
diff --git a/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.html b/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.html
diff --git a/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.js b/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.js
new file mode 100644
index 0000000..010b1fc
--- /dev/null
+++ b/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.js
@@ -0,0 +1,201 @@
+// ERPNext - web based ERP (http://erpnext.com)
+// Copyright (C) 2012 Web Notes Technologies Pvt Ltd
+// 
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+// 
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the
+// GNU General Public License for more details.
+// 
+// You should have received a copy of the GNU General Public License
+// along with this program.	If not, see <http://www.gnu.org/licenses/>.
+
+/* todo
+ 	- load / display chart of accounts
+	- settings for company, start date, end data
+	- load balances
+	- open ledger on link
+*/
+
+wn.pages['chart-of-accounts'].onload = function(wrapper) { 
+	wn.ui.make_app_page({
+		parent: wrapper,
+		title: 'Chart of Accounts',
+		single_column: true
+	});
+	wrapper.appframe.add_button("Refresh", function() {}, "icon-refresh").css("margin-right", "12px");
+	erpnext.coa.company_select = wrapper.appframe.add_select("Company", ["Loading..."]);
+	wrapper.appframe.add_date("Opening Date");
+	wrapper.appframe.add_date("Closing Date");
+	
+	$('<div id="chart-of-accounts" style="height: 500px; border: 1px solid #aaa;">\
+		</div>').appendTo($(wrapper).find('.layout-main'));
+	
+	wn.call({
+		module: "accounts",
+		page: "chart_of_accounts",
+		method: "get_companies",
+		callback: function(r) {
+			erpnext.coa.company_select.empty().add_options(r.message).change();
+		}
+	});
+	
+	erpnext.coa.company_select.change(function() {
+		erpnext.coa.load_slickgrid();
+		erpnext.coa.load_data($(this).val());
+	});
+}
+
+erpnext.coa = {
+	load_slickgrid: function() {
+		// load tree
+		wn.require('js/lib/jquery/jquery.ui.sortable');
+		wn.require('js/lib/slickgrid/slick.grid.css');
+		wn.require('js/lib/slickgrid/slick-default-theme.css');
+		wn.require('js/lib/slickgrid/jquery.event.drag.min.js');
+		wn.require('js/lib/slickgrid/slick.core.js');
+		wn.require('js/lib/slickgrid/slick.formatters.js');
+		wn.require('js/lib/slickgrid/slick.grid.js');
+		wn.require('js/lib/slickgrid/slick.dataview.js');
+		wn.dom.set_style('.slick-cell { font-size: 12px; }');		
+	},
+	load_data: function(company) {
+		wn.call({
+			module: "accounts",
+			page: "chart_of_accounts",
+			method: "get_chart",
+			args: {company: company},
+			callback: function(r) {
+				erpnext.coa.prepare_data(r.message);
+				erpnext.coa.render()
+			}
+		})
+	},
+	prepare_data: function(indata) {
+		var data = [];
+		var parent_map = {};
+		var data_by_name = {};
+		$.each(indata, function(i, v) {
+			if(v[0]) {
+				var d = {
+					"id": v[0],
+					"name": v[0],
+					"parent": v[1],
+					"opening": Math.random() * 100,
+					"debits": Math.random() * 100,
+					"credits": Math.random() * 100
+				};
+				d["closing"] = d['opening'] + d['debits'] - d['credits'];
+
+				data.push(d);
+				data_by_name[d.name] = d;
+				if(d.parent) {
+					parent_map[d.name] = d.parent;
+				}		
+			}
+		});
+		erpnext.coa.set_indent(data, parent_map);
+		erpnext.coa.data = data;
+		erpnext.coa.parent_map = parent_map;
+		erpnext.coa.data_by_name = data_by_name;
+	},
+	set_indent: function(data, parent_map) {
+		$.each(data, function(i, d) {
+			var indent = 0;
+			var parent = parent_map[d.name];
+			if(parent) {
+				while(parent) {
+					indent++;
+					parent = parent_map[parent];
+				}				
+			}
+			d.indent = indent;
+		});
+	},
+	render: function() {
+		// initialize the model
+		erpnext.coa.dataView = new Slick.Data.DataView({ inlineFilters: true });
+		erpnext.coa.dataView.beginUpdate();
+		erpnext.coa.dataView.setItems(erpnext.coa.data);
+		erpnext.coa.dataView.setFilter(erpnext.coa.filter)
+		erpnext.coa.dataView.endUpdate();
+
+		var columns = [
+			{id: "name", name: "Account", field: "name", width: 400, cssClass: "cell-title", 
+				formatter: erpnext.coa.account_formatter},
+			{id: "opening", name: "Opening", field: "opening"},
+			{id: "debits", name: "Debits", field: "debits"},
+			{id: "credits", name: "Credits", field: "credits"},
+			{id: "closing", name: "Closing", field: "closing"}			
+		];
+		
+		var options = {
+			editable: false,
+			enableColumnReorder: false
+		};
+
+		// initialize the grid
+		var grid = new Slick.Grid("#chart-of-accounts", erpnext.coa.dataView, columns, options);
+		erpnext.coa.add_events(grid);
+	},
+	add_events: function(grid) {
+		grid.onClick.subscribe(function (e, args) {
+			if ($(e.target).hasClass("toggle")) {
+				var item = erpnext.coa.dataView.getItem(args.row);
+				if (item) {
+					if (!item._collapsed) {
+						item._collapsed = true;
+					} else {
+						item._collapsed = false;
+					}
+
+					erpnext.coa.dataView.updateItem(item.id, item);
+				}
+				e.stopImmediatePropagation();
+			}
+		});
+
+		erpnext.coa.dataView.onRowsChanged.subscribe(function (e, args) {
+			grid.invalidateRows(args.rows);
+			grid.render();
+		});
+		
+		erpnext.coa.dataView.onRowCountChanged.subscribe(function (e, args) {
+			grid.updateRowCount();
+			grid.render();
+		});
+		
+	},
+	filter: function(item) {
+		if (item.parent) {
+			var parent = item.parent;
+			while (parent) {
+				if (erpnext.coa.data_by_name[parent]._collapsed) {
+					return false;
+				}
+				parent = erpnext.coa.parent_map[parent];
+			}
+		}
+		return true;
+	},
+	account_formatter: function (row, cell, value, columnDef, dataContext) {
+		value = value.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
+		var data = erpnext.coa.data;
+		var spacer = "<span style='display:inline-block;height:1px;width:" + 
+			(15 * dataContext["indent"]) + "px'></span>";
+		var idx = erpnext.coa.dataView.getIdxById(dataContext.id);
+		if (data[idx + 1] && data[idx + 1].indent > data[idx].indent) {
+			if (dataContext._collapsed) {
+				return spacer + " <span class='toggle expand'></span>&nbsp;" + value;
+			} else {
+				return spacer + " <span class='toggle collapse'></span>&nbsp;" + value;
+			}
+		} else {
+			return spacer + " <span class='toggle'></span>&nbsp;" + value;
+		}
+	}
+}
diff --git a/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.py b/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.py
new file mode 100644
index 0000000..b3c2187
--- /dev/null
+++ b/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.py
@@ -0,0 +1,25 @@
+import webnotes
+
+@webnotes.whitelist()
+def get_chart():
+	company = webnotes.form_dict.get('company')
+	return webnotes.conn.sql("""select name, parent_account from 
+		tabAccount where company=%s and docstatus < 2 order by lft""", company)
+
+@webnotes.whitelist()
+def get_companies():
+	"""get a list of companies based on permission"""
+	
+	# check if match permission exists
+	res = webnotes.conn.sql("""select role, `match` from `tabDocPerm`
+		where parent='Account' and permlevel=0 and `read`=1""", as_dict=1)
+		
+	match = any((r["match"] for r in res 
+		if r["role"] in webnotes.user.roles and r["match"]=="company"))
+	
+	# if match == company is specified and companies are specified in user defaults
+	if match and webnotes.user.get_defaults().get("company"):
+		return webnotes.user.get_defaults().get("company")
+	else:
+		return [r[0] for r in webnotes.conn.sql("""select name from tabCompany
+			where docstatus!=2""")]
diff --git a/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.txt b/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.txt
new file mode 100644
index 0000000..e9d5ab5
--- /dev/null
+++ b/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.txt
@@ -0,0 +1,28 @@
+# Page, chart-of-accounts
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2012-09-12 14:43:52',
+		'docstatus': 0,
+		'modified': '2012-09-12 14:43:53',
+		'modified_by': u'Administrator',
+		'owner': u'Administrator'
+	},
+
+	# These values are common for all Page
+	{
+		'doctype': 'Page',
+		'module': u'Accounts',
+		'name': '__common__',
+		'page_name': u'Chart of Accounts',
+		'standard': u'Yes',
+		'title': u'Chart of Accounts'
+	},
+
+	# Page, chart-of-accounts
+	{
+		'doctype': 'Page',
+		'name': u'chart-of-accounts'
+	}
+]
\ No newline at end of file
diff --git a/public/images/collapse.gif b/public/images/collapse.gif
new file mode 100644
index 0000000..01e6914
--- /dev/null
+++ b/public/images/collapse.gif
Binary files differ
diff --git a/public/images/expand.gif b/public/images/expand.gif
new file mode 100644
index 0000000..1b24ef1
--- /dev/null
+++ b/public/images/expand.gif
Binary files differ
diff --git a/public/js/all-app.js b/public/js/all-app.js
index 5876391..50e3ca2 100644
--- a/public/js/all-app.js
+++ b/public/js/all-app.js
@@ -183,7 +183,7 @@
 wn.dom.set_box_shadow=function(ele,spread){$(ele).css('-moz-box-shadow','0px 0px '+spread+'px rgba(0,0,0,0.3);')
 $(ele).css('-webkit-box-shadow','0px 0px '+spread+'px rgba(0,0,0,0.3);')
 $(ele).css('-box-shadow','0px 0px '+spread+'px rgba(0,0,0,0.3);')};(function($){$.fn.add_options=function(options_list){for(var i=0;i<options_list.length;i++){var v=options_list[i];value=v.value||v;label=v.label||v;$('<option>').html(label).attr('value',value).appendTo(this);}
-$(this).val(options_list[0].value||options_list[0]);}
+return $(this).val(options_list[0].value||options_list[0]);}
 $.fn.set_working=function(){var ele=this.get(0);$(ele).attr('disabled','disabled');if(ele.loading_img){$(ele.loading_img).toggle(true);}else{ele.loading_img=$('<img src="images/lib/ui/button-load.gif" \
     style="margin-left: 4px; margin-bottom: -2px; display: inline;" />').insertAfter(ele);}}
 $.fn.done_working=function(){var ele=this.get(0);$(ele).attr('disabled',null);if(ele.loading_img){$(ele.loading_img).toggle(false);};}})(jQuery);
@@ -854,10 +854,10 @@
    <span class="appframe-title"></span>\
    <span class="close">&times;</span>\
   </div>').appendTo(this.$w);this.$w.find('.close').click(function(){window.history.back();})
-if(title)this.title(title);},title:function(txt){this.$titlebar.find('.appframe-title').html(txt);},add_button:function(label,click,icon){if(!this.$w.find('.appframe-toolbar').length)
-this.$w.append('<div class="appframe-toolbar"></div>');args={label:label,icon:''};if(icon){args.icon='<i class="'+icon+'"></i>';}
+if(title)this.title(title);},title:function(txt){this.$titlebar.find('.appframe-title').html(txt);},add_button:function(label,click,icon){this.add_toolbar();args={label:label,icon:''};if(icon){args.icon='<i class="'+icon+'"></i>';}
 this.buttons[label]=$(repl('<button class="btn btn-small">\
-   %(icon)s %(label)s</button>',args)).click(click).appendTo(this.$w.find('.appframe-toolbar'));return this.buttons[label];},clear_buttons:function(){this.$w.find('.appframe-toolbar').empty();}});wn.ui.make_app_page=function(opts){if(opts.single_column){$(opts.parent).html('<div class="layout-wrapper layout-wrapper-appframe">\
+   %(icon)s %(label)s</button>',args)).click(click).appendTo(this.toolbar);return this.buttons[label];},clear_buttons:function(){this.toolbar.empty();},add_toolbar:function(){if(!this.toolbar)
+this.$w.append('<div class="appframe-toolbar"></div>');this.toolbar=this.$w.find('.appframe-toolbar');},add_select:function(label,options){this.add_toolbar();return $("<select style='width: 160px;'>").add_options(options).appendTo(this.add_label(label));},add_label:function(label){return $("<span style='margin-right: 12px;'>"+label+" </span>").appendTo(this.toolbar);},add_date:function(label,date){this.add_toolbar();return $("<input style='width: 80px;'>").datepicker({dateFormat:sys_defaults.date_format.replace("yyyy","yy"),}).val(dateutil.str_to_user(date)||"").appendTo(this.add_label(label));},});wn.ui.make_app_page=function(opts){if(opts.single_column){$(opts.parent).html('<div class="layout-wrapper layout-wrapper-appframe">\
    <div class="layout-appframe"></div>\
    <div class="layout-main"></div>\
   </div>');}else{$(opts.parent).html('<div class="layout-wrapper layout-wrapper-background">\
diff --git a/public/js/all-web.js b/public/js/all-web.js
index 8f682f1..2454dde 100644
--- a/public/js/all-web.js
+++ b/public/js/all-web.js
@@ -70,7 +70,7 @@
 wn.dom.set_box_shadow=function(ele,spread){$(ele).css('-moz-box-shadow','0px 0px '+spread+'px rgba(0,0,0,0.3);')
 $(ele).css('-webkit-box-shadow','0px 0px '+spread+'px rgba(0,0,0,0.3);')
 $(ele).css('-box-shadow','0px 0px '+spread+'px rgba(0,0,0,0.3);')};(function($){$.fn.add_options=function(options_list){for(var i=0;i<options_list.length;i++){var v=options_list[i];value=v.value||v;label=v.label||v;$('<option>').html(label).attr('value',value).appendTo(this);}
-$(this).val(options_list[0].value||options_list[0]);}
+return $(this).val(options_list[0].value||options_list[0]);}
 $.fn.set_working=function(){var ele=this.get(0);$(ele).attr('disabled','disabled');if(ele.loading_img){$(ele.loading_img).toggle(true);}else{ele.loading_img=$('<img src="images/lib/ui/button-load.gif" \
     style="margin-left: 4px; margin-bottom: -2px; display: inline;" />').insertAfter(ele);}}
 $.fn.done_working=function(){var ele=this.get(0);$(ele).attr('disabled',null);if(ele.loading_img){$(ele.loading_img).toggle(false);};}})(jQuery);
@@ -513,10 +513,10 @@
    <span class="appframe-title"></span>\
    <span class="close">&times;</span>\
   </div>').appendTo(this.$w);this.$w.find('.close').click(function(){window.history.back();})
-if(title)this.title(title);},title:function(txt){this.$titlebar.find('.appframe-title').html(txt);},add_button:function(label,click,icon){if(!this.$w.find('.appframe-toolbar').length)
-this.$w.append('<div class="appframe-toolbar"></div>');args={label:label,icon:''};if(icon){args.icon='<i class="'+icon+'"></i>';}
+if(title)this.title(title);},title:function(txt){this.$titlebar.find('.appframe-title').html(txt);},add_button:function(label,click,icon){this.add_toolbar();args={label:label,icon:''};if(icon){args.icon='<i class="'+icon+'"></i>';}
 this.buttons[label]=$(repl('<button class="btn btn-small">\
-   %(icon)s %(label)s</button>',args)).click(click).appendTo(this.$w.find('.appframe-toolbar'));return this.buttons[label];},clear_buttons:function(){this.$w.find('.appframe-toolbar').empty();}});wn.ui.make_app_page=function(opts){if(opts.single_column){$(opts.parent).html('<div class="layout-wrapper layout-wrapper-appframe">\
+   %(icon)s %(label)s</button>',args)).click(click).appendTo(this.toolbar);return this.buttons[label];},clear_buttons:function(){this.toolbar.empty();},add_toolbar:function(){if(!this.toolbar)
+this.$w.append('<div class="appframe-toolbar"></div>');this.toolbar=this.$w.find('.appframe-toolbar');},add_select:function(label,options){this.add_toolbar();return $("<select style='width: 160px;'>").add_options(options).appendTo(this.add_label(label));},add_label:function(label){return $("<span style='margin-right: 12px;'>"+label+" </span>").appendTo(this.toolbar);},add_date:function(label,date){this.add_toolbar();return $("<input style='width: 80px;'>").datepicker({dateFormat:sys_defaults.date_format.replace("yyyy","yy"),}).val(dateutil.str_to_user(date)||"").appendTo(this.add_label(label));},});wn.ui.make_app_page=function(opts){if(opts.single_column){$(opts.parent).html('<div class="layout-wrapper layout-wrapper-appframe">\
    <div class="layout-appframe"></div>\
    <div class="layout-main"></div>\
   </div>');}else{$(opts.parent).html('<div class="layout-wrapper layout-wrapper-background">\
