diff --git a/selling/doctype/lead/lead.js b/selling/doctype/lead/lead.js
index b3c200d..40cf454 100644
--- a/selling/doctype/lead/lead.js
+++ b/selling/doctype/lead/lead.js
@@ -55,8 +55,8 @@
 		
 		this.frm.__is_customer = this.frm.__is_customer || this.frm.doc.__is_customer;
 		if(!this.frm.doc.__islocal && !this.frm.__is_customer) {
-			this.frm.add_custom_button("Create Customer", this.frm.cscript['Create Customer']);
-			this.frm.add_custom_button("Create Opportunity", this.frm.cscript['Create Opportunity']);
+			this.frm.add_custom_button("Create Customer", this.create_customer);
+			this.frm.add_custom_button("Create Opportunity", this.create_opportunity);
 			this.frm.add_custom_button("Send SMS", this.frm.cscript.send_sms);
 		}
 		
@@ -93,21 +93,21 @@
 			// note: render_address_row is defined in contact_control.js
 		}
 		this.frm.address_list.run();
+	}, 
+	
+	create_customer: function() {
+		wn.model.open_mapped_doc({
+			method: "selling.doctype.lead.lead.make_customer",
+			source_name: cur_frm.doc.name
+		})
+	}, 
+	
+	create_opportunity: function() {
+		wn.model.open_mapped_doc({
+			method: "selling.doctype.lead.lead.make_opportunity",
+			source_name: cur_frm.doc.name
+		})
 	}
 });
 
-$.extend(cur_frm.cscript, new erpnext.LeadController({frm: cur_frm}));
-
-cur_frm.cscript['Create Customer'] = function(){
-	wn.model.open_mapped_doc({
-		method: "selling.doctype.lead.lead.make_customer",
-		source_name: cur_frm.doc.name
-	})
-}
-
-cur_frm.cscript['Create Opportunity'] = function(){
-	wn.model.open_mapped_doc({
-		method: "selling.doctype.lead.lead.make_opportunity",
-		source_name: cur_frm.doc.name
-	})
-}
\ No newline at end of file
+$.extend(cur_frm.cscript, new erpnext.LeadController({frm: cur_frm}));
\ No newline at end of file
diff --git a/selling/doctype/opportunity/opportunity.js b/selling/doctype/opportunity/opportunity.js
index c3843cf..bc10c9b 100644
--- a/selling/doctype/opportunity/opportunity.js
+++ b/selling/doctype/opportunity/opportunity.js
@@ -35,6 +35,13 @@
 				'address_display', 'contact_display', 'contact_mobile', 'contact_email', 
 				'territory', 'customer_group']);
 		}
+	}, 
+	
+	create_quotation: function() {
+		wn.model.open_mapped_doc({
+			method: "selling.doctype.opportunity.opportunity.make_quotation",
+			source_name: cur_frm.doc.name
+		})
 	}
 });
 
@@ -54,7 +61,7 @@
 	
 	cur_frm.clear_custom_buttons();
 	if(doc.docstatus === 1 && doc.status!=="Opportunity Lost") {
-		cur_frm.add_custom_button('Create Quotation', cur_frm.cscript['Create Quotation']);
+		cur_frm.add_custom_button('Create Quotation', cur_frm.cscript.create_quotation);
 		cur_frm.add_custom_button('Opportunity Lost', cur_frm.cscript['Declare Opportunity Lost']);
 		cur_frm.add_custom_button('Send SMS', cur_frm.cscript.send_sms);
 	}
@@ -168,24 +175,15 @@
 cur_frm.cscript.lead = function(doc, cdt, cdn) {
 	cur_frm.toggle_display("contact_info", doc.customer || doc.lead);
 	
-	if(doc.lead) {
-		cur_frm.call({
-			doc: cur_frm.doc,
-			method: "set_lead_defaults",
-			callback: function(r) {
-				if(!r.exc) {
-					cur_frm.refresh_fields();
-				}
-			}
-		});
-		unhide_field(['customer_name', 'address_display','contact_mobile', 'contact_email', 
-			'territory']);	
-	}
+	wn.model.map_current_doc({
+		method: "selling.doctype.lead.lead.make_opportunity",
+		source_name: cur_frm.doc.lead
+	})
+	
+	unhide_field(['customer_name', 'address_display','contact_mobile', 
+		'contact_email', 'territory']);	
 }
 
-
-//item getquery
-//=======================================
 cur_frm.fields_dict['enquiry_details'].grid.get_field('item_code').get_query = function(doc, cdt, cdn) {
 	if (doc.enquiry_type == 'Maintenance')
 	 	return erpnext.queries.item({
@@ -197,25 +195,6 @@
 		});
 }
 
-// Create New Quotation
-cur_frm.cscript['Create Quotation'] = function(){
-	n = wn.model.make_new_doc_and_get_name("Quotation");
-	$c('dt_map', args={
-		'docs':wn.model.compress([locals["Quotation"][n]]),
-		'from_doctype':'Opportunity',
-		'to_doctype':'Quotation',
-		'from_docname':cur_frm.docname,
-		'from_to_list':"[['Opportunity', 'Quotation'],['Opportunity Item','Quotation Item']]"
-	}
-	, function(r,rt) {
-		loaddoc("Quotation", n);
-		}
-	);
-}
-
-
-// declare enquiry	lost
-//-------------------------
 cur_frm.cscript['Declare Opportunity Lost'] = function(){
 	var dialog = new wn.ui.Dialog({
 		title: "Set as Lost",
diff --git a/selling/doctype/opportunity/opportunity.py b/selling/doctype/opportunity/opportunity.py
index c569157..cced9ab 100644
--- a/selling/doctype/opportunity/opportunity.py
+++ b/selling/doctype/opportunity/opportunity.py
@@ -66,7 +66,6 @@
 
 			contact_det = sql("select contact_name, contact_no, email_id from `tabContact` where customer = '%s' and is_customer = 1 and is_primary_contact = 'Yes' and docstatus != 2" %(name), as_dict = 1)
 
-			
 			ret['contact_person'] = contact_det and contact_det[0]['contact_name'] or ''
 			ret['contact_no']		 = contact_det and contact_det[0]['contact_no'] or ''
 			ret['email_id']			 = contact_det and contact_det[0]['email_id'] or ''
@@ -175,4 +174,32 @@
 			return 'true'
 
 	def on_trash(self):
-		self.delete_events()
\ No newline at end of file
+		self.delete_events()
+		
+@webnotes.whitelist()
+def make_quotation(source_name, target_doclist=None):
+	from webnotes.model.mapper import get_mapped_doclist
+	
+	doclist = get_mapped_doclist("Opportunity", source_name, {
+		"Opportunity": {
+			"doctype": "Quotation", 
+			"field_map": {
+				"enquiry_from": "quotation_to", 
+				"enquiry_type": "order_type", 
+				"name": "enq_no", 
+			},
+			"validation": {
+				"docstatus": ["=", 1]
+			}
+		}, 
+		"Opportunity Item": {
+			"doctype": "Quotation Item", 
+			"field_map": {
+				"parent": "prevdoc_docname", 
+				"parenttype": "prevdoc_doctype", 
+				"uom": "stock_uom"
+			}
+		}
+	}, target_doclist)
+		
+	return [d.fields for d in doclist]
\ No newline at end of file
