diff --git a/erpnext/templates/includes/rfq.js b/erpnext/templates/includes/rfq.js
index 3623d77..ea003d8 100644
--- a/erpnext/templates/includes/rfq.js
+++ b/erpnext/templates/includes/rfq.js
@@ -6,6 +6,9 @@
 $(document).ready(function() {
 	new rfq();
 	doc.supplier = "{{ doc.supplier }}"
+	doc.currency = "{{ doc.currency }}"
+	doc.number_format = "{{ doc.number_format }}"
+	doc.buying_price_list = "{{ doc.buying_price_list }}"
 });
 
 rfq = Class.extend({
@@ -57,11 +60,11 @@
 				data.qty = me.qty;
 				data.rate = me.rate;
 				data.amount = (me.rate * me.qty) || 0.0;
-				$(repl('.rfq-amount[data-idx=%(idx)s]',{'idx': me.idx})).text(data.amount.toFixed(2));
+				$(repl('.rfq-amount[data-idx=%(idx)s]',{'idx': me.idx})).text(format_number(data.amount, doc.number_format, 2));
 			}
 
 			doc.grand_total += flt(data.amount);
-			$('.tax-grand-total').text(doc.grand_total.toFixed(2));
+			$('.tax-grand-total').text(format_number(doc.grand_total, doc.number_format, 2));
 		})
 	},
 
diff --git a/erpnext/templates/includes/rfq/rfq_items.html b/erpnext/templates/includes/rfq/rfq_items.html
index f03fb8f..1e99a76 100644
--- a/erpnext/templates/includes/rfq/rfq_items.html
+++ b/erpnext/templates/includes/rfq/rfq_items.html
@@ -18,12 +18,12 @@
 				</p>
 		</div>
 		<div class="col-sm-2 col-xs-2 text-right">
-				<input type="number" class="form-control text-right rfq-rate"
+			{{doc.currency_symbol}}	<input type="number" class="form-control text-right rfq-rate"
 				style="margin-top: 5px; max-width: 70px;display: inline-block" value="0.00"
 				data-idx="{{ d.idx }}">
 		</div>
         <div class="col-sm-2 col-xs-2 text-right" style="padding-top: 9px;">
-            <span class="rfq-amount" data-idx="{{ d.idx }}">0.00</span>
+           {{doc.currency_symbol}} <span class="rfq-amount" data-idx="{{ d.idx }}">0.00</span>
         </div>
 		</div>
 	</div>
diff --git a/erpnext/templates/pages/rfq.html b/erpnext/templates/pages/rfq.html
index 8009819..dfbbbc9 100644
--- a/erpnext/templates/pages/rfq.html
+++ b/erpnext/templates/pages/rfq.html
@@ -64,7 +64,7 @@
 		<div class="row grand-total-row">
 			<div class="col-xs-10 text-right">{{ _("Grand Total") }}</div>
 			<div class="col-xs-2 text-right">
-				<span class="tax-grand-total">0.0</span>
+			{{doc.currency_symbol}}	<span class="tax-grand-total">0.0</span>
 			</div>
 		</div>
         {% endif %}
diff --git a/erpnext/templates/pages/rfq.py b/erpnext/templates/pages/rfq.py
index aefa315..181cf73 100644
--- a/erpnext/templates/pages/rfq.py
+++ b/erpnext/templates/pages/rfq.py
@@ -4,24 +4,24 @@
 from __future__ import unicode_literals
 import frappe
 from frappe import _
+from erpnext.controllers.website_list_for_contact import get_customers_suppliers, \
+					get_party_details
 
 def get_context(context):
 	context.no_cache = 1
 	context.doc = frappe.get_doc(frappe.form_dict.doctype, frappe.form_dict.name)
 	context.parents = frappe.form_dict.parents
 	context.doc.supplier = get_supplier()
-	unauthrized_user(context.doc.supplier)
+	update_supplier_details(context)
+	unauthorized_user(context.doc.supplier)
 	context["title"] = frappe.form_dict.name
 
-def unauthrized_user(supplier):
-	status = check_supplier_has_docname_access(supplier)
-	if status == False:
-		frappe.throw(_("Not Permitted"), frappe.PermissionError)
-
 def get_supplier():
-	from erpnext.shopping_cart.utils import check_customer_or_supplier
-	key, parties = check_customer_or_supplier()
-	return parties[0] if key == 'Supplier' else ''
+	doctype = frappe.form_dict.doctype
+	parties_doctype = 'Request for Quotation Supplier' if doctype == 'Request for Quotation' else doctype
+	customers, suppliers = get_customers_suppliers(parties_doctype, frappe.session.user)
+	key, parties = get_party_details(customers, suppliers)
+	return parties[0] if key == 'supplier' else ''
 
 def check_supplier_has_docname_access(supplier):
 	status = True
@@ -29,3 +29,15 @@
 		where supplier = '{supplier}'""".format(supplier=supplier)):
 		status = False
 	return status
+
+def unauthorized_user(supplier):
+	status = check_supplier_has_docname_access(supplier)
+	if status == False:
+		frappe.throw(_("Not Permitted"), frappe.PermissionError)
+
+def update_supplier_details(context):
+	supplier_doc = frappe.get_doc("Supplier", context.doc.supplier)
+	context.doc.currency = supplier_doc.default_currency
+	context.doc.currency_symbol = frappe.db.get_value("Currency", context.doc.currency, "symbol")
+	context.doc.number_format = frappe.db.get_value("Currency", context.doc.currency, "number_format")
+	context.doc.buying_price_list = supplier_doc.default_price_list
\ No newline at end of file
