diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index 04f881c..d8ee999 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -4,7 +4,7 @@
 import frappe
 from erpnext.hooks import regional_overrides
 
-__version__ = '9.2.22'
+__version__ = '9.2.23'
 
 def get_default_company(user=None):
 	'''Get default company for user'''
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
diff --git a/erpnext/controllers/item_variant.py b/erpnext/controllers/item_variant.py
index f40d519..27a2a3a 100644
--- a/erpnext/controllers/item_variant.py
+++ b/erpnext/controllers/item_variant.py
@@ -56,7 +56,7 @@
 	if not args:
 		args = {d.attribute.lower():d.attribute_value for d in item.attributes}
 
-	attribute_values, numeric_values = get_attribute_values()
+	attribute_values, numeric_values = get_attribute_values(item)
 
 	for attribute, value in args.items():
 		if not value:
@@ -96,16 +96,17 @@
 		frappe.throw(_("Value {0} for Attribute {1} does not exist in the list of valid Item Attribute Values for Item {2}").format(
 			attribute_value, attribute, item), InvalidItemAttributeValueError, title=_('Invalid Attribute'))
 
-def get_attribute_values():
+def get_attribute_values(item):
 	if not frappe.flags.attribute_values:
 		attribute_values = {}
 		numeric_values = {}
 		for t in frappe.get_all("Item Attribute Value", fields=["parent", "attribute_value"]):
 			attribute_values.setdefault(t.parent.lower(), []).append(t.attribute_value)
 
-		for t in frappe.get_all('Item Attribute',
-			fields=["name", "from_range", "to_range", "increment"], filters={'numeric_values': 1}):
-			numeric_values[t.name.lower()] = t
+		for t in frappe.get_all('Item Variant Attribute',
+			fields=["attribute", "from_range", "to_range", "increment"],
+			filters={'numeric_values': 1, 'parent': item.variant_of}):
+			numeric_values[t.attribute.lower()] = t
 
 		frappe.flags.attribute_values = attribute_values
 		frappe.flags.numeric_values = numeric_values
