diff --git a/accounts/page/general_ledger/general_ledger.js b/accounts/page/general_ledger/general_ledger.js
index cee749f..289111f 100644
--- a/accounts/page/general_ledger/general_ledger.js
+++ b/accounts/page/general_ledger/general_ledger.js
@@ -95,6 +95,7 @@
 		{fieldtype:"Date", label: "To Date", filter: function(val, item) {
 			return dateutil.str_to_obj(val) >= dateutil.str_to_obj(item.posting_date);
 		}},
+		{fieldtype: "Check", label: "Group by Ledger"},
 		{fieldtype:"Button", label: "Refresh", icon:"icon-refresh icon-white", cssClass:"btn-info"},
 		{fieldtype:"Button", label: "Reset Filters"}
 	],
@@ -108,6 +109,13 @@
 			me.setup_account_filter(this);
 			me.filter_inputs.refresh.click();
 		});
+
+		this.filter_inputs.account && this.filter_inputs.group_by_ledger 
+			&& this.filter_inputs.account.change(function() {
+				me.make_account_by_name();
+				me.filter_inputs.group_by_ledger.parent()
+					.toggle(!!(me.account_by_name[$(this).val()] && me.account_by_name[$(this).val()].group_or_ledger==="Group"));
+			});
 	},
 	setup_account_filter: function(company_filter) {
 		var me = this;
@@ -128,10 +136,12 @@
 	init_filter_values: function() {
 		this._super();
 		this.filter_inputs.company.change();
+		this.filter_inputs.account.change();
 	},
 	apply_filters_from_route: function() {
 		this._super();
 		this.filter_inputs.company.change();
+		this.filter_inputs.account.change();
 	},
 	make_accounts_by_company: function() {
 		var accounts_by_company = {};
@@ -155,10 +165,7 @@
 		var data = wn.report_dump.data["GL Entry"];
 		var out = [];
 		
-		if(!this.account_by_name) {
-			this.account_by_name = this.make_name_map(wn.report_dump.data["Account"]);
-			this.make_voucher_acconuts_map();
-		}
+		this.make_account_by_name();
 		
 		var me = this;
 		
@@ -170,27 +177,40 @@
 			return;
 		}
 		
-		var opening = {
-			account: "Opening", debit: 0.0, credit: 0.0, 
-				id:"_opening", _show: true, _style: "font-weight: bold"
-		}
-		var totals = {
-			account: "Totals", debit: 0.0, credit: 0.0, 
-				id:"_totals", _show: true, _style: "font-weight: bold"
-		}
-		
+		var opening = this.make_summary_row("Opening", this.account);
+		var totals = this.make_summary_row("Totals", this.account);
+
+		var grouped_ledgers = {};
+
 		$.each(data, function(i, item) {
 			if((me.is_default("company") ? true : me.apply_filter(item, "company")) &&
 				(me.account ? me.is_child_account(me.account, item.account) 
 				: true) && (me.voucher_no ? item.voucher_no==me.voucher_no : true)) {
 				var date = dateutil.str_to_obj(item.posting_date);
-				
+
+				// create grouping by ledger
+				if(!grouped_ledgers[item.account]) {
+					grouped_ledgers[item.account] = {
+						entries: [],
+						opening: me.make_summary_row("Opening", item.account),
+						totals: me.make_summary_row("Totals", item.account),
+						closing: me.make_summary_row("Closing (Opening + Totals)",
+							item.account)
+					};
+				}
+
 				if(date < from_date || item.is_opening=="Yes") {
 					opening.debit += item.debit;
 					opening.credit += item.credit;
+
+					grouped_ledgers[item.account].opening.debit += item.debit;
+					grouped_ledgers[item.account].opening.credit += item.credit;
 				} else if(date <= to_date) {
 					totals.debit += item.debit;
 					totals.credit += item.credit;
+
+					grouped_ledgers[item.account].totals.debit += item.debit;
+					grouped_ledgers[item.account].totals.credit += item.credit;
 				}
 
 				if(me.account) {
@@ -200,19 +220,23 @@
 
 				if(me.apply_filters(item) && item.is_opening=="No") {
 					out.push(item);
+					grouped_ledgers[item.account].entries.push(item);
 				}
 			}
-		})
+		});
 
-		var closing = {
-			account: "Closing (Opening + Totals)", debit: opening.debit + totals.debit, 
-				credit: opening.credit + totals.credit, 
-				id:"_closing", _show: true, _style: "font-weight: bold"
-		}
-							
-		
+		var closing = this.make_summary_row("Closing (Opening + Totals)", this.account);
+		closing.debit = opening.debit + totals.debit;
+		closing.credit = opening.credit + totals.credit;
+
 		if(me.account) {
 			me.appframe.set_title("General Ledger: " + me.account);
+
+			// group by ledgers
+			if(this.account_by_name[this.account].group_or_ledger==="Group"
+				&& this.group_by_ledger) {
+					out = this.group_data_by_ledger(grouped_ledgers);
+			}
 			
 			if(me.account_by_name[me.account].debit_or_credit == "Debit") {
 				opening.debit -= opening.credit; opening.credit = 0;
@@ -221,14 +245,53 @@
 				opening.credit -= opening.debit; opening.debit = 0;
 				closing.credit -= closing.debit; closing.debit = 0;
 			}
-			var out = [opening].concat(out).concat([totals, closing]);
+			out = [opening].concat(out).concat([totals, closing]);
 		} else {
 			me.appframe.set_title("General Ledger");
-			var out = out.concat([totals]);
+			out = out.concat([totals]);
 		}
-					
+
 		this.data = out;
 	},
+
+	group_data_by_ledger: function(grouped_ledgers) {
+		var out = []
+		$.each(Object.keys(grouped_ledgers).sort(), function(i, account) {
+			if(grouped_ledgers[account].entries.length) {
+				grouped_ledgers[account].closing.debit = 
+					grouped_ledgers[account].opening.debit
+					+ grouped_ledgers[account].totals.debit;
+
+				grouped_ledgers[account].closing.credit = 
+					grouped_ledgers[account].opening.credit
+					+ grouped_ledgers[account].totals.credit;
+
+				out = out.concat([grouped_ledgers[account].opening])
+					.concat(grouped_ledgers[account].entries)
+					.concat([grouped_ledgers[account].totals, 
+						grouped_ledgers[account].closing]);
+			}
+		});
+		return out;
+	},
+
+	make_summary_row: function(label, item_account) {
+		return {
+			account: label,
+			debit: 0.0,
+			credit: 0.0,
+			id: ["", label, item_account].join("_").replace(" ", "_").toLowerCase(),
+			_show: true,
+			_style: "font-weight: bold"
+		}
+	},
+
+	make_account_by_name: function() {
+		if(!this.account_by_name) {
+			this.account_by_name = this.make_name_map(wn.report_dump.data["Account"]);
+			this.make_voucher_acconuts_map();
+		}
+	},
 	
 	make_voucher_acconuts_map: function() {
 		this.voucher_accounts = {};
