diff --git a/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.js b/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.js
index 010b1fc..43fe56c 100644
--- a/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.js
+++ b/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.js
@@ -27,10 +27,11 @@
 		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");
+	erpnext.coa.opening_date = wrapper.appframe.add_date("Opening Date")
+		.val(dateutil.str_to_user(sys_defaults.year_start_date));
+	erpnext.coa.closing_date = wrapper.appframe.add_date("Closing Date")
+		.val(dateutil.obj_to_user(new Date()));
 	
 	$('<div id="chart-of-accounts" style="height: 500px; border: 1px solid #aaa;">\
 		</div>').appendTo($(wrapper).find('.layout-main'));
@@ -48,6 +49,9 @@
 		erpnext.coa.load_slickgrid();
 		erpnext.coa.load_data($(this).val());
 	});
+	
+	erpnext.coa.opening_date.change(erpnext.coa.refresh);
+	erpnext.coa.closing_date.change(erpnext.coa.refresh);
 }
 
 erpnext.coa = {
@@ -63,6 +67,10 @@
 		wn.require('js/lib/slickgrid/slick.dataview.js');
 		wn.dom.set_style('.slick-cell { font-size: 12px; }');		
 	},
+	refresh: function() {
+		erpnext.coa.prepare_balances();
+		erpnext.coa.render();
+	},
 	load_data: function(company) {
 		wn.call({
 			module: "accounts",
@@ -70,12 +78,14 @@
 			method: "get_chart",
 			args: {company: company},
 			callback: function(r) {
-				erpnext.coa.prepare_data(r.message);
-				erpnext.coa.render()
+				erpnext.coa.gl = r.message.gl;
+				erpnext.coa.prepare_chart(r.message.chart);
+				erpnext.coa.prepare_balances();
+				erpnext.coa.render();
 			}
 		})
 	},
-	prepare_data: function(indata) {
+	prepare_chart: function(indata) {
 		var data = [];
 		var parent_map = {};
 		var data_by_name = {};
@@ -85,11 +95,12 @@
 					"id": v[0],
 					"name": v[0],
 					"parent": v[1],
-					"opening": Math.random() * 100,
-					"debits": Math.random() * 100,
-					"credits": Math.random() * 100
+					"opening": 0,
+					"debit": 0,
+					"credit": 0,
+					"closing": 0,
+					"debit_or_credit": v[2],
 				};
-				d["closing"] = d['opening'] + d['debits'] - d['credits'];
 
 				data.push(d);
 				data_by_name[d.name] = d;
@@ -103,6 +114,44 @@
 		erpnext.coa.parent_map = parent_map;
 		erpnext.coa.data_by_name = data_by_name;
 	},
+	prepare_balances: function() {
+		var gl = erpnext.coa.gl;
+		var opening_date = dateutil.user_to_obj(erpnext.coa.opening_date.val());
+		var closing_date = dateutil.user_to_obj(erpnext.coa.closing_date.val());
+		$.each(erpnext.coa.data, function(i, v) {
+			v.opening = v.debit = v.credit = v.closing = 0;
+		});
+		$.each(gl, function(i, v) {
+			var posting_date = dateutil.str_to_obj(v[0]);
+			var account = erpnext.coa.data_by_name[v[1]];
+			// opening
+			if (posting_date < opening_date) {
+				if (account.debit_or_credit === "Debit") {
+					account.opening += (v[2] - v[3]);
+				} else {
+					account.opening += (v[3] - v[2]);
+				}
+			} else if (opening_date <= posting_date && posting_date <= closing_date) {
+				// in between
+				account.debit += v[2];
+				account.credit += v[3];
+			}
+			// closing
+			if (account.debit_or_credit === "Debit") {
+				account.closing = account.opening + account.debit - account.credit;
+			} else {
+				account.closing = account.opening + account.credit - account.debit;
+			}
+		});
+		
+		// format amount
+		$.each(erpnext.coa.data, function(i, v) {
+			v.opening = fmt_money(v.opening);
+			v.debit = fmt_money(v.debit);
+			v.credit = fmt_money(v.credit);
+			v.closing = fmt_money(v.closing);
+		});
+	},
 	set_indent: function(data, parent_map) {
 		$.each(data, function(i, d) {
 			var indent = 0;
@@ -128,8 +177,8 @@
 			{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: "debit", name: "Debit", field: "debit"},
+			{id: "credit", name: "Credit", field: "credit"},
 			{id: "closing", name: "Closing", field: "closing"}			
 		];
 		
@@ -141,6 +190,7 @@
 		// initialize the grid
 		var grid = new Slick.Grid("#chart-of-accounts", erpnext.coa.dataView, columns, options);
 		erpnext.coa.add_events(grid);
+		erpnext.coa.grid = grid;
 	},
 	add_events: function(grid) {
 		grid.onClick.subscribe(function (e, args) {
diff --git a/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.py b/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.py
index b3c2187..620368f 100644
--- a/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.py
+++ b/erpnext/accounts/page/chart_of_accounts/chart_of_accounts.py
@@ -3,8 +3,13 @@
 @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)
+	res = {}
+	res["chart"] = webnotes.conn.sql("""select name, parent_account, debit_or_credit from 
+		tabAccount where company=%s and docstatus < 2 order by lft""", (company, ))
+	res["gl"] = webnotes.conn.sql("""select posting_date, account, ifnull(debit, 0), ifnull(credit, 0)
+		from `tabGL Entry` where company=%s and ifnull(is_cancelled, "No") = "No" 
+		order by posting_date""", (company, ))
+	return res
 
 @webnotes.whitelist()
 def get_companies():
diff --git a/public/js/all-app.js b/public/js/all-app.js
index 50e3ca2..7ab9092 100644
--- a/public/js/all-app.js
+++ b/public/js/all-app.js
@@ -492,7 +492,7 @@
 else if(user_fmt=='dd/mm/yyyy'){var d=d.split('/');return d[2]+'-'+d[1]+'-'+d[0];}
 else if(user_fmt=='yyyy-mm-dd'){return d;}
 else if(user_fmt=='mm/dd/yyyy'){var d=d.split('/');return d[2]+'-'+d[0]+'-'+d[1];}
-else if(user_fmt=='mm-dd-yyyy'){var d=d.split('-');return d[2]+'-'+d[0]+'-'+d[1];}},global_date_format:function(d){if(d.substr)d=this.str_to_obj(d);return nth(d.getDate())+' '+month_list_full[d.getMonth()]+' '+d.getFullYear();},get_today:function(){var today=new Date();var m=(today.getMonth()+1)+'';if(m.length==1)m='0'+m;var d=today.getDate()+'';if(d.length==1)d='0'+d;return today.getFullYear()+'-'+m+'-'+d;},get_cur_time:function(){var d=new Date();var hh=d.getHours()+''
+else if(user_fmt=='mm-dd-yyyy'){var d=d.split('-');return d[2]+'-'+d[0]+'-'+d[1];}},user_to_obj:function(d){return dateutil.str_to_obj(dateutil.user_to_str(d));},global_date_format:function(d){if(d.substr)d=this.str_to_obj(d);return nth(d.getDate())+' '+month_list_full[d.getMonth()]+' '+d.getFullYear();},get_today:function(){var today=new Date();var m=(today.getMonth()+1)+'';if(m.length==1)m='0'+m;var d=today.getDate()+'';if(d.length==1)d='0'+d;return today.getFullYear()+'-'+m+'-'+d;},get_cur_time:function(){var d=new Date();var hh=d.getHours()+''
 var mm=cint(d.getMinutes()/5)*5+''
 return(hh.length==1?'0'+hh:hh)+':'+(mm.length==1?'0'+mm:mm);}}
 wn.datetime.only_date=function(val){if(val==null||val=='')return null;if(val.search(':')!=-1){var tmp=val.split(' ');var d=tmp[0].split('-');}else{var d=val.split('-');}
@@ -857,7 +857,7 @@
 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.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">\
+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"),changeYear:true,}).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 2454dde..33c47a2 100644
--- a/public/js/all-web.js
+++ b/public/js/all-web.js
@@ -379,7 +379,7 @@
 else if(user_fmt=='dd/mm/yyyy'){var d=d.split('/');return d[2]+'-'+d[1]+'-'+d[0];}
 else if(user_fmt=='yyyy-mm-dd'){return d;}
 else if(user_fmt=='mm/dd/yyyy'){var d=d.split('/');return d[2]+'-'+d[0]+'-'+d[1];}
-else if(user_fmt=='mm-dd-yyyy'){var d=d.split('-');return d[2]+'-'+d[0]+'-'+d[1];}},global_date_format:function(d){if(d.substr)d=this.str_to_obj(d);return nth(d.getDate())+' '+month_list_full[d.getMonth()]+' '+d.getFullYear();},get_today:function(){var today=new Date();var m=(today.getMonth()+1)+'';if(m.length==1)m='0'+m;var d=today.getDate()+'';if(d.length==1)d='0'+d;return today.getFullYear()+'-'+m+'-'+d;},get_cur_time:function(){var d=new Date();var hh=d.getHours()+''
+else if(user_fmt=='mm-dd-yyyy'){var d=d.split('-');return d[2]+'-'+d[0]+'-'+d[1];}},user_to_obj:function(d){return dateutil.str_to_obj(dateutil.user_to_str(d));},global_date_format:function(d){if(d.substr)d=this.str_to_obj(d);return nth(d.getDate())+' '+month_list_full[d.getMonth()]+' '+d.getFullYear();},get_today:function(){var today=new Date();var m=(today.getMonth()+1)+'';if(m.length==1)m='0'+m;var d=today.getDate()+'';if(d.length==1)d='0'+d;return today.getFullYear()+'-'+m+'-'+d;},get_cur_time:function(){var d=new Date();var hh=d.getHours()+''
 var mm=cint(d.getMinutes()/5)*5+''
 return(hh.length==1?'0'+hh:hh)+':'+(mm.length==1?'0'+mm:mm);}}
 wn.datetime.only_date=function(val){if(val==null||val=='')return null;if(val.search(':')!=-1){var tmp=val.split(' ');var d=tmp[0].split('-');}else{var d=val.split('-');}
@@ -516,7 +516,7 @@
 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.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">\
+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"),changeYear:true,}).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">\
