diff --git a/erpnext/accounts/search_criteria/trial_balance/trial_balance.py b/erpnext/accounts/search_criteria/trial_balance/trial_balance.py
index fb168e5..994a5b8 100644
--- a/erpnext/accounts/search_criteria/trial_balance/trial_balance.py
+++ b/erpnext/accounts/search_criteria/trial_balance/trial_balance.py
@@ -1,13 +1,13 @@
 # Columns
 #----------
-cl = [['Account','Data', '200px'],['Debit/Credit', 'Data', '100px'], ['Group/Ledger', 'Data', '100px'], ['Is PL Account', 'Data', '100px'], ['Opening','Data', '100px'],['Debit', 'Data', '100px'],['Credit', 'Data', '100px'],['Closing', 'Data', '100px']]
+cl = [['Account','Data', '200px'],['Debit/Credit', 'Data', '100px'], ['Group/Ledger', 'Data', '100px'], ['Is PL Account', 'Data', '100px'], ['Opening (Dr)','Data', '100px'], ['Opening (Cr)','Data', '100px'],['Debit', 'Data', '100px'],['Credit', 'Data', '100px'],['Closing (Dr)', 'Data', '100px'],['Closing (Cr)', 'Data', '100px']]
 for c in cl:
 	colnames.append(c[0])
 	coltypes.append(c[1])
 	colwidths.append(c[2])
 	coloptions.append('')
 	col_idx[c[0]] = len(colnames)-1
-	
+
 # transaction date
 # ------------------
 if not filter_values.get('transaction_date') or not filter_values.get('transaction_date1'):
@@ -23,7 +23,7 @@
 	msgprint("From Date and To Date must be within same year")
 	raise Exception
 
-# get year of the from date and to date 
+# get year of the from date and to date
 # --------------------------------------
 from_date_year = sql("select name from `tabFiscal Year` where %s between year_start_date and date_sub(date_add(year_start_date,interval 1 year), interval 1 day)",add_days(from_date, -1))
 from_date_year = from_date_year and from_date_year[0][0] or ''
@@ -33,11 +33,17 @@
 
 # if output is more than 500 lines then it will ask to export
 # ------------------------------------------------------------
-if len(res) > 500	and from_export == 0:
+if len(res) > 1000	and from_export == 0:
 	msgprint("This is a very large report and cannot be shown in the browser as it is likely to make your browser very slow.Please click on 'Export' to open in a spreadsheet")
 	raise Exception
+	
 
-total_debit, total_credit = 0,0
+acc_dict = {}
+for t in sql("select name, debit_or_credit, is_pl_account, lft, rgt, group_or_ledger from tabAccount where docstatus != 2 and company = %s", filter_values['company']):
+	acc_dict[t[0]] = [t[1], t[2], t[3], t[4], t[5]]
+
+
+total_debit, total_credit,	total_opening_dr, total_opening_cr, total_closing_dr, total_closing_cr = 0, 0, 0, 0, 0, 0
 glc = get_obj('GL Control')
 
 # Main logic
@@ -45,47 +51,55 @@
 for r in res:
 	# Fetch account details
 	acc = r[col_idx['Account']].strip()
-	acc_det = sql("select debit_or_credit, is_pl_account, lft, rgt, group_or_ledger from tabAccount where name = '%s'" % acc)
-	r.append(acc_det[0][0])
-	r.append(acc_det[0][4])
-	r.append(acc_det[0][1])
+	r.append(acc_dict[acc][0])
+	r.append(acc_dict[acc][4])
+	r.append(acc_dict[acc][1])
 	
 	#if shows group and ledger both but without group balance
-	if filter_values.get('show_group_ledger') == 'Both But Without Group Balance' and acc_det[0][4] == 'Group':
+	if filter_values.get('show_group_ledger') == 'Both But Without Group Balance' and acc_dict[acc][4] == 'Group':
 		for i in range(4):
 			r.append('')
 		continue
 
-	# opening balance
-	if from_date_year:
-		debit_on_fromdate, credit_on_fromdate, opening = glc.get_as_on_balance(acc, from_date_year, add_days(from_date, -1), acc_det[0][0], acc_det[0][2], acc_det[0][3])
-	else: # if there is no previous year in system
-		debit_on_fromdate, credit_on_fromdate, opening = 0, 0, 0
+	# Opening Balance
+	#-----------------------------
+	if from_date_year == to_date_year:
+		debit_on_fromdate, credit_on_fromdate, opening = glc.get_as_on_balance(acc, from_date_year, add_days(from_date, -1), acc_dict[acc][0], acc_dict[acc][2], acc_dict[acc][3]) # opening = closing of prev_date
+	elif acc_dict[acc][1] == 'No': # if there is no previous year in system and not pl account
+		opening = sql("select opening from `tabAccount Balance` where account = %s and period = %s", (acc, to_date_year))
+		debit_on_fromdate, credit_on_fromdate, opening = 0, 0, flt(opening[0][0])
+	else: # if pl account and there is no previous year in system
+		debit_on_fromdate, credit_on_fromdate, opening = 0,0,0
 
 	# closing balance
-	debit_on_todate, credit_on_todate, closing = glc.get_as_on_balance(acc, to_date_year, to_date, acc_det[0][0], acc_det[0][2], acc_det[0][3])
+	#--------------------------------
+	debit_on_todate, credit_on_todate, closing = glc.get_as_on_balance(acc, to_date_year, to_date, acc_dict[acc][0], acc_dict[acc][2], acc_dict[acc][3])
 
 	# transaction betn the period
-	if from_date_year == to_date_year:
-		debit = flt(debit_on_todate) - flt(debit_on_fromdate)
-		credit = flt(credit_on_todate) - flt(credit_on_fromdate)
-	else: # if from date is start date of the year
-		debit = flt(debit_on_todate)
-		credit = flt(credit_on_todate)
-		
+	#----------------------------------------
+
+	debit = flt(debit_on_todate) - flt(debit_on_fromdate)
+	credit = flt(credit_on_todate) - flt(credit_on_fromdate)
+	
+	# Debit / Credit
+	if acc_dict[acc][0] == 'Credit':
+		opening, closing = -1*opening, -1*closing
+
+	# Totals
+	total_opening_dr += opening>0 and flt(opening) or 0
+	total_opening_cr += opening<0 and -1*flt(opening) or 0
 	total_debit += debit
 	total_credit += credit
-
-	if acc_det[0][1] == 'Yes' and from_date_year != to_date_year:
-		opening = 0
-
-	if acc_det[0][0] == 'Credit':
-		opening, closing = -1*opening, -1*closing
+	total_closing_dr += closing>0 and flt(closing) or 0
+	total_closing_cr += closing<0 and -1*flt(closing) or 0
 	
-	r.append(flt(opening))
+	# Append in rows
+	r.append(flt(opening>0 and opening or 0))
+	r.append(flt(opening<0 and -opening or 0))
 	r.append(flt(debit))
 	r.append(flt(credit))
-	r.append(flt(closing))
+	r.append(flt(closing>0 and closing or 0))
+	r.append(flt(closing<0 and -closing or 0))
 
 
 out =[]
@@ -94,14 +108,18 @@
 	# ------------------------------------------------------------------
 	if filter_values.get('show_zero_balance') != 'No':
 		out.append(r)
-	elif r[col_idx['Opening']] or r[col_idx['Debit']] or r[col_idx['Credit']] or r[col_idx['Closing']] or (r[col_idx['Group/Ledger']] == 'Group' and filter_values.get('show_group_ledger') == 'Both But Without Group Balance'):
+	elif r[col_idx['Opening (Dr)']] or r[col_idx['Opening (Cr)']] or r[col_idx['Debit']] or r[col_idx['Credit']] or r[col_idx['Closing (Dr)']] or r[col_idx['Closing (Cr)']] or (r[col_idx['Group/Ledger']] == 'Group' and filter_values.get('show_group_ledger') == 'Both But Without Group Balance'):
 		out.append(r)
-		
+
 # Total Debit / Credit
 # --------------------------
 if filter_values.get('show_group_ledger') in ['Only Ledgers', 'Both But Without Group Balance']:
 	t_row = ['' for i in range(len(colnames))]
 	t_row[col_idx['Account']] = 'Total'
-	t_row[col_idx['Debit']] = total_debit
-	t_row[col_idx['Credit']] = total_credit
+	t_row[col_idx['Opening (Dr)']] = '%.2f' % total_opening_dr
+	t_row[col_idx['Opening (Cr)']] = '%.2f' % total_opening_cr
+	t_row[col_idx['Debit']] = '%.2f' % total_debit
+	t_row[col_idx['Credit']] = '%.2f' % total_credit
+	t_row[col_idx['Closing (Dr)']] = '%.2f' % total_closing_dr
+	t_row[col_idx['Closing (Cr)']] = '%.2f' % total_closing_cr
 	out.append(t_row)
