diff --git a/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js b/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js
index a0e56de..068926b 100644
--- a/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js
+++ b/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js
@@ -33,8 +33,13 @@
 		},
 		{
 			"fieldname":"is_pos",
-			"label": __("POS?"),
+			"label": __("Show only POS"),
 			"fieldtype": "Check"
-		}
+		},
+		{
+			"fieldname":"payment_detail",
+			"label": __("Show Payment Details"),
+			"fieldtype": "Check"
+		},
 	]
 };
\ No newline at end of file
diff --git a/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.py b/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.py
index c2b1456..9969c55 100644
--- a/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.py
+++ b/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.py
@@ -14,25 +14,41 @@
 def get_columns():
 	return [
 		_("Date") + ":Date:80",
-		_("Owner") + "::150",
-		_("Payment Mode") + "::140",
+		_("Owner") + ":Data:200",
+		_("Payment Mode") + ":Data:240",
 		_("Sales and Returns") + ":Currency/currency:120",
 		_("Taxes") + ":Currency/currency:120",
-		_("Payments") + ":Currency/currency:120",
-		_("Outstanding Amount") + ":Currency/currency:150",
+		_("Payments") + ":Currency/currency:120"
 	]
 
 def get_sales_payment_data(filters, columns):
-	sales_invoice_data = get_sales_invoice_data(filters)
 	data = []
+	show_payment_detail = False
+
+	sales_invoice_data = get_sales_invoice_data(filters)
 	mode_of_payments = get_mode_of_payments(filters)
+	mode_of_payment_details = get_mode_of_payment_details(filters)
+
+	if filters.get("payment_detail"):
+		show_payment_detail = True
+	else:
+		show_payment_detail = False
+
 	for inv in sales_invoice_data:
-		mode_of_payment = inv["owner"]+cstr(inv["posting_date"])
-		row = [inv.posting_date, inv.owner,", ".join(mode_of_payments.get(mode_of_payment, [])),
-		inv.net_total,
-		inv.total_taxes, (inv.net_total + inv.total_taxes - inv.outstanding_amount),
-		inv.outstanding_amount]
-		data.append(row)
+		owner_posting_date = inv["owner"]+cstr(inv["posting_date"])
+		if show_payment_detail:
+			row = [inv.posting_date, inv.owner," ",inv.net_total,inv.total_taxes, 0]
+			data.append(row)
+			for mop_detail in mode_of_payment_details.get(owner_posting_date,[]):
+				row = [inv.posting_date, inv.owner,mop_detail[0],0,0,mop_detail[1],0]
+				data.append(row)
+		else:
+			total_payment = 0
+			for mop_detail in mode_of_payment_details.get(owner_posting_date,[]):
+				total_payment = total_payment + mop_detail[1]
+			row = [inv.posting_date, inv.owner,", ".join(mode_of_payments.get(owner_posting_date, [])),
+			inv.net_total,inv.total_taxes,total_payment]
+			data.append(row)
 	return data
 
 def get_conditions(filters):
@@ -73,9 +89,17 @@
 			union
 			select a.owner,a.posting_date, ifnull(b.mode_of_payment, '') as mode_of_payment
 			from `tabSales Invoice` a, `tabPayment Entry` b,`tabPayment Entry Reference` c
-			where a.name = c.reference_name 
+			where a.name = c.reference_name
 			and b.name = c.parent
 			and a.name in ({invoice_list_names})
+			union
+			select a.owner, a.posting_date,
+			ifnull(a.voucher_type,'') as mode_of_payment
+			from `tabJournal Entry` a, `tabJournal Entry Account` b
+			where a.name = b.parent
+			and a.docstatus = 1
+			and b.reference_type = "Sales Invoice"
+			and b.reference_name in ({invoice_list_names})
 			""".format(invoice_list_names=invoice_list_names), as_dict=1)
 		for d in inv_mop:
 			mode_of_payments.setdefault(d["owner"]+cstr(d["posting_date"]), []).append(d.mode_of_payment)
@@ -86,4 +110,37 @@
 	return frappe.db.sql("""select a.name
 		from `tabSales Invoice` a
 		where a.docstatus = 1 and {conditions}""".format(conditions=conditions),
-		filters, as_dict=1)
\ No newline at end of file
+		filters, as_dict=1)
+
+def get_mode_of_payment_details(filters):
+	mode_of_payment_details = {}
+	invoice_list = get_invoices(filters)
+	invoice_list_names = ",".join(['"' + invoice['name'] + '"' for invoice in invoice_list])
+	if invoice_list:
+		inv_mop_detail = frappe.db.sql("""select a.owner, a.posting_date,
+			ifnull(b.mode_of_payment, '') as mode_of_payment, sum(b.base_amount) as paid_amount
+			from `tabSales Invoice` a, `tabSales Invoice Payment` b
+			where a.name = b.parent
+			and a.name in ({invoice_list_names})
+			group by a.owner, a.posting_date, mode_of_payment
+			union
+			select a.owner,a.posting_date,
+			ifnull(b.mode_of_payment, '') as mode_of_payment, sum(b.base_paid_amount) as paid_amount
+			from `tabSales Invoice` a, `tabPayment Entry` b,`tabPayment Entry Reference` c
+			where a.name = c.reference_name
+			and b.name = c.parent
+			and a.name in ({invoice_list_names})
+			group by a.owner, a.posting_date, mode_of_payment
+			union
+			select a.owner, a.posting_date,
+			ifnull(a.voucher_type,'') as mode_of_payment, sum(b.credit)
+			from `tabJournal Entry` a, `tabJournal Entry Account` b
+			where a.name = b.parent
+			and a.docstatus = 1
+			and b.reference_type = "Sales Invoice"
+			and b.reference_name in ({invoice_list_names})
+			group by a.owner, a.posting_date, mode_of_payment
+			""".format(invoice_list_names=invoice_list_names), as_dict=1)
+		for d in inv_mop_detail:
+			mode_of_payment_details.setdefault(d["owner"]+cstr(d["posting_date"]), []).append((d.mode_of_payment,d.paid_amount))
+	return mode_of_payment_details
\ No newline at end of file
