diff --git a/erpnext/controllers/sales_and_purchase_return.py b/erpnext/controllers/sales_and_purchase_return.py
index 2fddcdf..7d03722 100644
--- a/erpnext/controllers/sales_and_purchase_return.py
+++ b/erpnext/controllers/sales_and_purchase_return.py
@@ -18,34 +18,29 @@
 		validate_returned_items(doc)
 
 def validate_return_against(doc):
-	filters = {"doctype": doc.doctype, "docstatus": 1, "company": doc.company}
-	if doc.meta.get_field("customer") and doc.customer:
-		filters["customer"] = doc.customer
-	elif doc.meta.get_field("supplier") and doc.supplier:
-		filters["supplier"] = doc.supplier
-
-	if not frappe.db.exists(filters):
+	if not frappe.db.exists(doc.doctype, doc.return_against):
 			frappe.throw(_("Invalid {0}: {1}")
 				.format(doc.meta.get_label("return_against"), doc.return_against))
 	else:
 		ref_doc = frappe.get_doc(doc.doctype, doc.return_against)
 
-		# validate posting date time
-		return_posting_datetime = "%s %s" % (doc.posting_date, doc.get("posting_time") or "00:00:00")
-		ref_posting_datetime = "%s %s" % (ref_doc.posting_date, ref_doc.get("posting_time") or "00:00:00")
+		if ref_doc.company == doc.company and ref_doc.customer = doc.customer and ref_doc.docstatus == 1:
+			# validate posting date time
+			return_posting_datetime = "%s %s" % (doc.posting_date, doc.get("posting_time") or "00:00:00")
+			ref_posting_datetime = "%s %s" % (ref_doc.posting_date, ref_doc.get("posting_time") or "00:00:00")
 
-		if get_datetime(return_posting_datetime) < get_datetime(ref_posting_datetime):
-			frappe.throw(_("Posting timestamp must be after {0}").format(format_datetime(ref_posting_datetime)))
+			if get_datetime(return_posting_datetime) < get_datetime(ref_posting_datetime):
+				frappe.throw(_("Posting timestamp must be after {0}").format(format_datetime(ref_posting_datetime)))
 
-		# validate same exchange rate
-		if doc.conversion_rate != ref_doc.conversion_rate:
-			frappe.throw(_("Exchange Rate must be same as {0} {1} ({2})")
-				.format(doc.doctype, doc.return_against, ref_doc.conversion_rate))
+			# validate same exchange rate
+			if doc.conversion_rate != ref_doc.conversion_rate:
+				frappe.throw(_("Exchange Rate must be same as {0} {1} ({2})")
+					.format(doc.doctype, doc.return_against, ref_doc.conversion_rate))
 
-		# validate update stock
-		if doc.doctype == "Sales Invoice" and doc.update_stock and not ref_doc.update_stock:
-				frappe.throw(_("'Update Stock' can not be checked because items are not delivered via {0}")
-					.format(doc.return_against))
+			# validate update stock
+			if doc.doctype == "Sales Invoice" and doc.update_stock and not ref_doc.update_stock:
+					frappe.throw(_("'Update Stock' can not be checked because items are not delivered via {0}")
+						.format(doc.return_against))
 
 def validate_returned_items(doc):
 	from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
