diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py
index c216e27..b60aa86 100644
--- a/erpnext/accounts/party.py
+++ b/erpnext/accounts/party.py
@@ -6,6 +6,7 @@
 import frappe
 from frappe import _
 from frappe.defaults import get_restrictions
+from frappe.utils import add_days
 from erpnext.utilities.doctype.address.address import get_address_display
 from erpnext.utilities.doctype.contact.contact import get_contact_details
 
@@ -22,7 +23,8 @@
 	party_bean = frappe.bean(party_type, party)
 	party = party_bean.doc
 
-	set_address_and_contact(out, party, party_type)
+	set_address_details(out, party, party_type)
+	set_contact_details(out, party, party_type)
 	set_other_values(out, party, party_type)
 	set_price_list(out, party, price_list)
 	
@@ -38,20 +40,26 @@
 	
 	return out
 
-def set_address_and_contact(out, party, party_type):
-	out.update({
-		party_type.lower() + "_address": frappe.conn.get_value("Address", 
-			{party_type.lower(): party.name, "is_primary_address":1}, "name"),
-		"contact_person": frappe.conn.get_value("Contact", 
-			{party_type.lower(): party.name, "is_primary_contact":1}, "name")
-	})
+def set_address_details(out, party, party_type):
+	billing_address_field = "customer_address" if party_type == "Lead" \
+		else party_type.lower() + "_address"
+	out[billing_address_field] = frappe.conn.get_value("Address", 
+		{party_type.lower(): party.name, "is_primary_address":1}, "name")
 	
 	# address display
-	out.address_display = get_address_display(out[party_type.lower() + "_address"])
+	out.address_display = get_address_display(out[billing_address_field])
 	
-	# primary contact details
+	# shipping address
+	if party_type in ["Customer", "Lead"]:
+		out.shipping_address_name = frappe.conn.get_value("Address", 
+			{party_type.lower(): party.name, "is_shipping_address":1}, "name")
+		out.shipping_address = get_address_display(out["shipping_address_name"])
+	
+def set_contact_details(out, party, party_type):
+	out.contact_person = frappe.conn.get_value("Contact", 
+		{party_type.lower(): party.name, "is_primary_contact":1}, "name")
+	
 	out.update(get_contact_details(out.contact_person))
-	
 
 def set_other_values(out, party, party_type):
 	# copy
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index 5494011..962a182 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -32,12 +32,13 @@
 			self.set_taxes("other_charges", "taxes_and_charges")
 					
 	def set_missing_lead_customer_details(self):
-		from erpnext.accounts.party import get_party_details
 		if self.doc.customer:
+			from erpnext.accounts.party import get_party_details
 			self.doc.update_if_missing(get_party_details(self.doc.customer))
 		
 		elif self.doc.lead:
-			self.doc.update_if_missing(self.get_lead_defaults())
+			from erpnext.selling.doctype.lead.lead import get_lead_details
+			self.doc.update_if_missing(get_lead_details(self.doc.lead))
 						
 	def set_price_list_and_item_details(self):
 		self.set_price_list_currency("Selling")
diff --git a/erpnext/hr/doctype/hr_settings/hr_settings.txt b/erpnext/hr/doctype/hr_settings/hr_settings.txt
index cd1cf05..d30dc0a 100644
--- a/erpnext/hr/doctype/hr_settings/hr_settings.txt
+++ b/erpnext/hr/doctype/hr_settings/hr_settings.txt
@@ -2,7 +2,7 @@
  {
   "creation": "2013-08-02 13:45:23", 
   "docstatus": 0, 
-  "modified": "2013-12-20 19:23:14", 
+  "modified": "2014-02-19 17:40:18", 
   "modified_by": "Administrator", 
   "owner": "Administrator"
  }, 
@@ -47,6 +47,7 @@
   "label": "Employee Settings"
  }, 
  {
+  "default": "Naming Series", 
   "description": "Employee record is created using selected field. ", 
   "doctype": "DocField", 
   "fieldname": "emp_created_by", 
diff --git a/erpnext/public/js/utils/party.js b/erpnext/public/js/utils/party.js
index cbd9186..9063b00 100644
--- a/erpnext/public/js/utils/party.js
+++ b/erpnext/public/js/utils/party.js
@@ -36,22 +36,23 @@
 	});
 }
 
-erpnext.utils.get_address_display = function(frm, address_field) {
+erpnext.utils.get_address_display = function(frm, address_field, display_field) {
 	if(frm.updating_party_details) return;
 	if(!address_field) {
 		if(frm.doc.customer) {
 			address_field = "customer_address";
-		} else {
+		} else if(frm.doc.supplier) {
 			address_field = "supplier_address";
-		}
+		} else return;
 	} 
+	if(!display_field) display_field = "address_display";
 	if(frm.doc[address_field]) {
 		frappe.call({
 			method: "erpnext.utilities.doctype.address.address.get_address_display",
-			args: {address: frm.doc[address_field] },
+			args: {"address_dict": frm.doc[address_field] },
 			callback: function(r) {
 				if(r.message)
-					frm.set_value("address_display", r.message)
+					frm.set_value(display_field, r.message)
 			}
 		})
 	}
@@ -60,7 +61,7 @@
 erpnext.utils.get_contact_details = function(frm) {
 	if(frm.updating_party_details) return;
 	
-	if(frm.doc[address_field]) {
+	if(frm.doc["contact_person"]) {
 		frappe.call({
 			method: "erpnext.utilities.doctype.contact.contact.get_contact_details",
 			args: {contact: frm.doc.contact_person },
diff --git a/erpnext/selling/doctype/lead/lead.py b/erpnext/selling/doctype/lead/lead.py
index f0374da..f8f4b47 100644
--- a/erpnext/selling/doctype/lead/lead.py
+++ b/erpnext/selling/doctype/lead/lead.py
@@ -4,8 +4,8 @@
 from __future__ import unicode_literals
 import frappe
 from frappe import _
-from frappe.utils import cstr, validate_email_add, cint, extract_email_id
-from frappe import session, msgprint
+from frappe.utils import cstr, validate_email_add, cint
+from frappe import session
 
 	
 from erpnext.controllers.selling_controller import SellingController
@@ -121,4 +121,27 @@
 			}
 		}}, target_doclist)
 		
-	return [d if isinstance(d, dict) else d.fields for d in doclist]
\ No newline at end of file
+	return [d if isinstance(d, dict) else d.fields for d in doclist]
+	
+@frappe.whitelist()
+def get_lead_details(lead):
+	if not lead: return {}
+	
+	from erpnext.accounts.party import set_address_details
+	out = frappe._dict()
+	
+	lead_bean = frappe.bean("Lead", lead)
+	lead = lead_bean.doc
+		
+	out.update({
+		"territory": lead.territory,
+		"customer_name": lead.company_name or lead.lead_name,
+		"contact_display": lead.lead_name,
+		"contact_email": lead.email_id,
+		"contact_mobile": lead.mobile_no,
+		"contact_phone": lead.phone,
+	})
+	
+	set_address_details(out, lead, "Lead")
+
+	return out
\ No newline at end of file
diff --git a/erpnext/selling/doctype/quotation/quotation.js b/erpnext/selling/doctype/quotation/quotation.js
index 75a6312..28a588a 100644
--- a/erpnext/selling/doctype/quotation/quotation.js
+++ b/erpnext/selling/doctype/quotation/quotation.js
@@ -21,15 +21,6 @@
 			doc.quotation_to = "Customer";
 		else if(doc.lead && !doc.quotation_to)
 			doc.quotation_to = "Lead";
-
-		// to overwrite the customer_filter trigger from queries.js
-		if (doc.lead) {
-			$.each(["customer_address", "shipping_address_name"], 
-				function(i, opts) {
-					me.frm.set_query(opts, erpnext.queries["lead_filter"]);
-				}
-			);
-		}
 	},
 	refresh: function(doc, dt, dn) {
 		this._super(doc, dt, dn);
@@ -75,11 +66,19 @@
 	},
 	
 	quotation_to: function() {
+		var me = this;
 		this.frm.toggle_reqd("lead", this.frm.doc.quotation_to == "Lead");
 		this.frm.toggle_reqd("customer", this.frm.doc.quotation_to == "Customer");
 		if (this.frm.doc.quotation_to == "Lead") {
 			this.frm.set_value("customer", null);
 			this.frm.set_value("contact_person", null);
+			
+			// to overwrite the customer_filter trigger from queries.js
+			$.each(["customer_address", "shipping_address_name"], 
+				function(i, opts) {
+					me.frm.set_query(opts, erpnext.queries["lead_filter"]);
+				}
+			);
 		}
 		else if (this.frm.doc.quotation_to == "Customer")
 			this.frm.set_value("lead", null);
@@ -100,6 +99,23 @@
 			return this._super(party_field);
 		}
 	},
+	
+	lead: function() {
+		var me = this;
+		frappe.call({
+			method: "erpnext.selling.doctype.lead.lead.get_lead_details",
+			args: { "lead": this.frm.doc.lead },
+			callback: function(r) {
+				if(r.message) {
+					me.frm.updating_party_details = true;
+					me.frm.set_value(r.message);
+					me.frm.refresh();
+					me.frm.updating_party_details = false;
+					
+				}
+			}
+		})
+	}
 });
 
 cur_frm.script_manager.make(erpnext.selling.QuotationController);
@@ -108,24 +124,6 @@
 	return{	query: "erpnext.controllers.queries.lead_query" }
 }
 
-cur_frm.cscript.lead = function(doc, cdt, cdn) {
-	if(doc.lead) {
-		unhide_field('territory');
-		return cur_frm.call({
-			doc: cur_frm.doc,
-			method: "set_lead_defaults",
-			callback: function(r) {
-				if(!r.exc) {
-					cur_frm.refresh_fields();
-				}
-			}
-		});
-	}
-}
-
-
-// Make Sales Order
-// =====================================================================================
 cur_frm.cscript['Make Sales Order'] = function() {
 	frappe.model.open_mapped_doc({
 		method: "erpnext.selling.doctype.quotation.quotation.make_sales_order",
@@ -133,8 +131,6 @@
 	})
 }
 
-// declare order lost
-//-------------------------
 cur_frm.cscript['Declare Order Lost'] = function(){
 	var dialog = new frappe.ui.Dialog({
 		title: "Set as Lost",
diff --git a/erpnext/selling/doctype/quotation/quotation.py b/erpnext/selling/doctype/quotation/quotation.py
index eb135f6..ead242b 100644
--- a/erpnext/selling/doctype/quotation/quotation.py
+++ b/erpnext/selling/doctype/quotation/quotation.py
@@ -158,7 +158,7 @@
 			try:
 				customer.insert()
 				return customer
-			except NameError, e:
+			except NameError:
 				if frappe.defaults.get_global_default('cust_master_name') == "Customer Name":
 					customer.run_method("autoname")
 					customer.doc.name += "-" + lead_name
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index 6eb2136..1b48a8e 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -111,6 +111,10 @@
 		erpnext.utils.get_address_display(this.frm, "customer_address");
 	},
 	
+	shipping_address_name: function() {
+		erpnext.utils.get_address_display(this.frm, "shipping_address_name", "shipping_address");
+	},
+	
 	contact_person: function() {
 		erpnext.utils.get_contact_details(this.frm);
 	},
@@ -552,28 +556,6 @@
 			if(df) df.label = label;
 		});
 	},
-	
-	shipping_address_name: function () {
-		var me = this;
-		if(this.frm.doc.shipping_address_name) {
-			frappe.model.with_doc("Address", this.frm.doc.shipping_address_name, function(name) {
-				var address = frappe.model.get_doc("Address", name);
-			
-				var out = $.map(["address_line1", "address_line2", "city"], 
-					function(f) { return address[f]; });
-
-				var state_pincode = $.map(["state", "pincode"], function(f) { return address[f]; }).join(" ");
-				if(state_pincode) out.push(state_pincode);
-			
-				if(address["country"]) out.push(address["country"]);
-			
-				out.concat($.map([["Phone:", address["phone"]], ["Fax:", address["fax"]]], 
-					function(val) { return val[1] ? val.join(" ") : null; }));
-			
-				me.frm.set_value("shipping_address", out.join("\n"));
-			});
-		}
-	}
 });
 
 // Help for Sales BOM items
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index df67c9c..f211cae 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -34,7 +34,7 @@
 	args = frappe._dict(args)
 	
 	if not args.get("transaction_type"):
-		args.transaction_type = "selling" if args.get("customer") else "buying"
+		args.transaction_type = "buying" if args.get("supplier") else "selling"
 		
 	if not args.get("price_list"):
 		args.price_list = args.get("selling_price_list") or args.get("buying_price_list")
diff --git a/erpnext/utilities/transaction_base.py b/erpnext/utilities/transaction_base.py
index 079b9d1..d8085f2 100644
--- a/erpnext/utilities/transaction_base.py
+++ b/erpnext/utilities/transaction_base.py
@@ -31,20 +31,6 @@
 					break
 
 		return self._party_type_and_name
-				
-	def get_lead_defaults(self):
-		out = self.get_default_address_and_contact("lead")
-		
-		lead = frappe.conn.get_value("Lead", self.doc.lead, 
-			["territory", "company_name", "lead_name"], as_dict=True) or {}
-
-		out["territory"] = lead.get("territory")
-		out["customer_name"] = lead.get("company_name") or lead.get("lead_name")
-
-		return out
-		
-	def set_lead_defaults(self):
-		self.doc.fields.update(self.get_lead_defaults())
 
 	def load_notification_message(self):
 		dt = self.doc.doctype.lower().replace(" ", "_")
