diff --git a/erpnext/shopping_cart/__init__.py b/erpnext/shopping_cart/__init__.py
index 656918b..8660003 100644
--- a/erpnext/shopping_cart/__init__.py
+++ b/erpnext/shopping_cart/__init__.py
@@ -9,6 +9,7 @@
 
 # TODO
 # validate stock of each item in Website Warehouse or have a list of possible warehouses in Shopping Cart Settings
+# Below functions are used for test cases
 
 def get_quotation(user=None):
 	if not user:
@@ -22,7 +23,8 @@
 		"order_type": "Shopping Cart",
 		party.doctype.lower(): party.name,
 		"docstatus": 0,
-		"contact_email": user
+		"contact_email": user,
+		"selling_price_list": "_Test Price List Rest of the World"
 	}
 
 	try:
@@ -60,35 +62,11 @@
 	quotation.save(ignore_permissions=True)
 	return quotation
 
-def set_address_in_cart(address_fieldname, address, user=None):
-	quotation = get_quotation(user=user)
-	validate_address(quotation, address_fieldname, address)
-
-	if quotation.get(address_fieldname) != address:
-		quotation.set(address_fieldname, address)
-		if address_fieldname=="customer_address":
-			quotation.set("address_display", None)
-		else:
-			quotation.set("shipping_address", None)
-
-		quotation.save(ignore_permissions=True)
-
-	return quotation
-
 def validate_item(item_code):
 	item = frappe.db.get_value("Item", item_code, ["item_name", "show_in_website"], as_dict=True)
 	if not item.show_in_website:
 		frappe.throw(_("{0} cannot be purchased using Shopping Cart").format(item.item_name))
 
-def validate_address(quotation, address_fieldname, address):
-	party = get_party(quotation.contact_email)
-	address_doc = frappe.get_doc(address)
-	if address_doc.get(party.doctype.lower()) != party.name:
-		if address_fieldname=="customer_address":
-			frappe.throw(_("Invalid Billing Address"))
-		else:
-			frappe.throw(_("Invalid Shipping Address"))
-
 def get_party(user):
 	def _get_party(user):
 		customer = frappe.db.get_value("Contact", {"email_id": user}, "customer")
@@ -122,5 +100,4 @@
 	territory = None
 	if frappe.session.get("session_country"):
 		territory = frappe.db.get_value("Territory", frappe.session.get("session_country"))
-
 	return territory or get_default_territory()
diff --git a/erpnext/shopping_cart/cart.py b/erpnext/shopping_cart/cart.py
index e39a54c..692f27d 100644
--- a/erpnext/shopping_cart/cart.py
+++ b/erpnext/shopping_cart/cart.py
@@ -222,7 +222,6 @@
 		quotation = _get_cart_quotation(party)
 
 	cart_settings = frappe.get_doc("Shopping Cart Settings")
-
 	billing_territory = get_address_territory(quotation.customer_address) or \
 		party.territory or get_root_of("Territory")
 
@@ -237,7 +236,6 @@
 def set_price_list_and_rate(quotation, cart_settings, billing_territory):
 	"""set price list based on billing territory"""
 	quotation.selling_price_list = cart_settings.get_price_list(billing_territory)
-
 	# reset values
 	quotation.price_list_currency = quotation.currency = \
 		quotation.plc_conversion_rate = quotation.conversion_rate = None
@@ -359,76 +357,3 @@
 				break
 
 	return territory
-
-import unittest
-test_dependencies = ["Item", "Price List", "Contact", "Shopping Cart Settings"]
-
-class TestCart(unittest.TestCase):
-	def tearDown(self):
-		return
-
-		cart_settings = frappe.get_doc("Shopping Cart Settings")
-		cart_settings.ignore_permissions = True
-		cart_settings.enabled = 0
-		cart_settings.save()
-
-	def enable_shopping_cart(self):
-		return
-		if not frappe.db.get_value("Shopping Cart Settings", None, "enabled"):
-			cart_settings = frappe.get_doc("Shopping Cart Settings")
-			cart_settings.ignore_permissions = True
-			cart_settings.enabled = 1
-			cart_settings.save()
-
-	def test_get_lead_or_customer(self):
-		frappe.session.user = "test@example.com"
-		party1 = get_lead_or_customer()
-		party2 = get_lead_or_customer()
-		self.assertEquals(party1.name, party2.name)
-		self.assertEquals(party1.doctype, "Lead")
-
-		frappe.session.user = "test_contact_customer@example.com"
-		party = get_lead_or_customer()
-		self.assertEquals(party.name, "_Test Customer")
-
-	def test_add_to_cart(self):
-		self.enable_shopping_cart()
-		frappe.session.user = "test@example.com"
-
-		update_cart("_Test Item", 1)
-
-		quotation = _get_cart_quotation()
-		quotation_items = quotation.get("quotation_details", {"item_code": "_Test Item"})
-		self.assertTrue(quotation_items)
-		self.assertEquals(quotation_items[0].qty, 1)
-
-		return quotation
-
-	def test_update_cart(self):
-		self.test_add_to_cart()
-
-		update_cart("_Test Item", 5)
-
-		quotation = _get_cart_quotation()
-		quotation_items = quotation.get("quotation_details", {"item_code": "_Test Item"})
-		self.assertTrue(quotation_items)
-		self.assertEquals(quotation_items[0].qty, 5)
-
-		return quotation
-
-	def test_remove_from_cart(self):
-		quotation0 = self.test_add_to_cart()
-
-		update_cart("_Test Item", 0)
-
-		quotation = _get_cart_quotation()
-		self.assertEquals(quotation0.name, quotation.name)
-
-		quotation_items = quotation.get("quotation_details", {"item_code": "_Test Item"})
-		self.assertEquals(quotation_items, [])
-
-	def test_place_order(self):
-		quotation = self.test_update_cart()
-		sales_order_name = place_order()
-		sales_order = frappe.get_doc("Sales Order", sales_order_name)
-		self.assertEquals(sales_order.getone({"item_code": "_Test Item"}).prevdoc_docname, quotation.name)
diff --git a/erpnext/utilities/repost_stock.py b/erpnext/utilities/repost_stock.py
index 3a58d2b..5f18647 100644
--- a/erpnext/utilities/repost_stock.py
+++ b/erpnext/utilities/repost_stock.py
@@ -179,6 +179,8 @@
 		}
 
 		sle_doc = frappe.get_doc(sle_dict)
+		sle_doc.ignore_validate = True
+		sle_doc.ignore_links = True
 		sle_doc.insert()
 
 		args = sle_dict.copy()
