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 6b46214..a01cc0f 100644
--- a/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js
+++ b/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.js
@@ -1,6 +1,5 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
-
 frappe.query_reports["Sales Payment Summary"] = {
 	"filters": [
 		{
@@ -24,12 +23,6 @@
 			"default": frappe.defaults.get_user_default("Company")
 		},
 		{
-			"fieldname":"mode_of_payment",
-			"label": __("Mode of Payment"),
-			"fieldtype": "Link",
-			"options": "Mode of Payment"
-		},
-		{
 			"fieldname":"owner",
 			"label": __("Owner"),
 			"fieldtype": "Link",
@@ -37,21 +30,9 @@
 			"defaults": user
 		},
 		{
-			"fieldname":"cost_center",
-			"label": __("Cost Center"),
-			"fieldtype": "Link",
-			"options": "Cost Center"
-		},
-		{
-			"fieldname":"warehouse",
-			"label": __("Warehouse"),
-			"fieldtype": "Link",
-			"options": "Warehouse"
-		},
-		{
 			"fieldname":"is_pos",
 			"label": __("POS?"),
 			"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 bb80955..b46f1be 100644
--- a/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.py
+++ b/erpnext/accounts/report/sales_payment_summary/sales_payment_summary.py
@@ -1,9 +1,9 @@
 # Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
 # For license information, please see license.txt
-
 from __future__ import unicode_literals
 import frappe
 from frappe import _
+from frappe.utils import cstr
 
 def execute(filters=None):
 	columns, data = [], []
@@ -15,22 +15,23 @@
 	return [
 		_("Date") + ":Date:80",
 		_("Owner") + "::150",
-		_("Payment Mode") + "::120",
-		_("Warehouse") + ":Link/Cost Center:100",
-		_("Cost Center") + ":Link/Warehouse:100",
+		_("Payment Mode") + "::140",
 		_("Sales and Returns") + ":Currency/currency:120",
 		_("Taxes") + ":Currency/currency:120",
 		_("Payments") + ":Currency/currency:120",
-		_("Reconciliation") + ":Currency/currency:120"
+		_("Outstanding Amount") + ":Currency/currency:150",
 	]
 
 def get_sales_payment_data(filters, columns):
 	sales_invoice_data = get_sales_invoice_data(filters)
 	data = []
+	mode_of_payments = get_mode_of_payments(filters)
 	for inv in sales_invoice_data:
-		row = [inv.posting_date, inv.owner, inv.mode_of_payment,inv.warehouse,
-			inv.cost_center,inv.net_total, inv.total_taxes, inv.paid_amount,
-			(inv.net_total + inv.total_taxes - inv.paid_amount)]
+		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)
 	return data
 
@@ -41,26 +42,48 @@
 	if filters.get("owner"): conditions += " and a.owner = %(owner)s"
 	if filters.get("from_date"): conditions += " and a.posting_date >= %(from_date)s"
 	if filters.get("to_date"): conditions += " and a.posting_date <= %(to_date)s"
-	if filters.get("mode_of_payment"): conditions += " and c.mode_of_payment >= %(mode_of_payment)s"
-	if filters.get("warehouse"): conditions += " and b.warehouse <= %(warehouse)s"
-	if filters.get("cost_center"): conditions += " and b.cost_center <= %(cost_center)s"
 	if filters.get("is_pos"): conditions += " and a.is_pos = %(is_pos)s"
-
 	return conditions
 
 def get_sales_invoice_data(filters):
 	conditions = get_conditions(filters)
 	return frappe.db.sql("""
 		select
-			a.owner, a.posting_date, c.mode_of_payment, b.warehouse, b.cost_center,
+			a.posting_date, a.owner,
 			sum(a.net_total) as "net_total",
 			sum(a.total_taxes_and_charges) as "total_taxes",
-			sum(a.base_paid_amount) as "paid_amount"
-		from `tabSales Invoice` a, `tabSales Invoice Item` b, `tabSales Invoice Payment` c
-		where
-			a.name = b.parent
-			and a.name = c.parent
+			sum(a.base_paid_amount) as "paid_amount",
+			sum(a.outstanding_amount) as "outstanding_amount"
+		from `tabSales Invoice` a
+		where a.docstatus = 1
 			and {conditions}
 			group by
-			a.owner, a.posting_date, c.mode_of_payment, b.warehouse, b.cost_center
-	""".format(conditions=conditions), filters, as_dict=1)
\ No newline at end of file
+			a.owner, a.posting_date
+	""".format(conditions=conditions), filters, as_dict=1)
+
+def get_mode_of_payments(filters):
+	mode_of_payments = {}
+	invoice_list = get_invoices(filters)
+	invoice_list_names = ",".join(['"' + invoice['name'] + '"' for invoice in invoice_list])
+	if invoice_list:
+		inv_mop = frappe.db.sql("""select a.owner,a.posting_date,b.mode_of_payment
+			from `tabSales Invoice` a, `tabSales Invoice Payment` b
+			where a.name = b.parent
+			and a.name in ({invoice_list_names})
+			union
+			select a.owner,a.posting_date,b.mode_of_payment
+			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})
+			""".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)
+	return mode_of_payments
+
+def get_invoices(filters):
+	conditions = get_conditions(filters)
+	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
