diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py
index f55adb9..665fc90 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.py
+++ b/erpnext/accounts/doctype/payment_request/payment_request.py
@@ -34,7 +34,7 @@
 		if hasattr(ref_doc, "order_type") and getattr(ref_doc, "order_type") == "Shopping Cart":
 			send_mail = False
 
-		if send_mail:
+		if send_mail and not self.flags.mute_email:
 			self.send_payment_request()
 			self.send_email()
 
@@ -104,8 +104,9 @@
 				self.reference_name, self.name)
 		})
 
-		company_details = get_company_defaults(ref_doc.company)
 		if payment_entry.difference_amount:
+			company_details = get_company_defaults(ref_doc.company)
+
 			payment_entry.append("deductions", {
 				"account": company_details.exchange_gain_loss_account,
 				"cost_center": company_details.cost_center,
@@ -132,7 +133,8 @@
 			"payment_url": self.payment_url
 		}
 
-		return frappe.render_template(self.message, context)
+		if self.message:
+			return frappe.render_template(self.message, context)
 
 	def set_failed(self):
 		pass
@@ -183,13 +185,17 @@
 			"grand_total": grand_total,
 			"email_to": args.recipient_id or "",
 			"subject": "Payment Request for %s"%args.dn,
-			"message": gateway_account.message,
+			"message": gateway_account.get("message") or get_dummy_message(args.use_dummy_message),
 			"reference_doctype": args.dt,
 			"reference_name": args.dn
 		})
 
 		if args.return_doc:
 			return pr
+
+		if args.mute_email:
+			pr.flags.mute_email = True
+
 		if args.submit_doc:
 			pr.insert(ignore_permissions=True)
 			pr.submit()
@@ -258,9 +264,9 @@
 	return frappe.get_doc("Payment Request", docname).send_email()
 
 @frappe.whitelist()
-def make_payment_entry(docname):
+def make_payment_entry(docname, make_draft_payment_entry=True):
 	doc = frappe.get_doc("Payment Request", docname)
-	doc.flags.make_draft_payment_entry = True
+	doc.flags.make_draft_payment_entry = make_draft_payment_entry
 	return doc.set_as_paid().as_dict()
 
 def make_status_as_paid(doc, method):
@@ -269,6 +275,17 @@
 			{"reference_doctype": ref.reference_doctype, "reference_name": ref.reference_name,
 			"docstatus": 1})
 		
-		doc = frappe.get_doc("Payment Request", payment_request_name)
-		if doc.status != "Paid":
-			doc.db_set('status', 'Paid')
+		if payment_request_name:
+			doc = frappe.get_doc("Payment Request", payment_request_name)
+			if doc.status != "Paid":
+				doc.db_set('status', 'Paid')
+
+def get_dummy_message(use_dummy_message=True):
+	return """
+		<p> Hope you are enjoying a service. Please consider bank details for payment </p>
+		<p> Bank Details <p><br>
+		<p> Bank Name : National Bank </p>
+		<p> Account Number : 123456789000872 </p>
+		<p> IFSC code : NB000001 </p>
+		<p> Account Name : Wind Power LLC </p>
+	"""
diff --git a/erpnext/demo/user/accounts.py b/erpnext/demo/user/accounts.py
index e7dceb3..36a79f6 100644
--- a/erpnext/demo/user/accounts.py
+++ b/erpnext/demo/user/accounts.py
@@ -10,6 +10,8 @@
 from frappe.desk import query_report
 from erpnext.accounts.doctype.journal_entry.journal_entry import get_payment_entry_against_invoice
 from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
+from frappe.utils.make_random import get_random
+from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request, make_payment_entry
 
 def work():
 	frappe.set_user(frappe.db.get_global('demo_accounts_user'))
@@ -46,8 +48,19 @@
 	if random.random() < 0.5:
 		make_payment_entries("Purchase Invoice", "Accounts Payable")
 
+	if random.random() < 0.1:
+		#make payment request against sales invoice
+		sales_invoice_name = get_random("Sales Invoice", filters={"docstatus": 1})
+		if sales_invoice_name:
+			si = frappe.get_doc("Sales Invoice", sales_invoice_name)
+			if si.outstanding_amount > 0:
+				payment_request = make_payment_request(dt="Sales Invoice", dn=si.name, recipient_id=si.contact_email,
+					submit_doc=True, mute_email=True, use_dummy_message=True)
+
+				make_payment_entry(payment_request.name, make_draft_payment_entry=False)
+
 def make_payment_entries(ref_doctype, report):
-	outstanding_invoices = list(set([r[3] for r in query_report.run(report, 
+	outstanding_invoices = list(set([r[3] for r in query_report.run(report,
 	{"report_date": frappe.flags.current_date })["result"] if r[2]==ref_doctype]))
 	
 	# make Payment Entry
@@ -69,4 +82,4 @@
 		jv.cheque_date = frappe.flags.current_date
 		jv.insert()
 		jv.submit()
-		frappe.db.commit()		
\ No newline at end of file
+		frappe.db.commit()
diff --git a/erpnext/demo/user/sales.py b/erpnext/demo/user/sales.py
index 6b36b46..cd008a9 100644
--- a/erpnext/demo/user/sales.py
+++ b/erpnext/demo/user/sales.py
@@ -4,9 +4,11 @@
 from __future__ import unicode_literals
 
 import frappe, random
+from frappe.utils import flt
 from frappe.utils.make_random import add_random_children, get_random
 from erpnext.setup.utils import get_exchange_rate
 from erpnext.accounts.party import get_party_account_currency
+from erpnext.accounts.doctype.payment_request.payment_request import make_payment_request, make_payment_entry
 
 def work():
 	frappe.set_user(frappe.db.get_global('demo_sales_user_2'))
@@ -34,6 +36,17 @@
 		for i in xrange(random.randint(1,3)):
 			make_sales_order()
 
+	if random.random() < 0.1:
+		#make payment request against Sales Order
+		sales_order_name = get_random("Sales Order", filters={"docstatus": 1})
+		if sales_order_name:
+			so = frappe.get_doc("Sales Order", sales_order_name)
+			if (flt(so.grand_total) - flt(so.advance_paid)) > 0:
+				payment_request = make_payment_request(dt="Sales Order", dn=so.name, recipient_id=so.contact_email,
+					submit_doc=True, mute_email=True, use_dummy_message=True)
+
+				make_payment_entry(payment_request.name, make_draft_payment_entry=False)
+
 def make_opportunity():
 	b = frappe.get_doc({
 		"doctype": "Opportunity",
