diff --git a/erpnext/accounts/page/trial_balance/README.md b/erpnext/accounts/page/trial_balance/README.md
deleted file mode 100644
index cba659d..0000000
--- a/erpnext/accounts/page/trial_balance/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Period wise opening and closing balance of all transactions.
\ No newline at end of file
diff --git a/erpnext/accounts/page/trial_balance/__init__.py b/erpnext/accounts/page/trial_balance/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/erpnext/accounts/page/trial_balance/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/erpnext/accounts/page/trial_balance/trial_balance.js b/erpnext/accounts/page/trial_balance/trial_balance.js
deleted file mode 100644
index 2edf822..0000000
--- a/erpnext/accounts/page/trial_balance/trial_balance.js
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.require("assets/erpnext/js/account_tree_grid.js");
-
-frappe.pages['trial-balance'].onload = function(wrapper) {
-	frappe.ui.make_app_page({
-		parent: wrapper,
-		title: __('Trial Balance'),
-		single_column: true
-	});
-	var TrialBalance = erpnext.AccountTreeGrid.extend({
-		init: function(wrapper, title) {
-			var me = this;
-			this._super(wrapper, title);
-
-			// period closing entry checkbox
-			this.wrapper.bind("make", function() {
-				$('<div style="margin: 10px 0px; "\
-				 	class="with_period_closing_entry"><input type="checkbox" checked="checked">' +
-						__("With period closing entry") + '</div>')
-					.appendTo(me.wrapper)
-					.find("input").click(function() { me.refresh(); });
-			});
-		},
-
-		prepare_balances: function() {
-			// store value of with closing entry
-			this.with_period_closing_entry = this.wrapper
-				.find(".with_period_closing_entry input:checked").length;
-			this._super();
-			this.add_total_debit_credit();
-		},
-
-		update_balances: function(account, posting_date, v) {
-			// for period closing voucher,
-			// only consider them when adding "With Closing Entry is checked"
-			if(v.voucher_type === "Period Closing Voucher") {
-				if(this.with_period_closing_entry) {
-					this._super(account, posting_date, v);
-				}
-			} else {
-				this._super(account, posting_date, v);
-			}
-		},
-
-		add_total_debit_credit: function() {
-			var me = this;
-
-			var total_row = {
-				company: me.company,
-				id: "Total Debit / Credit",
-				name: "Total Debit / Credit",
-				indent: 0,
-				opening_dr: "NA",
-				opening_cr: "NA",
-				debit: 0,
-				credit: 0,
-				checked: false,
-			};
-			me.item_by_name[total_row.name] = total_row;
-
-			$.each(this.data, function(i, account) {
-				if((account.group_or_ledger == "Ledger") || (account.rgt - account.lft == 1)) {
-					total_row["debit"] += account.debit;
-					total_row["credit"] += account.credit;
-				}
-			});
-
-			this.data.push(total_row);
-		}
-	})
-	erpnext.trial_balance = new TrialBalance(wrapper, 'Trial Balance');
-
-
-	wrapper.appframe.add_module_icon("Accounts")
-
-}
diff --git a/erpnext/accounts/page/trial_balance/trial_balance.json b/erpnext/accounts/page/trial_balance/trial_balance.json
deleted file mode 100644
index 72fb981..0000000
--- a/erpnext/accounts/page/trial_balance/trial_balance.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "creation": "2013-01-27 16:30:52.000000", 
- "docstatus": 0, 
- "doctype": "Page", 
- "icon": "icon-table", 
- "idx": 1, 
- "modified": "2013-07-11 14:44:49.000000", 
- "modified_by": "Administrator", 
- "module": "Accounts", 
- "name": "trial-balance", 
- "owner": "Administrator", 
- "page_name": "trial-balance", 
- "roles": [
-  {
-   "role": "Analytics"
-  }, 
-  {
-   "role": "Accounts Manager"
-  }
- ], 
- "standard": "Yes", 
- "title": "Trial Balance"
-}
\ No newline at end of file
diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.py b/erpnext/accounts/report/balance_sheet/balance_sheet.py
index 4edc9b9..384e15b 100644
--- a/erpnext/accounts/report/balance_sheet/balance_sheet.py
+++ b/erpnext/accounts/report/balance_sheet/balance_sheet.py
@@ -5,15 +5,14 @@
 import frappe
 from frappe import _
 from frappe.utils import flt
-from erpnext.accounts.report.financial_statements import (process_filters, get_period_list, get_columns, get_data)
+from erpnext.accounts.report.financial_statements import (get_period_list, get_columns, get_data)
 
 def execute(filters=None):
-	process_filters(filters)
 	period_list = get_period_list(filters.fiscal_year, filters.periodicity, from_beginning=True)
 
-	asset = get_data(filters.company, "Asset", "Debit", period_list, filters.depth)
-	liability = get_data(filters.company, "Liability", "Credit", period_list, filters.depth)
-	equity = get_data(filters.company, "Equity", "Credit", period_list, filters.depth)
+	asset = get_data(filters.company, "Asset", "Debit", period_list)
+	liability = get_data(filters.company, "Liability", "Credit", period_list)
+	equity = get_data(filters.company, "Equity", "Credit", period_list)
 	provisional_profit_loss = get_provisional_profit_loss(asset, liability, equity, period_list)
 
 	data = []
@@ -32,7 +31,7 @@
 		provisional_profit_loss = {
 			"account_name": _("Provisional Profit / Loss (Credit)"),
 			"account": None,
-			"is_profit_loss": True
+			"warn_if_negative": True
 		}
 
 		has_value = False
diff --git a/erpnext/accounts/report/financial_statements.html b/erpnext/accounts/report/financial_statements.html
index 403e67e..c086944 100644
--- a/erpnext/accounts/report/financial_statements.html
+++ b/erpnext/accounts/report/financial_statements.html
@@ -1,5 +1,5 @@
 {%
-	if (report.columns.length > 6) {
+	if (report.columns.length > 8) {
 		frappe.throw(__("Too many columns. Export the report and print it using a spreadsheet application."));
 	}
 %}
@@ -17,11 +17,14 @@
 <h2 class="text-center">{%= __(report.report_name) %}</h2>
 <h4 class="text-center">{%= filters.company %}</h3>
 <h4 class="text-center">{%= filters.fiscal_year %}</h3>
+{% if (filters.from_date) { %}
+	<h4 class="text-center">{%= dateutil.str_to_user(filters.from_date) %} - {%= dateutil.str_to_user(filters.to_date) %}</h3>
+{% } %}
 <hr>
 <table class="table table-bordered">
 	<thead>
 		<tr>
-			<th style="width: {%= 100 - (report.columns.length - 2) * 15 %}%"></th>
+			<th style="width: {%= 100 - (report.columns.length - 2) * 13 %}%"></th>
 			{% for(var i=2, l=report.columns.length; i<l; i++) { %}
 				<th class="text-right">{%= report.columns[i].label %}</th>
 			{% } %}
diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py
index 45d5b3a..30a0fa7 100644
--- a/erpnext/accounts/report/financial_statements.py
+++ b/erpnext/accounts/report/financial_statements.py
@@ -4,14 +4,9 @@
 from __future__ import unicode_literals
 import frappe
 from frappe import _, _dict
-from frappe.utils import (flt, cint, getdate, get_first_day, get_last_day,
+from frappe.utils import (flt, getdate, get_first_day, get_last_day,
 	add_months, add_days, formatdate)
 
-def process_filters(filters):
-	filters.depth = cint(filters.depth) or 3
-	if not filters.periodicity:
-		filters.periodicity = "Yearly"
-
 def get_period_list(fiscal_year, periodicity, from_beginning=False):
 	"""Get a list of dict {"to_date": to_date, "key": key, "label": label}
 		Periodicity can be (Yearly, Quarterly, Monthly)"""
@@ -76,13 +71,13 @@
 
 	return period_list
 
-def get_data(company, root_type, balance_must_be, period_list, depth, ignore_closing_entries=False):
+def get_data(company, root_type, balance_must_be, period_list, ignore_closing_entries=False):
 	accounts = get_accounts(company, root_type)
 	if not accounts:
 		return None
 
-	accounts, accounts_by_name = filter_accounts(accounts, depth)
-	gl_entries_by_account = get_gl_entries(company, root_type, period_list[0]["from_date"], period_list[-1]["to_date"],
+	accounts, accounts_by_name = filter_accounts(accounts)
+	gl_entries_by_account = get_gl_entries(company, period_list[0]["from_date"], period_list[-1]["to_date"],
 		accounts[0].lft, accounts[0].rgt, ignore_closing_entries=ignore_closing_entries)
 
 	calculate_values(accounts, gl_entries_by_account, period_list)
@@ -127,8 +122,8 @@
 			"account": d.name,
 			"parent_account": d.parent_account,
 			"indent": flt(d.indent),
-			"year_start_date": year_start_date,
-			"year_end_date": year_end_date
+			"from_date": year_start_date,
+			"to_date": year_end_date
 		}
 		for period in period_list:
 			if d.get(period.key):
@@ -177,7 +172,7 @@
 
 	return accounts
 
-def filter_accounts(accounts, depth):
+def filter_accounts(accounts, depth=10):
 	parent_children_map = {}
 	accounts_by_name = {}
 	for d in accounts:
@@ -204,7 +199,7 @@
 
 	return filtered_accounts, accounts_by_name
 
-def get_gl_entries(company, root_type, from_date, to_date, root_lft, root_rgt, ignore_closing_entries=False):
+def get_gl_entries(company, from_date, to_date, root_lft, root_rgt, ignore_closing_entries=False):
 	"""Returns a dict like { "account": [gl entries], ... }"""
 	additional_conditions = []
 
diff --git a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py
index 3a3123fc..3df0c9b 100644
--- a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py
+++ b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.py
@@ -5,14 +5,13 @@
 import frappe
 from frappe import _
 from frappe.utils import flt
-from erpnext.accounts.report.financial_statements import (process_filters, get_period_list, get_columns, get_data)
+from erpnext.accounts.report.financial_statements import (get_period_list, get_columns, get_data)
 
 def execute(filters=None):
-	process_filters(filters)
 	period_list = get_period_list(filters.fiscal_year, filters.periodicity)
 
-	income = get_data(filters.company, "Income", "Credit", period_list, filters.depth, ignore_closing_entries=True)
-	expense = get_data(filters.company, "Expense", "Debit", period_list, filters.depth, ignore_closing_entries=True)
+	income = get_data(filters.company, "Income", "Credit", period_list, ignore_closing_entries=True)
+	expense = get_data(filters.company, "Expense", "Debit", period_list, ignore_closing_entries=True)
 	net_profit_loss = get_net_profit_loss(income, expense, period_list)
 
 	data = []
@@ -30,7 +29,7 @@
 		net_profit_loss = {
 			"account_name": _("Net Profit / Loss"),
 			"account": None,
-			"is_profit_loss": True
+			"warn_if_negative": True
 		}
 
 		for period in period_list:
diff --git a/erpnext/accounts/report/trial_balance/__init__.py b/erpnext/accounts/report/trial_balance/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/accounts/report/trial_balance/__init__.py
diff --git a/erpnext/accounts/report/trial_balance/trial_balance.html b/erpnext/accounts/report/trial_balance/trial_balance.html
new file mode 100644
index 0000000..d4ae54d
--- /dev/null
+++ b/erpnext/accounts/report/trial_balance/trial_balance.html
@@ -0,0 +1 @@
+{% include "accounts/report/financial_statements.html" %}
diff --git a/erpnext/accounts/report/trial_balance/trial_balance.js b/erpnext/accounts/report/trial_balance/trial_balance.js
new file mode 100644
index 0000000..5050dba
--- /dev/null
+++ b/erpnext/accounts/report/trial_balance/trial_balance.js
@@ -0,0 +1,65 @@
+// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+// License: GNU General Public License v3. See license.txt
+
+frappe.require("assets/erpnext/js/financial_statements.js");
+
+frappe.query_reports["Trial Balance"] = {
+	"filters": [
+		{
+			"fieldname": "company",
+			"label": __("Company"),
+			"fieldtype": "Link",
+			"options": "Company",
+			"default": frappe.defaults.get_user_default("company"),
+			"reqd": 1
+		},
+		{
+			"fieldname": "fiscal_year",
+			"label": __("Fiscal Year"),
+			"fieldtype": "Link",
+			"options": "Fiscal Year",
+			"default": frappe.defaults.get_user_default("fiscal_year"),
+			"reqd": 1,
+			"on_change": function(query_report) {
+				var fiscal_year = query_report.get_values().fiscal_year;
+				if (!fiscal_year) {
+					return;
+				}
+				frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+					var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
+					query_report.filters_by_name.from_date.set_input(fy.year_start_date);
+					query_report.filters_by_name.to_date.set_input(fy.year_end_date);
+					query_report.trigger_refresh();
+				});
+			}
+		},
+		{
+			"fieldname": "from_date",
+			"label": __("From Date"),
+			"fieldtype": "Date",
+			"default": frappe.defaults.get_user_default("year_start_date"),
+		},
+		{
+			"fieldname": "to_date",
+			"label": __("To Date"),
+			"fieldtype": "Date",
+			"default": frappe.defaults.get_user_default("year_end_date"),
+		},
+		{
+			"fieldname": "with_period_closing_entry",
+			"label": __("With Period Closing Entry"),
+			"fieldtype": "Check",
+			"default": 1
+		},
+		{
+			"fieldname": "show_zero_values",
+			"label": __("Show rows with zero values"),
+			"fieldtype": "Check"
+		},
+	],
+	"formatter": erpnext.financial_statements.formatter,
+	"tree": true,
+	"name_field": "account",
+	"parent_field": "parent_account",
+	"initial_depth": 3
+}
diff --git a/erpnext/accounts/report/trial_balance/trial_balance.json b/erpnext/accounts/report/trial_balance/trial_balance.json
new file mode 100644
index 0000000..0dbb4dc
--- /dev/null
+++ b/erpnext/accounts/report/trial_balance/trial_balance.json
@@ -0,0 +1,17 @@
+{
+ "add_total_row": 0, 
+ "apply_user_permissions": 1, 
+ "creation": "2014-07-22 11:41:23.743564", 
+ "disabled": 0, 
+ "docstatus": 0, 
+ "doctype": "Report", 
+ "is_standard": "Yes", 
+ "modified": "2014-07-22 11:41:23.743564", 
+ "modified_by": "Administrator", 
+ "module": "Accounts", 
+ "name": "Trial Balance", 
+ "owner": "Administrator", 
+ "ref_doctype": "GL Entry", 
+ "report_name": "Trial Balance", 
+ "report_type": "Script Report"
+}
\ No newline at end of file
diff --git a/erpnext/accounts/report/trial_balance/trial_balance.py b/erpnext/accounts/report/trial_balance/trial_balance.py
new file mode 100644
index 0000000..dedbef9
--- /dev/null
+++ b/erpnext/accounts/report/trial_balance/trial_balance.py
@@ -0,0 +1,216 @@
+# 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 import _
+from frappe.utils import cint, flt, getdate, formatdate
+from erpnext.accounts.report.financial_statements import filter_accounts, get_gl_entries
+
+value_fields = ("opening_debit", "opening_credit", "debit", "credit", "closing_debit", "closing_credit")
+
+def execute(filters):
+	validate_filters(filters)
+	data = get_data(filters)
+	columns = get_columns()
+	return columns, data
+
+def validate_filters(filters):
+	filters.year_start_date, filters.year_end_date = frappe.db.get_value("Fiscal Year", filters.fiscal_year,
+		["year_start_date", "year_end_date"])
+	filters.year_start_date = getdate(filters.year_start_date)
+	filters.year_end_date = getdate(filters.year_end_date)
+
+	if not filters.from_date:
+		filters.from_date = filters.year_start_date
+
+	if not filters.to_date:
+		filters.to_date = filters.year_end_date
+
+	filters.from_date = getdate(filters.from_date)
+	filters.to_date = getdate(filters.to_date)
+
+	if filters.from_date > filters.to_date:
+		frappe.throw(_("From Date cannot be greater than To Date"))
+
+	if (filters.from_date < filters.year_start_date) or (filters.from_date > filters.year_end_date):
+		frappe.msgprint(_("From Date should be within the Fiscal Year. Assuming From Date = {0}")\
+			.format(formatdate(filters.year_start_date)))
+
+		filters.from_date = filters.year_start_date
+
+	if (filters.to_date < filters.year_start_date) or (filters.to_date > filters.year_end_date):
+		frappe.msgprint(_("To Date should be within the Fiscal Year. Assuming To Date = {0}")\
+			.format(formatdate(filters.year_end_date)))
+		filters.to_date = filters.year_end_date
+
+def get_data(filters):
+	accounts = frappe.db.sql("""select * from `tabAccount` where company=%s order by lft""",
+		filters.company, as_dict=True)
+
+	if not accounts:
+		return None
+
+	accounts, accounts_by_name = filter_accounts(accounts)
+
+	min_lft, max_rgt = frappe.db.sql("""select min(lft), max(rgt) from `tabAccount`
+		where company=%s""", (filters.company,))[0]
+
+	gl_entries_by_account = get_gl_entries(filters.company, None, filters.to_date, min_lft, max_rgt,
+		ignore_closing_entries=not flt(filters.with_period_closing_entry))
+
+	total_row = calculate_values(accounts, gl_entries_by_account, filters)
+	accumulate_values_into_parents(accounts, accounts_by_name)
+
+	data = prepare_data(accounts, filters, total_row)
+
+	return data
+
+def calculate_values(accounts, gl_entries_by_account, filters):
+	init = {
+		"opening_debit": 0.0,
+		"opening_credit": 0.0,
+		"debit": 0.0,
+		"credit": 0.0,
+		"closing_debit": 0.0,
+		"closing_credit": 0.0
+	}
+
+	total_row = {
+		"account": None,
+		"account_name": _("Total"),
+		"warn_if_negative": True,
+		"debit": 0.0,
+		"credit": 0.0
+	}
+
+	for d in accounts:
+		d.update(init.copy())
+
+		for entry in gl_entries_by_account.get(d.name, []):
+			posting_date = getdate(entry.posting_date)
+
+			# opening
+			if posting_date < filters.from_date:
+				is_valid_opening = (d.root_type in ("Asset", "Liability", "Equity") or
+					(filters.year_start_date <= posting_date < filters.from_date))
+
+				if is_valid_opening:
+					d["opening_debit"] += flt(entry.debit)
+					d["opening_credit"] += flt(entry.credit)
+
+			elif posting_date <= filters.to_date:
+
+				if entry.is_opening == "Yes" and d.root_type in ("Asset", "Liability", "Equity"):
+					d["opening_debit"] += flt(entry.debit)
+					d["opening_credit"] += flt(entry.credit)
+
+				else:
+					d["debit"] += flt(entry.debit)
+					d["credit"] += flt(entry.credit)
+
+		total_row["debit"] += d["debit"]
+		total_row["credit"] += d["credit"]
+
+	return total_row
+
+def accumulate_values_into_parents(accounts, accounts_by_name):
+	for d in reversed(accounts):
+		if d.parent_account:
+			for key in value_fields:
+				accounts_by_name[d.parent_account][key] += d[key]
+
+def prepare_data(accounts, filters, total_row):
+	show_zero_values = cint(filters.show_zero_values)
+	data = []
+	for i, d in enumerate(accounts):
+		has_value = False
+		row = {
+			"account_name": d.account_name,
+			"account": d.name,
+			"parent_account": d.parent_account,
+			"indent": d.indent,
+			"from_date": filters.from_date,
+			"to_date": filters.to_date
+		}
+
+		prepare_opening_and_closing(d)
+
+		for key in value_fields:
+			row[key] = d.get(key, 0.0)
+			if row[key]:
+				has_value = True
+
+		if has_value or show_zero_values:
+			data.append(row)
+
+	data.extend([{},total_row])
+
+	return data
+
+def get_columns():
+	return [
+		{
+			"fieldname": "account",
+			"label": _("Account"),
+			"fieldtype": "Link",
+			"options": "Account",
+			"width": 300
+		},
+		{
+			"fieldname": "opening_debit",
+			"label": _("Opening (Dr)"),
+			"fieldtype": "Currency",
+			"width": 120
+		},
+		{
+			"fieldname": "opening_credit",
+			"label": _("Opening (Cr)"),
+			"fieldtype": "Currency",
+			"width": 120
+		},
+		{
+			"fieldname": "debit",
+			"label": _("Debit"),
+			"fieldtype": "Currency",
+			"width": 120
+		},
+		{
+			"fieldname": "credit",
+			"label": _("Credit"),
+			"fieldtype": "Currency",
+			"width": 120
+		},
+		{
+			"fieldname": "closing_debit",
+			"label": _("Closing (Dr)"),
+			"fieldtype": "Currency",
+			"width": 120
+		},
+		{
+			"fieldname": "closing_credit",
+			"label": _("Closing (Cr)"),
+			"fieldtype": "Currency",
+			"width": 120
+		}
+	]
+
+def prepare_opening_and_closing(d):
+	d["closing_debit"] = d["opening_debit"] + d["debit"]
+	d["closing_credit"] = d["opening_credit"] + d["credit"]
+
+	if d["closing_debit"] > d["closing_credit"]:
+		d["closing_debit"] -= d["closing_credit"]
+		d["closing_credit"] = 0.0
+
+	else:
+		d["closing_credit"] -= d["closing_debit"]
+		d["closing_debit"] = 0.0
+
+	if d["opening_debit"] > d["opening_credit"]:
+		d["opening_debit"] -= d["opening_credit"]
+		d["opening_credit"] = 0.0
+
+	else:
+		d["opening_credit"] -= d["opening_debit"]
+		d["opening_debit"] = 0.0
diff --git a/erpnext/config/accounts.py b/erpnext/config/accounts.py
index f52cea9..646d596 100644
--- a/erpnext/config/accounts.py
+++ b/erpnext/config/accounts.py
@@ -166,10 +166,10 @@
 					"is_query_report": True,
 				},
 				{
-					"type": "page",
-					"name": "trial-balance",
-					"label": _("Trial Balance"),
-					"icon": "icon-table"
+					"type": "report",
+					"name": "Trial Balance",
+					"doctype": "GL Entry",
+					"is_query_report": True,
 				},
 				{
 					"type": "report",
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 5ac1da1..5c64213 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -70,4 +70,5 @@
 erpnext.patches.v4_1.fix_delivery_and_billing_status
 execute:frappe.db.sql("update `tabAccount` set root_type='Liability' where root_type='Income' and report_type='Balance Sheet'")
 execute:frappe.delete_doc("DocType", "Payment to Invoice Matching Tool")
-execute:frappe.delete_doc("DocType", "Payment to Invoice Matching Tool Detail")
\ No newline at end of file
+execute:frappe.delete_doc("DocType", "Payment to Invoice Matching Tool Detail")
+execute:frappe.delete_doc("Page", "trial-balance") #2014-07-22
diff --git a/erpnext/public/js/financial_statements.js b/erpnext/public/js/financial_statements.js
index 5e3ba0e..9a1a05a 100644
--- a/erpnext/public/js/financial_statements.js
+++ b/erpnext/public/js/financial_statements.js
@@ -25,34 +25,21 @@
 			"options": "Yearly\nHalf-yearly\nQuarterly\nMonthly",
 			"default": "Yearly",
 			"reqd": 1
-		},
-		{
-			"fieldname": "depth",
-			"label": __("Depth"),
-			"fieldtype": "Select",
-			"options": "3\n4\n5",
-			"default": "3"
 		}
 	],
-	"formatter": function(row, cell, value, columnDef, dataContext) {
+	"formatter": function(row, cell, value, columnDef, dataContext, default_formatter) {
 		if (columnDef.df.fieldname=="account") {
-			var link = $("<a></a>")
-				.text(dataContext.account_name)
-				.attr("onclick", "erpnext.financial_statements.open_general_ledger(" + JSON.stringify(dataContext) + ")");
+			value = dataContext.account_name;
 
-			var span = $("<span></span>")
-				.css("padding-left", (cint(dataContext.indent) * 21) + "px")
-				.append(link);
-
-			value = span.wrap("<p></p>").parent().html();
-
-		} else {
-			value = erpnext.financial_statements.default_formatter(row, cell, value, columnDef, dataContext);
+			columnDef.df.link_onclick = "erpnext.financial_statements.open_general_ledger(" + JSON.stringify(dataContext) + ")";
+			columnDef.df.is_tree = true;
 		}
 
+		value = default_formatter(row, cell, value, columnDef, dataContext);
+
 		if (!dataContext.parent_account) {
 			var $value = $(value).css("font-weight", "bold");
-			if (dataContext.is_profit_loss && dataContext[columnDef.df.fieldname] < 0) {
+			if (dataContext.warn_if_negative && dataContext[columnDef.df.fieldname] < 0) {
 				$value.addClass("text-danger");
 			}
 
@@ -67,9 +54,13 @@
 		frappe.route_options = {
 			"account": data.account,
 			"company": frappe.query_report.filters_by_name.company.get_value(),
-			"from_date": data.year_start_date,
-			"to_date": data.year_end_date
+			"from_date": data.from_date,
+			"to_date": data.to_date
 		};
 		frappe.set_route("query-report", "General Ledger");
-	}
+	},
+	"tree": true,
+	"name_field": "account",
+	"parent_field": "parent_account",
+	"initial_depth": 3
 };
