diff --git a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py
index 786a494..20bdae8 100644
--- a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py
+++ b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.py
@@ -5,7 +5,7 @@
 import frappe
 from frappe import _
 from erpnext.accounts.report.accounts_receivable.accounts_receivable import get_ageing_data
-from frappe.utils import flt
+from frappe.utils import flt, getdate
 
 def execute(filters=None):
 	if not filters: filters = {}
@@ -13,25 +13,27 @@
 
 	columns = get_columns(filters)
 	entries = get_entries(filters)
-	invoice_posting_date_map = get_invoice_posting_date_map(filters)
+	invoice_details = get_invoice_posting_date_map(filters)
 	against_date = ""
 
 	data = []
 	for d in entries:
-		against_date = invoice_posting_date_map.get(d.reference_name) or ""
+		invoice = invoice_details.get(d.reference_name) or frappe._dict()
 		if d.reference_type=="Purchase Invoice":
 			payment_amount = flt(d.debit) or -1 * flt(d.credit)
 		else:
 			payment_amount = flt(d.credit) or -1 * flt(d.debit)
 
-		row = [d.name, d.party_type, d.party, d.posting_date, d.reference_name,
-			against_date, d.debit, d.credit, d.cheque_no, d.cheque_date, d.remark]
+		row = [d.name, d.party_type, d.party, d.posting_date, d.reference_name, invoice.posting_date, 
+			invoice.due_date, d.debit, d.credit, d.cheque_no, d.cheque_date, d.remark]
 
 		if d.reference_name:
 			row += get_ageing_data(30, 60, 90, d.posting_date, against_date, payment_amount)
 		else:
 			row += ["", "", "", "", ""]
-
+		if invoice.due_date:
+			row.append((getdate(d.posting_date) - getdate(invoice.due_date)).days or 0)
+		
 		data.append(row)
 
 	return columns, data
@@ -43,13 +45,25 @@
 				.format(filters.payment_type, filters.party_type))
 
 def get_columns(filters):
-	return [_("Journal Entry") + ":Link/Journal Entry:140",
-		_("Party Type") + "::100", _("Party") + ":Dynamic Link/Party Type:140",
+	return [
+		_("Journal Entry") + ":Link/Journal Entry:140",
+		_("Party Type") + "::100", 
+		_("Party") + ":Dynamic Link/Party Type:140",
 		_("Posting Date") + ":Date:100",
-		_("Against Invoice") + (":Link/Purchase Invoice:130" if filters.get("payment_type") == "Outgoing" else ":Link/Sales Invoice:130"),
-		_("Against Invoice Posting Date") + ":Date:130", _("Debit") + ":Currency:120", _("Credit") + ":Currency:120",
-		_("Reference No") + "::100", _("Reference Date") + ":Date:100", _("Remarks") + "::150", _("Age") +":Int:40",
-		"0-30:Currency:100", "30-60:Currency:100", "60-90:Currency:100", _("90-Above") + ":Currency:100"
+		_("Invoice") + (":Link/Purchase Invoice:130" if filters.get("payment_type") == "Outgoing" else ":Link/Sales Invoice:130"),
+		_("Invoice Posting Date") + ":Date:130", 
+		_("Payment Due Date") + ":Date:130", 
+		_("Debit") + ":Currency:120", 
+		_("Credit") + ":Currency:120",
+		_("Reference No") + "::100", 
+		_("Reference Date") + ":Date:100", 
+		_("Remarks") + "::150", 
+		_("Age") +":Int:40",
+		"0-30:Currency:100", 
+		"30-60:Currency:100", 
+		"60-90:Currency:100", 
+		_("90-Above") + ":Currency:100",
+		_("Delay in payment (Days)") + "::150"
 	]
 
 def get_conditions(filters):
@@ -66,7 +80,14 @@
 
 	if filters.get("party"):
 		conditions.append("jvd.party=%(party)s")
-
+		
+	if filters.get("party_type"):
+		conditions.append("jvd.reference_type=%(reference_type)s")
+		if filters.get("party_type") == "Customer":
+			filters["reference_type"] = "Sales Invoice"
+		else:
+			filters["reference_type"] = "Purchase Invoice"
+		
 	if filters.get("company"):
 		conditions.append("jv.company=%(company)s")
 
@@ -89,12 +110,9 @@
 	return entries
 
 def get_invoice_posting_date_map(filters):
-	invoice_posting_date_map = {}
-	if filters.get("payment_type") == "Incoming":
-		for t in frappe.db.sql("""select name, posting_date from `tabSales Invoice`"""):
-			invoice_posting_date_map[t[0]] = t[1]
-	else:
-		for t in frappe.db.sql("""select name, posting_date from `tabPurchase Invoice`"""):
-			invoice_posting_date_map[t[0]] = t[1]
+	invoice_details = {}
+	dt = "Sales Invoice" if filters.get("payment_type") == "Incoming" else "Purchase Invoice"
+	for t in frappe.db.sql("select name, posting_date, due_date from `tab{0}`".format(dt), as_dict=1):
+		invoice_details[t.name] = t
 
-	return invoice_posting_date_map
+	return invoice_details
