diff --git a/website/helpers/cart.py b/website/helpers/cart.py
index ea72e40..2149534 100644
--- a/website/helpers/cart.py
+++ b/website/helpers/cart.py
@@ -58,6 +58,10 @@
 	qty = flt(qty)
 	if qty == 0:
 		quotation.set_doclist(quotation.doclist.get({"item_code": ["!=", item_code]}))
+		if not quotation.doclist.get({"parentfield": "quotation_details"}) and \
+			not quotation.doc.fields.get("__islocal"):
+				quotation.__delete = True
+			
 	else:
 		quotation_items = quotation.doclist.get({"item_code": item_code})
 		if not quotation_items:
@@ -72,8 +76,12 @@
 	
 	apply_cart_settings(quotation=quotation)
 
-	quotation.ignore_permissions = True
-	quotation.save()
+	if hasattr(quotation, "__delete"):
+		webnotes.delete_doc("Quotation", quotation.doc.name, ignore_permissions=True)
+		quotation = _get_cart_quotation()
+	else:
+		quotation.ignore_permissions = True
+		quotation.save()
 	
 	set_cart_count(quotation)
 	
@@ -191,7 +199,7 @@
 	for d in doclist:
 		if d.item_code:
 			d.fields.update(webnotes.conn.get_value("Item", d.item_code, 
-				["website_image", "web_short_description", "page_name"], as_dict=True))
+				["website_image", "description", "page_name"], as_dict=True))
 			d.formatted_rate = fmt_money(d.export_rate, currency=doclist[0].currency)
 			d.formatted_amount = fmt_money(d.export_amount, currency=doclist[0].currency)
 		elif d.charge_type:
@@ -215,7 +223,7 @@
 	else:
 		qbean = webnotes.bean({
 			"doctype": "Quotation",
-			"naming_series": "QTN-CART-",
+			"naming_series": webnotes.defaults.get_user_default("shopping_cart_quotation_series") or "QTN-CART-",
 			"quotation_to": party.doctype,
 			"company": webnotes.defaults.get_user_default("company"),
 			"order_type": "Shopping Cart",
@@ -224,7 +232,10 @@
 			(party.doctype.lower()): party.name
 		})
 		
-		# map_contact_fields(qbean, party)
+		if party.doctype == "Customer":
+			qbean.doc.contact_person = webnotes.conn.get_value("Contact", {"email_id": webnotes.session.user,
+				"customer": party.name})
+			qbean.run_method("set_contact_fields")
 		
 		qbean.run_method("onload_post_render")
 		apply_cart_settings(party, qbean)
@@ -259,10 +270,11 @@
 	party_bean.save()
 	
 	qbean = _get_cart_quotation(party)
-	qbean.doc.customer_name = company_name or fullname
-	qbean.run_method("set_contact_fields")
-	qbean.ignore_permissions = True
-	qbean.save()
+	if not qbean.doc.fields.get("__islocal"):
+		qbean.doc.customer_name = company_name or fullname
+		qbean.run_method("set_contact_fields")
+		qbean.ignore_permissions = True
+		qbean.save()
 
 def apply_cart_settings(party=None, quotation=None):
 	if not party:
@@ -374,27 +386,26 @@
 	
 	return territory
 	
-@webnotes.whitelist()
-def checkout():
-	quotation = _get_cart_quotation()
-	
-	quotation.ignore_permissions = True
-	quotation.submit()
-	
-	from selling.doctype.quotation.quotation import make_sales_order
-	
-	sales_order = webnotes.bean(make_sales_order(quotation.doc.name))
-		
-	sales_order.ignore_permissions = True
-	sales_order.insert()
-	sales_order.submit()
-	
-	return sales_order
-
 import unittest
-test_dependencies = ["Item", "Price List", "Contact"]
+test_dependencies = ["Item", "Price List", "Contact", "Shopping Cart Settings"]
 
 class TestCart(unittest.TestCase):
+	def tearDown(self):
+		return
+		
+		cart_settings = webnotes.bean("Shopping Cart Settings")
+		cart_settings.ignore_permissions = True
+		cart_settings.doc.enabled = 0
+		cart_settings.save()
+	
+	def enable_shopping_cart(self):
+		return
+		if not webnotes.conn.get_value("Shopping Cart Settings", None, "enabled"):
+			cart_settings = webnotes.bean("Shopping Cart Settings")
+			cart_settings.ignore_permissions = True
+			cart_settings.doc.enabled = 1
+			cart_settings.save()
+			
 	def test_get_lead_or_customer(self):
 		webnotes.session.user = "test@example.com"
 		party1 = get_lead_or_customer()
@@ -407,7 +418,9 @@
 		self.assertEquals(party.name, "_Test Customer")
 		
 	def test_add_to_cart(self):
+		self.enable_shopping_cart()
 		webnotes.session.user = "test@example.com"
+		
 		update_cart("_Test Item", 1)
 		
 		quotation = _get_cart_quotation()
@@ -440,8 +453,9 @@
 		quotation_items = quotation.doclist.get({"parentfield": "quotation_details", "item_code": "_Test Item"})
 		self.assertEquals(quotation_items, [])
 		
-	def test_checkout(self):
+	def test_place_order(self):
 		quotation = self.test_update_cart()
-		sales_order = checkout()
+		sales_order_name = place_order()
+		sales_order = webnotes.bean("Sales Order", sales_order_name)
 		self.assertEquals(sales_order.doclist.getone({"item_code": "_Test Item"}).prevdoc_docname, quotation.doc.name)
 		
\ No newline at end of file
