diff --git a/erpnext/accounts/doctype/fiscal_year/fiscal_year.json b/erpnext/accounts/doctype/fiscal_year/fiscal_year.json
index dcd5a76..0f7aefd 100644
--- a/erpnext/accounts/doctype/fiscal_year/fiscal_year.json
+++ b/erpnext/accounts/doctype/fiscal_year/fiscal_year.json
@@ -55,7 +55,7 @@
  ], 
  "icon": "icon-calendar", 
  "idx": 1, 
- "modified": "2014-05-27 03:49:10.942338", 
+ "modified": "2014-07-14 05:30:56.843180", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Fiscal Year", 
@@ -82,5 +82,7 @@
    "read": 1, 
    "role": "All"
   }
- ]
+ ], 
+ "sort_field": "name", 
+ "sort_order": "DESC"
 }
\ No newline at end of file
diff --git a/erpnext/accounts/report/balance_sheet/__init__.py b/erpnext/accounts/report/balance_sheet/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/accounts/report/balance_sheet/__init__.py
diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.js b/erpnext/accounts/report/balance_sheet/balance_sheet.js
new file mode 100644
index 0000000..9bdd298
--- /dev/null
+++ b/erpnext/accounts/report/balance_sheet/balance_sheet.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+// License: GNU General Public License v3. See license.txt
+
+frappe.query_reports["Balance Sheet"] = {
+	"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
+		},
+		{
+			"fieldname": "periodicity",
+			"label": __("Periodicity"),
+			"fieldtype": "Select",
+			"options": "Yearly\nQuarterly\nMonthly",
+			"default": "Yearly",
+			"reqd": 1
+		}
+	]
+}
diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.json b/erpnext/accounts/report/balance_sheet/balance_sheet.json
new file mode 100644
index 0000000..af299bb
--- /dev/null
+++ b/erpnext/accounts/report/balance_sheet/balance_sheet.json
@@ -0,0 +1,15 @@
+{
+ "apply_user_permissions": 1, 
+ "creation": "2014-07-14 05:24:20.385279", 
+ "docstatus": 0, 
+ "doctype": "Report", 
+ "is_standard": "Yes", 
+ "modified": "2014-07-14 05:24:20.385279", 
+ "modified_by": "Administrator", 
+ "module": "Accounts", 
+ "name": "Balance Sheet", 
+ "owner": "Administrator", 
+ "ref_doctype": "GL Entry", 
+ "report_name": "Balance Sheet", 
+ "report_type": "Script Report"
+}
\ 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
new file mode 100644
index 0000000..dc71e92
--- /dev/null
+++ b/erpnext/accounts/report/balance_sheet/balance_sheet.py
@@ -0,0 +1,99 @@
+# 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 cstr, flt
+from frappe import _
+
+def execute(filters=None):
+	company = filters.company
+	fiscal_year = filters.fiscal_year
+	depth = 3
+	end_date = frappe.db.get_value("Fiscal Year", fiscal_year, "year_end_date")
+
+	for root_type, balance_must_be in (("Asset", "Debit"), ("Liability", "Credit"), ("Equity", "Credit")):
+		accounts, account_gl_entries = get_accounts_and_gl_entries(root_type, company, end_date)
+		if accounts:
+			accounts, accounts_map = filter_accounts(accounts, depth=depth)
+
+			for d in accounts:
+				d.debit = d.credit = 0
+				for account_name in ([d.name] + (d.invisible_children or [])):
+					for each in account_gl_entries.get(account_name, []):
+						d.debit += flt(each.debit)
+						d.credit += flt(each.credit)
+
+			for d in reversed(accounts):
+				if d.parent_account:
+					accounts_map[d.parent_account]["debit"] += d.debit
+					accounts_map[d.parent_account]["credit"] += d.credit
+
+			for d in accounts:
+				d.balance = d["debit"] - d["credit"]
+				if d.balance:
+					d.balance *= (1 if balance_must_be=="Debit" else -1)
+				print (" " * d["indent"] * 2) + d["account_name"], d["balance"], balance_must_be
+
+	return [], []
+
+def get_accounts_and_gl_entries(root_type, company, end_date):
+	# root lft, rgt
+	root_account = frappe.db.sql("""select lft, rgt from `tabAccount`
+		where company=%s and root_type=%s order by lft limit 1""",
+		(company, root_type), as_dict=True)
+
+	if not root_account:
+		return None, None
+
+	lft, rgt = root_account[0].lft, root_account[0].rgt
+
+	accounts = frappe.db.sql("""select * from `tabAccount`
+		where company=%(company)s and lft >= %(lft)s and rgt <= %(rgt)s order by lft""",
+		{ "company": company, "lft": lft, "rgt": rgt }, as_dict=True)
+
+	gl_entries = frappe.db.sql("""select * from `tabGL Entry`
+		where company=%(company)s
+		and posting_date <= %(end_date)s
+		and account in (select name from `tabAccount`
+			where lft >= %(lft)s and rgt <= %(rgt)s)""",
+		{
+			"company": company,
+			"end_date": end_date,
+			"lft": lft,
+			"rgt": rgt
+		},
+		as_dict=True)
+
+	account_gl_entries = {}
+	for entry in gl_entries:
+		account_gl_entries.setdefault(entry.account, []).append(entry)
+
+	return accounts, account_gl_entries
+
+def filter_accounts(accounts, depth):
+	parent_children_map = {}
+	accounts_map = {}
+	for d in accounts:
+		accounts_map[d.name] = d
+		parent_children_map.setdefault(d.parent_account or None, []).append(d)
+
+	data = []
+	def add_to_data(parent, level):
+		if level < depth:
+			for child in (parent_children_map.get(parent) or []):
+				child.indent = level
+				data.append(child)
+				add_to_data(child.name, level + 1)
+
+		else:
+			# include all children at level lower than the depth
+			parent_account = accounts_map[parent]
+			parent_account["invisible_children"] = []
+			for d in accounts:
+				if d.lft > parent_account.lft and d.rgt < parent_account.rgt:
+					parent_account["invisible_children"].append(d.name)
+
+	add_to_data(None, 0)
+
+	return data, accounts_map
