diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py
index eceabf5..23b963b 100644
--- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py
+++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py
@@ -4,7 +4,7 @@
 from __future__ import unicode_literals
 import frappe
 import erpnext
-from frappe import _
+from frappe import _, scrub
 from frappe.utils import getdate, nowdate
 from six import iteritems, itervalues
 
@@ -14,6 +14,9 @@
 		self.filters.from_date = getdate(self.filters.from_date or nowdate())
 		self.filters.to_date = getdate(self.filters.to_date or nowdate())
 
+		if not self.filters.get("company"):
+			self.filters["company"] = frappe.db.get_single_value('Global Defaults', 'default_company')
+
 	def run(self, args):
 		if self.filters.from_date > self.filters.to_date:
 			frappe.throw(_("From Date must be before To Date"))
@@ -21,10 +24,9 @@
 		self.filters.party_type = args.get("party_type")
 		self.party_naming_by = frappe.db.get_value(args.get("naming_by")[0], None, args.get("naming_by")[1])
 
-		discount_account_field = "discount_allowed_account" if self.filters.party_type == "Customer" \
-			else "discount_received_account"
-		self.round_off_account, self.write_off_account, self.discount_account = frappe.get_cached_value('Company',
-			self.filters.company, ["round_off_account", "write_off_account", discount_account_field])
+		self.get_gl_entries()
+		self.get_return_invoices()
+		self.get_party_adjustment_amounts()
 
 		columns = self.get_columns()
 		data = self.get_data()
@@ -48,7 +50,6 @@
 			})
 
 		credit_or_debit_note = "Credit Note" if self.filters.party_type == "Customer" else "Debit Note"
-		discount_allowed_or_received = "Discount Allowed" if self.filters.party_type == "Customer" else "Discount Received"
 
 		columns += [
 			{
@@ -79,27 +80,19 @@
 				"options": "currency",
 				"width": 120
 			},
-			{
-				"label": _(discount_allowed_or_received),
-				"fieldname": "discount_amount",
+		]
+
+		for account in self.party_adjustment_accounts:
+			columns.append({
+				"label": account,
+				"fieldname": "adj_" + scrub(account),
 				"fieldtype": "Currency",
 				"options": "currency",
-				"width": 120
-			},
-			{
-				"label": _("Write Off Amount"),
-				"fieldname": "write_off_amount",
-				"fieldtype": "Currency",
-				"options": "currency",
-				"width": 120
-			},
-			{
-				"label": _("Other Adjustments"),
-				"fieldname": "adjustment_amount",
-				"fieldtype": "Currency",
-				"options": "currency",
-				"width": 120
-			},
+				"width": 120,
+				"is_adjustment": 1
+			})
+
+		columns += [
 			{
 				"label": _("Closing Balance"),
 				"fieldname": "closing_balance",
@@ -119,17 +112,10 @@
 		return columns
 
 	def get_data(self):
-		if not self.filters.get("company"):
-			self.filters["company"] = frappe.db.get_single_value('Global Defaults', 'default_company')
-
 		company_currency = frappe.get_cached_value('Company',  self.filters.get("company"),  "default_currency")
 		invoice_dr_or_cr = "debit" if self.filters.party_type == "Customer" else "credit"
 		reverse_dr_or_cr = "credit" if self.filters.party_type == "Customer" else "debit"
 
-		self.get_gl_entries()
-		self.get_return_invoices()
-		self.get_party_adjustment_amounts()
-
 		self.party_data = frappe._dict({})
 		for gle in self.gl_entries:
 			self.party_data.setdefault(gle.party, frappe._dict({
@@ -146,7 +132,7 @@
 			amount = gle.get(invoice_dr_or_cr) - gle.get(reverse_dr_or_cr)
 			self.party_data[gle.party].closing_balance += amount
 
-			if gle.posting_date < self.filters.from_date:
+			if gle.posting_date < self.filters.from_date or gle.is_opening == "Yes":
 				self.party_data[gle.party].opening_balance += amount
 			else:
 				if amount > 0:
@@ -161,9 +147,10 @@
 			if row.opening_balance or row.invoiced_amount or row.paid_amount or row.return_amount or row.closing_amount:
 				total_party_adjustment = sum([amount for amount in itervalues(self.party_adjustment_details.get(party, {}))])
 				row.paid_amount -= total_party_adjustment
-				row.discount_amount = self.party_adjustment_details.get(party, {}).get(self.discount_account, 0)
-				row.write_off_amount = self.party_adjustment_details.get(party, {}).get(self.write_off_account, 0)
-				row.adjustment_amount = total_party_adjustment - row.discount_amount - row.write_off_amount
+
+				adjustments = self.party_adjustment_details.get(party, {})
+				for account in self.party_adjustment_accounts:
+					row["adj_" + scrub(account)] = adjustments.get(account, 0)
 
 				out.append(row)
 
@@ -182,7 +169,7 @@
 		self.gl_entries = frappe.db.sql("""
 			select
 				gle.posting_date, gle.party, gle.voucher_type, gle.voucher_no, gle.against_voucher_type,
-				gle.against_voucher, gle.debit, gle.credit {join_field}
+				gle.against_voucher, gle.debit, gle.credit, gle.is_opening {join_field}
 			from `tabGL Entry` gle
 			{join}
 			where
@@ -254,9 +241,10 @@
 
 	def get_party_adjustment_amounts(self):
 		conditions = self.prepare_conditions()
-		income_or_expense = "Expense" if self.filters.party_type == "Customer" else "Income"
+		income_or_expense = "Expense Account" if self.filters.party_type == "Customer" else "Income Account"
 		invoice_dr_or_cr = "debit" if self.filters.party_type == "Customer" else "credit"
 		reverse_dr_or_cr = "credit" if self.filters.party_type == "Customer" else "debit"
+		round_off_account = frappe.get_cached_value('Company', self.filters.company, "round_off_account")
 
 		gl_entries = frappe.db.sql("""
 			select
@@ -267,7 +255,7 @@
 				docstatus < 2
 				and (voucher_type, voucher_no) in (
 					select voucher_type, voucher_no from `tabGL Entry` gle, `tabAccount` acc
-					where acc.name = gle.account and acc.root_type = '{income_or_expense}'
+					where acc.name = gle.account and acc.account_type = '{income_or_expense}'
 					and gle.posting_date between %(from_date)s and %(to_date)s and gle.docstatus < 2
 				) and (voucher_type, voucher_no) in (
 					select voucher_type, voucher_no from `tabGL Entry` gle
@@ -277,6 +265,7 @@
 		""".format(conditions=conditions, income_or_expense=income_or_expense), self.filters, as_dict=True)
 
 		self.party_adjustment_details = {}
+		self.party_adjustment_accounts = set()
 		adjustment_voucher_entries = {}
 		for gle in gl_entries:
 			adjustment_voucher_entries.setdefault((gle.voucher_type, gle.voucher_no), [])
@@ -288,12 +277,12 @@
 			has_irrelevant_entry = False
 
 			for gle in voucher_gl_entries:
-				if gle.account == self.round_off_account:
+				if gle.account == round_off_account:
 					continue
 				elif gle.party:
 					parties.setdefault(gle.party, 0)
 					parties[gle.party] += gle.get(reverse_dr_or_cr) - gle.get(invoice_dr_or_cr)
-				elif frappe.get_cached_value("Account", gle.account, "root_type") == income_or_expense:
+				elif frappe.get_cached_value("Account", gle.account, "account_type") == income_or_expense:
 					accounts.setdefault(gle.account, 0)
 					accounts[gle.account] += gle.get(invoice_dr_or_cr) - gle.get(reverse_dr_or_cr)
 				else:
@@ -303,11 +292,13 @@
 				if len(parties) == 1:
 					party = parties.keys()[0]
 					for account, amount in iteritems(accounts):
+						self.party_adjustment_accounts.add(account)
 						self.party_adjustment_details.setdefault(party, {})
 						self.party_adjustment_details[party].setdefault(account, 0)
 						self.party_adjustment_details[party][account] += amount
 				elif len(accounts) == 1 and not has_irrelevant_entry:
 					account = accounts.keys()[0]
+					self.party_adjustment_accounts.add(account)
 					for party, amount in iteritems(parties):
 						self.party_adjustment_details.setdefault(party, {})
 						self.party_adjustment_details[party].setdefault(account, 0)
