diff --git a/controllers/buying_controller.py b/controllers/buying_controller.py
index 35b9d25..ab9f45c 100644
--- a/controllers/buying_controller.py
+++ b/controllers/buying_controller.py
@@ -50,13 +50,12 @@
 					break
 					
 	def validate_warehouse(self):
-		from stock.utils import validate_warehouse_user, validate_warehouse_company
+		from stock.utils import validate_warehouse_company
 		
 		warehouses = list(set([d.warehouse for d in 
 			self.doclist.get({"doctype": self.tname}) if d.warehouse]))
 				
 		for w in warehouses:
-			validate_warehouse_user(w)
 			validate_warehouse_company(w, self.doc.company)
 
 	def get_purchase_tax_details(self):
diff --git a/hr/doctype/leave_application/leave_application.py b/hr/doctype/leave_application/leave_application.py
index 38ca306..f2f34d7 100755
--- a/hr/doctype/leave_application/leave_application.py
+++ b/hr/doctype/leave_application/leave_application.py
@@ -151,7 +151,7 @@
 		employee = webnotes.bean("Employee", self.doc.employee)
 		leave_approvers = [l.leave_approver for l in 
 			employee.doclist.get({"parentfield": "employee_leave_approvers"})]
-
+			
 		if len(leave_approvers) and self.doc.leave_approver not in leave_approvers:
 			msgprint(("[" + _("For Employee") + ' "' + self.doc.employee + '"] ' 
 				+ _("Leave Approver can be one of") + ": "
diff --git a/hr/doctype/leave_application/test_leave_application.py b/hr/doctype/leave_application/test_leave_application.py
index 9f8a8e1..ee15041 100644
--- a/hr/doctype/leave_application/test_leave_application.py
+++ b/hr/doctype/leave_application/test_leave_application.py
@@ -10,6 +10,9 @@
 	def tearDown(self):
 		webnotes.set_user("Administrator")
 		
+		# so that this test doesn't affect other tests
+		webnotes.conn.sql("""delete from `tabEmployee Leave Approver`""")
+		
 	def _clear_roles(self):
 		webnotes.conn.sql("""delete from `tabUserRole` where parent in 
 			("test@example.com", "test1@example.com", "test2@example.com")""")
@@ -162,10 +165,10 @@
 		
 		from webnotes.model.bean import BeanPermissionError
 		self.assertRaises(BeanPermissionError, application.submit)
-		
+
 		webnotes.conn.sql("""delete from `tabEmployee Leave Approver` where parent=%s""",
 			"_T-Employee-0001")
-		
+			
 	def _test_leave_approval_valid_leave_approver_insert(self):
 		self._clear_applications()
 		self._add_employee_leave_approver("_T-Employee-0001", "test2@example.com")
diff --git a/hr/doctype/leave_block_list/test_leave_block_list.py b/hr/doctype/leave_block_list/test_leave_block_list.py
index 0f0da65..d2aab71 100644
--- a/hr/doctype/leave_block_list/test_leave_block_list.py
+++ b/hr/doctype/leave_block_list/test_leave_block_list.py
@@ -8,23 +8,23 @@
 
 class TestLeaveBlockList(unittest.TestCase):
 	def tearDown(self):
-		webnotes.session.user = "Administrator"
+		 webnotes.set_user("Administrator")
 		
 	def test_get_applicable_block_dates(self):
-		webnotes.session.user = "test@example.com"
+		webnotes.set_user("test@example.com")
 		webnotes.conn.set_value("Department", "_Test Department", "leave_block_list", 
 			"_Test Leave Block List")
 		self.assertTrue("2013-01-02" in 
 			[d.block_date for d in get_applicable_block_dates("2013-01-01", "2013-01-03")])
 			
 	def test_get_applicable_block_dates_for_allowed_user(self):
-		webnotes.session.user = "test1@example.com"
+		webnotes.set_user("test1@example.com")
 		webnotes.conn.set_value("Department", "_Test Department 1", "leave_block_list", 
 			"_Test Leave Block List")
 		self.assertEquals([], [d.block_date for d in get_applicable_block_dates("2013-01-01", "2013-01-03")])
 	
 	def test_get_applicable_block_dates_all_lists(self):
-		webnotes.session.user = "test1@example.com"
+		webnotes.set_user("test1@example.com")
 		webnotes.conn.set_value("Department", "_Test Department 1", "leave_block_list", 
 			"_Test Leave Block List")
 		self.assertTrue("2013-01-02" in 
diff --git a/manufacturing/doctype/production_order/production_order.py b/manufacturing/doctype/production_order/production_order.py
index bcb13f8..e00b3dc 100644
--- a/manufacturing/doctype/production_order/production_order.py
+++ b/manufacturing/doctype/production_order/production_order.py
@@ -54,10 +54,9 @@
 			self.validate_production_order_against_so()
 			
 	def validate_warehouse(self):
-		from stock.utils import validate_warehouse_user, validate_warehouse_company
+		from stock.utils import validate_warehouse_company
 		
 		for w in [self.doc.fg_warehouse, self.doc.wip_warehouse]:
-			validate_warehouse_user(w)
 			validate_warehouse_company(w, self.doc.company)
 	
 	def validate_production_order_against_so(self):
diff --git a/patches/1311/p07_move_warehouse_user_to_restrictions.py b/patches/1311/p07_move_warehouse_user_to_restrictions.py
new file mode 100644
index 0000000..1d7338a
--- /dev/null
+++ b/patches/1311/p07_move_warehouse_user_to_restrictions.py
@@ -0,0 +1,12 @@
+# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import webnotes
+
+def execute():
+	from core.page.user_properties import user_properties
+	for warehouse, profile in webnotes.conn.sql("""select parent, user from `tabWarehouse User`"""):
+		user_properties.add(profile, "Warehouse", warehouse)
+		
+	webnotes.delete_doc("DocType", "Warehouse User")
\ No newline at end of file
diff --git a/patches/patch_list.py b/patches/patch_list.py
index 5da1433..6c6eb55 100644
--- a/patches/patch_list.py
+++ b/patches/patch_list.py
@@ -263,4 +263,5 @@
 	"patches.1311.p07_scheduler_errors_digest",
 	"patches.1311.p08_email_digest_recipients",
 	"execute:webnotes.delete_doc('DocType', 'Warehouse Type')",
+	"patches.1311.p07_move_warehouse_user_to_restrictions",
 ]
\ No newline at end of file
diff --git a/selling/doctype/sales_order/sales_order.py b/selling/doctype/sales_order/sales_order.py
index a66c446..d760baf 100644
--- a/selling/doctype/sales_order/sales_order.py
+++ b/selling/doctype/sales_order/sales_order.py
@@ -127,13 +127,12 @@
 		if not self.doc.delivery_status: self.doc.delivery_status = 'Not Delivered'		
 		
 	def validate_warehouse(self):
-		from stock.utils import validate_warehouse_user, validate_warehouse_company
+		from stock.utils import validate_warehouse_company
 		
 		warehouses = list(set([d.reserved_warehouse for d in 
 			self.doclist.get({"doctype": self.tname}) if d.reserved_warehouse]))
 				
 		for w in warehouses:
-			validate_warehouse_user(w)
 			validate_warehouse_company(w, self.doc.company)
 		
 	def validate_with_previous_doc(self):
diff --git a/selling/doctype/sales_order/test_sales_order.py b/selling/doctype/sales_order/test_sales_order.py
index 1549b24..808adba 100644
--- a/selling/doctype/sales_order/test_sales_order.py
+++ b/selling/doctype/sales_order/test_sales_order.py
@@ -6,6 +6,9 @@
 import unittest
 
 class TestSalesOrder(unittest.TestCase):
+	def tearDown(self):
+		webnotes.set_user("Administrator")
+		
 	def test_make_material_request(self):
 		from selling.doctype.sales_order.sales_order import make_material_request
 		
@@ -276,28 +279,29 @@
 			so.doclist[1].reserved_warehouse, 20.0)
 
 	def test_warehouse_user(self):
+		webnotes.defaults.add_default("Warehouse", "_Test Warehouse 1 - _TC1", "test@example.com", "Restriction")
 		webnotes.bean("Profile", "test@example.com").get_controller()\
 			.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
 			
 		webnotes.bean("Profile", "test2@example.com").get_controller()\
 			.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
 		
-		webnotes.session.user = "test@example.com"
+		webnotes.set_user("test@example.com")
 
-		from stock.utils import UserNotAllowedForWarehouse
+		from webnotes.model.bean import BeanPermissionError
 		so = webnotes.bean(copy = test_records[0])
 		so.doc.company = "_Test Company 1"
 		so.doc.conversion_rate = 0.02
 		so.doc.plc_conversion_rate = 0.02
 		so.doclist[1].reserved_warehouse = "_Test Warehouse 2 - _TC1"
-		self.assertRaises(UserNotAllowedForWarehouse, so.insert)
+		self.assertRaises(BeanPermissionError, so.insert)
 
-		webnotes.session.user = "test2@example.com"
+		webnotes.set_user("test2@example.com")
 		so.insert()
+		
+		webnotes.defaults.clear_default("Warehouse", "_Test Warehouse 1 - _TC1", "test@example.com", parenttype="Restriction")
 
-		webnotes.session.user = "Administrator"
-
-test_dependencies = ["Sales BOM"]
+test_dependencies = ["Sales BOM", "Currency Exchange"]
 	
 test_records = [
 	[
diff --git a/startup/query_handlers.py b/startup/query_handlers.py
index 753d088..72ad8fa 100644
--- a/startup/query_handlers.py
+++ b/startup/query_handlers.py
@@ -4,6 +4,5 @@
 from __future__ import unicode_literals
 
 standard_queries = {
-	"Warehouse": "stock.utils.get_warehouse_list",
 	"Customer": "selling.utils.get_customer_list",
 }
\ No newline at end of file
diff --git a/stock/doctype/stock_entry/test_stock_entry.py b/stock/doctype/stock_entry/test_stock_entry.py
index d6f34f6..781fca4 100644
--- a/stock/doctype/stock_entry/test_stock_entry.py
+++ b/stock/doctype/stock_entry/test_stock_entry.py
@@ -7,9 +7,9 @@
 from stock.doctype.serial_no.serial_no import *
 from stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
 
-
 class TestStockEntry(unittest.TestCase):
 	def tearDown(self):
+		webnotes.set_user("Administrator")
 		set_perpetual_inventory(0)
 		if hasattr(self, "old_default_company"):
 			webnotes.conn.set_default("company", self.old_default_company)
@@ -39,46 +39,6 @@
 		
 		webnotes.conn.set_default("company", self.old_default_company)
 
-	def test_warehouse_company_validation(self):
-		set_perpetual_inventory(0)
-		self._clear_stock_account_balance()
-		webnotes.bean("Profile", "test2@example.com").get_controller()\
-			.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
-		webnotes.session.user = "test2@example.com"
-
-		from stock.utils import InvalidWarehouseCompany
-		st1 = webnotes.bean(copy=test_records[0])
-		st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1"
-		st1.insert()
-		self.assertRaises(InvalidWarehouseCompany, st1.submit)
-		
-		webnotes.session.user = "Administrator"
-
-	def test_warehouse_user(self):
-		set_perpetual_inventory(0)
-		from stock.utils import UserNotAllowedForWarehouse
-
-		webnotes.bean("Profile", "test@example.com").get_controller()\
-			.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
-
-		webnotes.bean("Profile", "test2@example.com").get_controller()\
-			.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
-		webnotes.session.user = "test@example.com"
-		st1 = webnotes.bean(copy=test_records[0])
-		st1.doc.company = "_Test Company 1"
-		st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1"
-		st1.insert()
-		self.assertRaises(UserNotAllowedForWarehouse, st1.submit)
-
-		webnotes.session.user = "test2@example.com"
-		st1 = webnotes.bean(copy=test_records[0])
-		st1.doc.company = "_Test Company 1"
-		st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1"
-		st1.insert()
-		st1.submit()
-		
-		webnotes.session.user = "Administrator"
-
 	def test_material_receipt_gl_entry(self):
 		self._clear_stock_account_balance()
 		set_perpetual_inventory()
@@ -799,7 +759,49 @@
 		
 		serial_no = get_serial_nos(se.doclist[1].serial_no)[0]
 		self.assertFalse(webnotes.conn.get_value("Serial No", serial_no, "warehouse"))
+		
+	def test_warehouse_company_validation(self):
+		set_perpetual_inventory(0)
+		self._clear_stock_account_balance()
+		webnotes.bean("Profile", "test2@example.com").get_controller()\
+			.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
+		webnotes.set_user("test2@example.com")
 
+		from stock.utils import InvalidWarehouseCompany
+		st1 = webnotes.bean(copy=test_records[0])
+		st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1"
+		st1.insert()
+		self.assertRaises(InvalidWarehouseCompany, st1.submit)
+		
+	# permission tests
+	def test_warehouse_user(self):
+		import webnotes.defaults
+		from webnotes.model.bean import BeanPermissionError
+		set_perpetual_inventory(0)
+		
+		webnotes.defaults.add_default("Warehouse", "_Test Warehouse 1 - _TC1", "test@example.com", "Restriction")
+		webnotes.defaults.add_default("Warehouse", "_Test Warehouse 2 - _TC1", "test2@example.com", "Restriction")
+		webnotes.bean("Profile", "test@example.com").get_controller()\
+			.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
+		webnotes.bean("Profile", "test2@example.com").get_controller()\
+			.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
+
+		webnotes.set_user("test@example.com")
+		st1 = webnotes.bean(copy=test_records[0])
+		st1.doc.company = "_Test Company 1"
+		st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1"
+		self.assertRaises(BeanPermissionError, st1.insert)
+
+		webnotes.set_user("test2@example.com")
+		st1 = webnotes.bean(copy=test_records[0])
+		st1.doc.company = "_Test Company 1"
+		st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1"
+		st1.insert()
+		st1.submit()
+		
+		webnotes.defaults.clear_default("Warehouse", "_Test Warehouse 1 - _TC1", "test@example.com", parenttype="Restriction")
+		webnotes.defaults.clear_default("Warehouse", "_Test Warehouse 2 - _TC1", "test2@example.com", parenttype="Restriction")
+		
 def make_serialized_item():
 	se = webnotes.bean(copy=test_records[0])
 	se.doclist[1].item_code = "_Test Serialized Item With Series"
diff --git a/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
index f059451..e988434 100644
--- a/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
+++ b/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
@@ -13,10 +13,9 @@
 		self.doclist = doclist
 
 	def validate(self):
-		from stock.utils import validate_warehouse_user, validate_warehouse_company
+		from stock.utils import validate_warehouse_company
 		self.validate_mandatory()
 		self.validate_item()
-		validate_warehouse_user(self.doc.warehouse)
 		validate_warehouse_company(self.doc.warehouse, self.doc.company)
 		self.scrub_posting_time()
 		
diff --git a/stock/doctype/warehouse/test_warehouse.py b/stock/doctype/warehouse/test_warehouse.py
index ffc5a28..b0e7641 100644
--- a/stock/doctype/warehouse/test_warehouse.py
+++ b/stock/doctype/warehouse/test_warehouse.py
@@ -19,10 +19,6 @@
 		"warehouse_name": "_Test Warehouse 2",
 		"create_account_under": "Stock Assets - _TC",
 		"company": "_Test Company 1"
-	}, {
-		"doctype": "Warehouse User",
-		"parentfield": "warehouse_users",
-		"user": "test2@example.com"
 	}],
 	[{
 		"doctype": "Warehouse",
diff --git a/stock/utils.py b/stock/utils.py
index 4f5e11a..c6e5f2d 100644
--- a/stock/utils.py
+++ b/stock/utils.py
@@ -8,7 +8,6 @@
 from webnotes.defaults import get_global_default
 from webnotes.utils.email_lib import sendmail
 
-class UserNotAllowedForWarehouse(webnotes.ValidationError): pass
 class InvalidWarehouseCompany(webnotes.ValidationError): pass
 	
 def get_stock_balance_on(warehouse, posting_date=None):
@@ -191,33 +190,7 @@
 			raise_exception=1)
 		
 	return valid_serial_nos
-	
-def get_warehouse_list(doctype, txt, searchfield, start, page_len, filters):
-	"""used in search queries"""
-	wlist = []
-	for w in webnotes.conn.sql_list("""select name from tabWarehouse 
-		where name like '%%%s%%'""" % txt):
-		if webnotes.session.user=="Administrator":
-			wlist.append([w])
-		else:
-			warehouse_users = webnotes.conn.sql_list("""select user from `tabWarehouse User` 
-				where parent=%s""", w)
-			if not warehouse_users:
-				wlist.append([w])
-			elif webnotes.session.user in warehouse_users:
-				wlist.append([w])
-	return wlist
 
-def validate_warehouse_user(warehouse):
-	if webnotes.session.user=="Administrator" or not warehouse:
-		return
-	warehouse_users = [p[0] for p in webnotes.conn.sql("""select user from `tabWarehouse User`
-		where parent=%s""", warehouse)]
-				
-	if warehouse_users and not (webnotes.session.user in warehouse_users):
-		webnotes.throw(_("Not allowed entry in Warehouse") \
-			+ ": " + warehouse, UserNotAllowedForWarehouse)
-			
 def validate_warehouse_company(warehouse, company):
 	warehouse_company = webnotes.conn.get_value("Warehouse", warehouse, "company")
 	if warehouse_company and warehouse_company != company:
