diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.json b/erpnext/accounts/doctype/pos_profile/pos_profile.json
index 2740ef2..6c09c6e 100644
--- a/erpnext/accounts/doctype/pos_profile/pos_profile.json
+++ b/erpnext/accounts/doctype/pos_profile/pos_profile.json
@@ -2,7 +2,7 @@
  "allow_copy": 0, 
  "allow_guest_to_view": 0, 
  "allow_import": 0, 
- "allow_rename": 0, 
+ "allow_rename": 1, 
  "autoname": "field:pos_profile_name", 
  "beta": 0, 
  "creation": "2013-05-24 12:15:51", 
@@ -315,7 +315,7 @@
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
-  },
+  }, 
   {
    "allow_bulk_edit": 0, 
    "allow_on_submit": 0, 
@@ -1508,7 +1508,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2017-10-27 06:45:32.957674", 
+ "modified": "2017-11-24 14:08:09.184226", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "POS Profile", 
@@ -1558,6 +1558,7 @@
  "quick_entry": 0, 
  "read_only": 0, 
  "read_only_onload": 0, 
+ "search_fields": "pos_profile_name", 
  "show_name_in_global_search": 0, 
  "sort_field": "modified", 
  "sort_order": "DESC", 
diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.py b/erpnext/accounts/doctype/pos_profile/pos_profile.py
index 65b0e7c..c70526c 100644
--- a/erpnext/accounts/doctype/pos_profile/pos_profile.py
+++ b/erpnext/accounts/doctype/pos_profile/pos_profile.py
@@ -4,30 +4,34 @@
 from __future__ import unicode_literals
 import frappe
 from frappe import msgprint, _
-from frappe.utils import cint
+from frappe.utils import cint, now
 from erpnext.accounts.doctype.sales_invoice.sales_invoice import set_account_for_mode_of_payment
 
 from frappe.model.document import Document
 
 class POSProfile(Document):
 	def validate(self):
-		# self.check_for_duplicate()
+		self.validate_default_profile()
 		self.validate_all_link_fields()
 		self.validate_duplicate_groups()
 		self.check_default_payment()
 		self.validate_customer_territory_group()
 
-	def check_for_duplicate(self):
-		res = frappe.db.sql("""select name, user from `tabPOS Profile`
-			where ifnull(user, '') = %s and name != %s and company = %s and ifnull(disabled, 0) != 1""",
-			(self.user, self.name, self.company))
-		if res:
-			if res[0][1]:
-				msgprint(_("POS Profile {0} already created for user: {1} and company {2}").format(res[0][0],
-					res[0][1], self.company), raise_exception=1)
-			else:
-				msgprint(_("Global POS Profile {0} already created for company {1}").format(res[0][0],
-					self.company), raise_exception=1)
+	def validate_default_profile(self):
+		for row in self.applicable_for_users:
+			res = frappe.db.sql("""select pf.name
+				from
+					`tabPOS Profile User` pfu, `tabPOS Profile` pf
+				where
+					pf.name = pfu.parent and pfu.user = %s and pf.name != %s and pf.company = %s
+					and pfu.default=1""", (row.user, self.name, self.company))
+
+			if row.default and res:
+				msgprint(_("Already set default in pos profile {0} for user {1}, kindly disabled default")
+					.format(res[0][0], row.user), raise_exception=1)
+			elif not row.default and not res:
+				msgprint(_("Row {0}: set atleast one default pos profile for user {1}")
+					.format(row.idx, row.user), raise_exception=1)
 
 	def validate_all_link_fields(self):
 		accounts = {"Account": [self.income_account,
@@ -95,44 +99,58 @@
 def get_series():
 	return frappe.get_meta("Sales Invoice").get_field("naming_series").options or ""
 
-@frappe.whitelist()
-def get_pos_profiles_for_user(user=None):
-	out = []
-	if not user:
-		user = frappe.session.user
+def pos_profile_query(doctype, txt, searchfield, start, page_len, filters):
+	user = frappe.session['user']
+	company = filters.get('company') or frappe.defaults.get_user_default('company')
 
-	res = frappe.db.sql('''
-		select
-			parent
+	args = {
+		'user': user,
+		'start': start,
+		'company': company,
+		'page_len': page_len,
+		'txt': '%%%s%%' % txt
+	}
+
+	pos_profile = frappe.db.sql("""select pf.name, pf.pos_profile_name
 		from
-			`tabPOS Profile User`
+			`tabPOS Profile` pf, `tabPOS Profile User` pfu
 		where
-			user = %s
-	''', (user), as_dict=1)
+			pfu.parent = pf.name and pfu.user = %(user)s and pf.company = %(company)s
+			and (pf.name like %(txt)s or pf.pos_profile_name like %(txt)s)
+			and pf.disabled = 0 limit %(start)s, %(page_len)s""", args)
 
-	if not res:
-		company = frappe.defaults.get_user_default('company')
-		res = frappe.db.sql('''
-			select
-				pos_profile_name
+	if not pos_profile:
+		del args['user']
+
+		pos_profile = frappe.db.sql("""select pf.name, pf.pos_profile_name
 			from
-				`tabPOS Profile`
+				`tabPOS Profile` pf left join `tabPOS Profile User` pfu
+			on
+				pf.name = pfu.parent
 			where
-				company = %s
-		''', (company), as_dict=1)
+				ifnull(pfu.user, '') = '' and pf.company = %(company)s and
+				(pf.name like %(txt)s or pf.pos_profile_name like %(txt)s)
+				and pf.disabled = 0""", args)
 
-		out = [r.pos_profile_name for r in res]
-
-		return out
-
-	for r in res:
-		name = frappe.db.get_value('POS Profile', r.parent, 'pos_profile_name')
-		out.append(name)
-
-	return out
+	return pos_profile
 
 @frappe.whitelist()
-def get_pos_profile(pos_profile_name=None):
-	if not pos_profile_name: return
-	name = frappe.db.get_value('POS Profile', { 'pos_profile_name': pos_profile_name })
-	return frappe.get_doc('POS Profile', name)
+def set_default_profile(pos_profile, company):
+	modified = now()
+	user = frappe.session.user
+	company = frappe.db.escape(company)
+
+	if pos_profile and company:
+		frappe.db.sql(""" update `tabPOS Profile User` pfu, `tabPOS Profile` pf
+			set
+				pfu.default = 0, pf.modified = %s, pf.modified_by = %s
+			where
+				pfu.user = %s and pf.name = pfu.parent and pf.company = %s
+				and pfu.default = 1""", (modified, user, user, company), auto_commit=1)
+
+		frappe.db.sql(""" update `tabPOS Profile User` pfu, `tabPOS Profile` pf
+			set
+				pfu.default = 1, pf.modified = %s, pf.modified_by = %s
+			where
+				pfu.user = %s and pf.name = pfu.parent and pf.company = %s and pf.name = %s
+			""", (modified, user, user, company, pos_profile), auto_commit=1)
diff --git a/erpnext/accounts/doctype/pos_profile_user/pos_profile_user.json b/erpnext/accounts/doctype/pos_profile_user/pos_profile_user.json
index 22c7f72..2fb66d2 100644
--- a/erpnext/accounts/doctype/pos_profile_user/pos_profile_user.json
+++ b/erpnext/accounts/doctype/pos_profile_user/pos_profile_user.json
@@ -18,6 +18,36 @@
    "bold": 0, 
    "collapsible": 0, 
    "columns": 0, 
+   "fieldname": "default", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 1, 
+   "in_standard_filter": 0, 
+   "label": "Default", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_bulk_edit": 0, 
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
    "fieldname": "user", 
    "fieldtype": "Link", 
    "hidden": 0, 
@@ -54,7 +84,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2017-10-27 16:46:12.784244", 
+ "modified": "2017-11-23 17:13:16.005475", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "POS Profile User", 
diff --git a/erpnext/accounts/doctype/pos_profile_user/test_pos_profile_user.js b/erpnext/accounts/doctype/pos_profile_user/test_pos_profile_user.js
new file mode 100644
index 0000000..5449ab7
--- /dev/null
+++ b/erpnext/accounts/doctype/pos_profile_user/test_pos_profile_user.js
@@ -0,0 +1,23 @@
+/* eslint-disable */
+// rename this file from _test_[name] to test_[name] to activate
+// and remove above this line
+
+QUnit.test("test: POS Profile User", function (assert) {
+	let done = assert.async();
+
+	// number of asserts
+	assert.expect(1);
+
+	frappe.run_serially([
+		// insert a new POS Profile User
+		() => frappe.tests.make('POS Profile User', [
+			// values to be set
+			{key: 'value'}
+		]),
+		() => {
+			assert.equal(cur_frm.doc.key, 'value');
+		},
+		() => done()
+	]);
+
+});
diff --git a/erpnext/accounts/doctype/pos_profile_user/test_pos_profile_user.py b/erpnext/accounts/doctype/pos_profile_user/test_pos_profile_user.py
new file mode 100644
index 0000000..5c69ab1
--- /dev/null
+++ b/erpnext/accounts/doctype/pos_profile_user/test_pos_profile_user.py
@@ -0,0 +1,9 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and Contributors
+# See license.txt
+from __future__ import unicode_literals
+
+import unittest
+
+class TestPOSProfileUser(unittest.TestCase):
+	pass
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index ad52dee..f4b4c2f 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -311,6 +311,14 @@
 	},
 
 	is_pos: function(frm){
+		this.set_pos_data();
+	},
+
+	pos_profile: function() {
+		this.set_pos_data();
+	},
+
+	set_pos_data: function() {
 		if(this.frm.doc.is_pos) {
 			if(!this.frm.doc.company) {
 				this.frm.set_value("is_pos", 0);
@@ -323,7 +331,7 @@
 					callback: function(r) {
 						if(!r.exc) {
 							if(r.message && r.message.print_format) {
-								frm.pos_print_format = r.message.print_format;
+								me.frm.pos_print_format = r.message.print_format;
 							}
 							me.frm.script_manager.trigger("update_stock");
 							frappe.model.set_default_values(me.frm.doc);
@@ -540,6 +548,19 @@
 				}
 			};
 		});
+
+		frm.set_query('pos_profile', function(doc) {
+			if(!doc.company) {
+				frappe.throw(_('Please set Company'));
+			}
+
+			return {
+				query: 'erpnext.accounts.doctype.pos_profile.pos_profile.pos_profile_query',
+				filters: {
+					company: doc.company
+				}
+			};
+		});
 	},
 	//When multiple companies are set up. in case company name is changed set default company address
 	company:function(frm){
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 6a54164..6c86267 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -294,21 +294,23 @@
 			return
 
 		from erpnext.stock.get_item_details import get_pos_profile_item_details, get_pos_profile
-		pos = get_pos_profile(self.company)
+		if not self.pos_profile:
+			pos_profile = get_pos_profile(self.company) or {}
+			self.pos_profile = pos_profile.get('name')
+
+		pos = {}
+		if self.pos_profile:
+			pos = frappe.get_doc('POS Profile', self.pos_profile)
 
 		if not self.get('payments') and not for_validate:
-			pos_profile = frappe.get_doc('POS Profile', pos.name) if pos else None
-			update_multi_mode_option(self, pos_profile)
+			update_multi_mode_option(self, pos)
 
 		if not self.account_for_change_amount:
 			self.account_for_change_amount = frappe.db.get_value('Company', self.company, 'default_cash_account')
 
 		if pos:
-			self.pos_profile = pos.name
 			if not for_validate and not self.customer:
 				self.customer = pos.customer
-				self.mode_of_payment = pos.mode_of_payment
-				# self.set_customer_defaults()
 
 			if pos.get('account_for_change_amount'):
 				self.account_for_change_amount = pos.get('account_for_change_amount')
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 2c28b92..97dec7f 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -449,7 +449,7 @@
 erpnext.patches.v8_9.delete_gst_doctypes_for_outside_india_accounts
 erpnext.patches.v8_9.set_default_fields_in_variant_settings
 erpnext.patches.v8_9.update_billing_gstin_for_indian_account
-erpnext.patches.v9_0.add_user_to_child_table_in_pos_profile
+erpnext.patches.v9_0.add_user_to_child_table_in_pos_profile #2017-11-28
 erpnext.patches.v9_0.set_schedule_date_for_material_request_and_purchase_order
 erpnext.patches.v9_0.student_admission_childtable_migrate
 erpnext.patches.v9_0.fix_subscription_next_date #2017-10-23
diff --git a/erpnext/patches/v9_0/add_user_to_child_table_in_pos_profile.py b/erpnext/patches/v9_0/add_user_to_child_table_in_pos_profile.py
index c150cfa..942f089 100644
--- a/erpnext/patches/v9_0/add_user_to_child_table_in_pos_profile.py
+++ b/erpnext/patches/v9_0/add_user_to_child_table_in_pos_profile.py
@@ -5,23 +5,34 @@
 import frappe
 
 def execute():
-	doctype = 'POS Profile'
-	frappe.reload_doc('accounts', 'doctype', doctype)
-	frappe.reload_doc('accounts', 'doctype', 'pos_profile_user')
-	frappe.reload_doc('accounts', 'doctype', 'pos_item_group')
-	frappe.reload_doc('accounts', 'doctype', 'pos_customer_group')
+	if frappe.db.table_exists("POS Profile User"):
+		frappe.reload_doc('accounts', 'doctype', 'pos_profile_user')
 
-	for doc in frappe.get_all(doctype):
-		_doc = frappe.get_doc(doctype, doc.name)
-		user = frappe.db.get_value(doctype, doc.name, 'user')
+		frappe.db.sql(""" update `tabPOS Profile User`,
+			(select `tabPOS Profile User`.name from `tabPOS Profile User`, `tabPOS Profile`
+				where `tabPOS Profile`.name = `tabPOS Profile User`.parent
+				group by `tabPOS Profile User`.user, `tabPOS Profile`.company) as pfu
+			set
+				`tabPOS Profile User`.default = 1
+			where `tabPOS Profile User`.name = pfu.name""")
+	else:
+		doctype = 'POS Profile'
+		frappe.reload_doc('accounts', 'doctype', doctype)
+		frappe.reload_doc('accounts', 'doctype', 'pos_profile_user')
+		frappe.reload_doc('accounts', 'doctype', 'pos_item_group')
+		frappe.reload_doc('accounts', 'doctype', 'pos_customer_group')
 
-		if not user: continue
+		for doc in frappe.get_all(doctype):
+			_doc = frappe.get_doc(doctype, doc.name)
+			user = frappe.db.get_value(doctype, doc.name, 'user')
 
-		_doc.append('applicable_for_users', {
-			'user': user
-		})
-		_doc.pos_profile_name = user + ' - ' + _doc.company
-		_doc.flags.ignore_validate  = True
-		_doc.flags.ignore_mandatory = True
-		_doc.save()
-		
+			if not user: continue
+
+			_doc.append('applicable_for_users', {
+				'user': user,
+				'default': 1
+			})
+			_doc.pos_profile_name = user + ' - ' + _doc.company
+			_doc.flags.ignore_validate  = True
+			_doc.flags.ignore_mandatory = True
+			_doc.save()
\ No newline at end of file
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 9b592fe..92a788b 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -322,7 +322,8 @@
 							project: item.project || me.frm.doc.project,
 							qty: item.qty || 1,
 							stock_qty: item.stock_qty,
-							conversion_factor: item.conversion_factor
+							conversion_factor: item.conversion_factor,
+							pos_profile: me.frm.doc.doctype == 'Sales Invoice' ? me.frm.doc.pos_profile : ''
 						}
 					},
 
@@ -891,7 +892,8 @@
 			"name": me.frm.doc.name,
 			"is_return": cint(me.frm.doc.is_return),
 			"update_stock": in_list(['Sales Invoice', 'Purchase Invoice'], me.frm.doc.doctype) ? cint(me.frm.doc.update_stock) : 0,
-			"conversion_factor": me.frm.doc.conversion_factor
+			"conversion_factor": me.frm.doc.conversion_factor,
+			"pos_profile": me.frm.doc.doctype == 'Sales Invoice' ? me.frm.doc.pos_profile : ''
 		};
 	},
 
diff --git a/erpnext/selling/page/point_of_sale/point_of_sale.js b/erpnext/selling/page/point_of_sale/point_of_sale.js
index b969434..fb30235 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.js
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.js
@@ -50,7 +50,7 @@
 				this.set_online_status();
 			},
 			() => this.setup_company(),
-			() => this.setup_pos_profile(),
+
 			() => this.make_new_invoice(),
 			() => {
 				frappe.dom.unfreeze();
@@ -90,7 +90,6 @@
 		this.cart = new POSCart({
 			frm: this.frm,
 			wrapper: this.wrapper.find('.cart-container'),
-			pos_profile: this.pos_profile,
 			events: {
 				on_customer_change: (customer) => this.frm.set_value('customer', customer),
 				on_field_change: (item_code, field, value) => {
@@ -141,7 +140,7 @@
 	make_items() {
 		this.items = new POSItems({
 			wrapper: this.wrapper.find('.item-container'),
-			pos_profile: this.pos_profile,
+			frm: this.frm,
 			events: {
 				update_cart: (item, field, value) => {
 					if(!this.frm.doc.customer) {
@@ -292,68 +291,62 @@
 		})
 	}
 
-	setup_pos_profile() {
+	change_pos_profile() {
 		return new Promise((resolve) => {
-
-			const load_default = () => {
-				this.pos_profile = {
-					company: this.company,
-					currency: frappe.defaults.get_default('currency'),
-					selling_price_list: frappe.defaults.get_default('selling_price_list')
-				};
-				resolve();
-			}
-
-			const on_submit = ({ pos_profile }) => {
-				this.get_pos_profile_doc(pos_profile)
-					.then(doc => {
-						this.pos_profile = doc;
-						if (!this.pos_profile) {
-							load_default();
-						}
-						resolve();
-					});
-			}
-
-			frappe.call({
-				method: 'erpnext.accounts.doctype.pos_profile.pos_profile.get_pos_profiles_for_user'
-			}).then((r) => {
-				if (r && r.message) {
-					const pos_profiles = r.message.filter(a => a);
-
-					if (pos_profiles.length === 0) {
-						load_default();
-					} else if(pos_profiles.length === 1) {
-						// load profile directly
-						on_submit({pos_profile: pos_profiles[0]});
-					} else {
-						// ask prompt
-						frappe.prompt(
-							[{ fieldtype: 'Select', label: 'POS Profile', options: pos_profiles }],
-							on_submit,
-							__('Select POS Profile')
-						);
-					}
-				} else {
-					frappe.dom.unfreeze();
-					frappe.throw(__("POS Profile is required to use Point-of-Sale"));
+			const on_submit = ({ pos_profile, set_as_default }) => {
+				if (pos_profile) {
+					this.frm.doc.pos_profile = pos_profile;
 				}
-			});
+
+				if (set_as_default) {
+					frappe.call({
+						method: "erpnext.accounts.doctype.pos_profile.pos_profile.set_default_profile",
+						args: {
+							'pos_profile': pos_profile,
+							'company': this.frm.doc.company
+						}
+					}).then(() => {
+						this.on_change_pos_profile();
+					});
+				} else {
+					this.on_change_pos_profile();
+				}
+			}
+
+			frappe.prompt(this.get_promopt_fields(),
+				on_submit,
+				__('Select POS Profile')
+			);
 		});
 	}
 
-	get_pos_profile_doc(pos_profile_name) {
-		return new Promise(resolve => {
-			frappe.call({
-				method: 'erpnext.accounts.doctype.pos_profile.pos_profile.get_pos_profile',
-				args: {
-					pos_profile_name
-				},
-				callback: (r) => {
-					resolve(r.message);
+	on_change_pos_profile() {
+		this.set_pos_profile_data()
+			.then(() => {
+				this.reset_cart();
+				if (this.items) {
+					this.items.reset_items();
 				}
 			});
-		});
+	}
+
+	get_promopt_fields() {
+		return [{
+			fieldtype: 'Link',
+			label: __('POS Profile'),
+			options: 'POS Profile',
+			get_query: () => {
+				return {
+					query: 'erpnext.accounts.doctype.pos_profile.pos_profile.pos_profile_query',
+					filters: {
+						company: this.frm.doc.company
+					}
+				};
+			}
+		}, {
+			fieldtype: 'Check',
+			label: __('Set as default')
+		}];
 	}
 
 	setup_company() {
@@ -378,9 +371,7 @@
 					.then(() => this.set_pos_profile_data())
 					.then(() => {
 						if (this.cart) {
-							this.cart.frm = this.frm;
-							this.cart.reset();
-							this.items.reset_search_field();
+							this.reset_cart();
 						} else {
 							this.make_items();
 							this.make_cart();
@@ -391,29 +382,32 @@
 		]);
 	}
 
+	reset_cart() {
+		this.cart.frm = this.frm;
+		this.cart.reset();
+		this.items.reset_search_field();
+	}
+
 	make_sales_invoice_frm() {
 		const doctype = 'Sales Invoice';
 		return new Promise(resolve => {
 			if (this.frm) {
-				this.frm = get_frm(this.pos_profile, this.frm);
+				this.frm = get_frm(this.frm);
 				resolve();
 			} else {
 				frappe.model.with_doctype(doctype, () => {
-					this.frm = get_frm(this.pos_profile);
+					this.frm = get_frm();
 					resolve();
 				});
 			}
 		});
 
-		function get_frm(pos_profile, _frm) {
+		function get_frm(_frm) {
 			const page = $('<div>');
 			const frm = _frm || new _f.Frm(doctype, page, false);
 			const name = frappe.model.make_new_doc_and_get_name(doctype, true);
 			frm.refresh(name);
 			frm.doc.items = [];
-			if(!frm.doc.company) {
-				frm.set_value('company', pos_profile.company);
-			}
 			frm.doc.is_pos = 1;
 			return frm;
 		}
@@ -426,6 +420,10 @@
 				method: "set_missing_values",
 			}).then((r) => {
 				if(!r.exc) {
+					if (!this.frm.doc.pos_profile) {
+						frappe.dom.unfreeze();
+						frappe.throw(__("POS Profile is required to use Point-of-Sale"));
+					}
 					this.frm.script_manager.trigger("update_stock");
 					frappe.model.set_default_values(this.frm.doc);
 					this.frm.cscript.calculate_taxes_and_totals();
@@ -433,8 +431,8 @@
 				}
 
 				resolve();
-			})
-		})
+			});
+		});
 	}
 
 	prepare_menu() {
@@ -458,6 +456,10 @@
 		this.page.add_menu_item(__('POS Settings'), function() {
 			frappe.set_route('Form', 'POS Settings');
 		});
+
+		this.page.add_menu_item(__('Change POS Profile'), function() {
+			me.change_pos_profile();
+		});
 	}
 
 	set_form_action() {
@@ -478,12 +480,11 @@
 };
 
 class POSCart {
-	constructor({frm, wrapper, pos_profile, events}) {
+	constructor({frm, wrapper, events}) {
 		this.frm = frm;
 		this.item_data = {};
 		this.wrapper = wrapper;
 		this.events = events;
-		this.pos_profile = pos_profile;
 		this.make();
 		this.bind_events();
 	}
@@ -549,7 +550,7 @@
 		this.wrapper.find('.grand-total-value').text(
 			format_currency(this.frm.doc.grand_total, this.frm.currency));
 
-		const customer = this.frm.doc.customer || this.pos_profile.customer;
+		const customer = this.frm.doc.customer;
 		this.customer_field.set_value(customer);
 	}
 
@@ -637,7 +638,6 @@
 	}
 
 	make_customer_field() {
-		let customer = this.frm.doc.customer || this.pos_profile['customer'];
 		this.customer_field = frappe.ui.form.make_control({
 			df: {
 				fieldtype: 'Link',
@@ -653,9 +653,7 @@
 			render_input: true
 		});
 
-		if (customer) {
-			this.customer_field.set_value(customer);
-		}
+		this.customer_field.set_value(this.frm.doc.customer);
 	}
 
 	make_numpad() {
@@ -920,19 +918,22 @@
 }
 
 class POSItems {
-	constructor({wrapper, pos_profile, events}) {
+	constructor({wrapper, frm, events}) {
 		this.wrapper = wrapper;
-		this.pos_profile = pos_profile;
+		this.frm = frm;
 		this.items = {};
 		this.events = events;
-		this.currency = this.pos_profile.currency;
+		this.currency = this.frm.doc.currency;
 
 		this.make_dom();
 		this.make_fields();
 
 		this.init_clusterize();
 		this.bind_events();
+		this.load_items_data();
+	}
 
+	load_items_data() {
 		// bootstrap with 20 items
 		this.get_items()
 			.then(({ items }) => {
@@ -942,6 +943,12 @@
 			});
 	}
 
+	reset_items() {
+		this.wrapper.find('.pos-items').empty();
+		this.init_clusterize();
+		this.load_items_data();
+	}
+
 	make_dom() {
 		this.wrapper.html(`
 			<div class="fields">
@@ -1165,7 +1172,7 @@
 				args: {
 					start,
 					page_length,
-					'price_list': this.pos_profile.selling_price_list,
+					'price_list': this.frm.doc.selling_price_list,
 					item_group,
 					search_value
 				}
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index 15b903e..63c76bc 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -394,7 +394,7 @@
 	res = frappe._dict()
 
 	if not pos_profile:
-		pos_profile = get_pos_profile(company)
+		pos_profile = get_pos_profile(company, args.get('pos_profile'))
 
 	if pos_profile:
 		for fieldname in ("income_account", "cost_center", "warehouse", "expense_account"):
@@ -408,17 +408,32 @@
 	return res
 
 @frappe.whitelist()
-def get_pos_profile(company):
-	pos_profile = frappe.db.sql("""select * from `tabPOS Profile` where user = %s
-		and company = %s and ifnull(disabled,0) != 1""", (frappe.session['user'], company), as_dict=1)
+def get_pos_profile(company, pos_profile=None, user=None):
+	if pos_profile:
+		return frappe.get_doc('POS Profile', pos_profile)
+
+	if not user:
+		user = frappe.session['user']
+
+	pos_profile = frappe.db.sql("""select pf.*
+		from
+			`tabPOS Profile` pf, `tabPOS Profile User` pfu
+		where
+			pfu.parent = pf.name and pfu.user = %s and pf.company = %s
+			and pf.disabled = 0 and pfu.default=1""", (user, company), as_dict=1)
 
 	if not pos_profile:
-		pos_profile = frappe.db.sql("""select * from `tabPOS Profile`
-			where ifnull(user,'') = '' and company = %s and ifnull(disabled,0) != 1""", company, as_dict=1)
+		pos_profile = frappe.db.sql("""select pf.*
+			from
+				`tabPOS Profile` pf left join `tabPOS Profile User` pfu
+			on
+				pf.name = pfu.parent
+			where
+				ifnull(pfu.user, '') = '' and pf.company = %s
+				and pf.disabled = 0""", (company), as_dict=1)
 
 	return pos_profile and pos_profile[0] or None
 
-
 def get_serial_nos_by_fifo(args):
 	if frappe.db.get_single_value("Stock Settings", "automatically_set_serial_nos_based_on_fifo"):
 		return "\n".join(frappe.db.sql_list("""select name from `tabSerial No`
