diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.js b/erpnext/accounts/doctype/pos_profile/pos_profile.js
index efdeb1a..813d20d 100755
--- a/erpnext/accounts/doctype/pos_profile/pos_profile.js
+++ b/erpnext/accounts/doctype/pos_profile/pos_profile.js
@@ -3,22 +3,20 @@
 
 {% include "erpnext/public/js/controllers/accounts.js" %}
 
-frappe.ui.form.on("POS Profile", "onload", function(frm) {
-	frm.set_query("selling_price_list", function() {
-		return { filters: { selling: 1 } };
-	});
-
-	frm.set_query("tc_name", function() {
-		return { filters: { selling: 1 } };
-	});
-
-	erpnext.queries.setup_queries(frm, "Warehouse", function() {
-		return erpnext.queries.warehouse(frm.doc);
-	});
-});
-
 frappe.ui.form.on('POS Profile', {
 	setup: function(frm) {
+		frm.set_query("selling_price_list", function() {
+			return { filters: { selling: 1 } };
+		});
+
+		frm.set_query("tc_name", function() {
+			return { filters: { selling: 1 } };
+		});
+
+		erpnext.queries.setup_queries(frm, "Warehouse", function() {
+			return erpnext.queries.warehouse(frm.doc);
+		});
+
 		frm.set_query("print_format", function() {
 			return {
 				filters: [
@@ -27,10 +25,16 @@
 			};
 		});
 
-		frm.set_query("account_for_change_amount", function() {
+		frm.set_query("account_for_change_amount", function(doc) {
+			if (!doc.company) {
+				frappe.throw(__('Please set Company'));
+			}
+
 			return {
 				filters: {
-					account_type: ['in', ["Cash", "Bank"]]
+					account_type: ['in', ["Cash", "Bank"]],
+					is_group: 0,
+					company: doc.company
 				}
 			};
 		});
@@ -45,7 +49,7 @@
 		});
 
 		frm.set_query('company_address', function(doc) {
-			if(!doc.company) {
+			if (!doc.company) {
 				frappe.throw(__('Please set Company'));
 			}
 
@@ -58,11 +62,79 @@
 			};
 		});
 
+		frm.set_query('income_account', function(doc) {
+			if (!doc.company) {
+				frappe.throw(__('Please set Company'));
+			}
+
+			return {
+				filters: {
+					'is_group': 0,
+					'company': doc.company,
+					'account_type': "Income Account"
+				}
+			};
+		});
+
+		frm.set_query('cost_center', function(doc) {
+			if (!doc.company) {
+				frappe.throw(__('Please set Company'));
+			}
+
+			return {
+				filters: {
+					'company': doc.company,
+					'is_group': 0
+				}
+			};
+		});
+
+		frm.set_query('expense_account', function(doc) {
+			if (!doc.company) {
+				frappe.throw(__('Please set Company'));
+			}
+
+			return {
+				filters: {
+					"report_type": "Profit and Loss",
+					"company": doc.company,
+					"is_group": 0
+				}
+			};
+		});
+
+		frm.set_query("select_print_heading", function() {
+			return {
+				filters: [
+					['Print Heading', 'docstatus', '!=', 2]
+				]
+			};
+		});
+
+		frm.set_query("write_off_account", function(doc) {
+			return {
+				filters: {
+					'report_type': 'Profit and Loss',
+					'is_group': 0,
+					'company': doc.company
+				}
+			};
+		});
+
+		frm.set_query("write_off_cost_center", function(doc) {
+			return {
+				filters: {
+					'is_group': 0,
+					'company': doc.company
+				}
+			};
+		});
+
 		erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
 	},
 
 	refresh: function(frm) {
-		if(frm.doc.company) {
+		if (frm.doc.company) {
 			frm.trigger("toggle_display_account_head");
 		}
 	},
@@ -76,71 +148,4 @@
 		frm.toggle_display('expense_account',
 			erpnext.is_perpetual_inventory_enabled(frm.doc.company));
 	}
-})
-
-// Income Account
-// --------------------------------
-cur_frm.fields_dict['income_account'].get_query = function(doc,cdt,cdn) {
-	return{
-		filters:{
-			'is_group': 0,
-			'company': doc.company,
-			'account_type': "Income Account"
-		}
-	};
-};
-
-
-// Cost Center
-// -----------------------------
-cur_frm.fields_dict['cost_center'].get_query = function(doc,cdt,cdn) {
-	return{
-		filters:{
-			'company': doc.company,
-			'is_group': 0
-		}
-	};
-};
-
-
-// Expense Account
-// -----------------------------
-cur_frm.fields_dict["expense_account"].get_query = function(doc) {
-	return {
-		filters: {
-			"report_type": "Profit and Loss",
-			"company": doc.company,
-			"is_group": 0
-		}
-	};
-};
-
-// ------------------ Get Print Heading ------------------------------------
-cur_frm.fields_dict['select_print_heading'].get_query = function(doc, cdt, cdn) {
-	return{
-		filters:[
-			['Print Heading', 'docstatus', '!=', 2]
-		]
-	};
-};
-
-cur_frm.fields_dict.write_off_account.get_query = function(doc) {
-	return{
-		filters:{
-			'report_type': 'Profit and Loss',
-			'is_group': 0,
-			'company': doc.company
-		}
-	};
-};
-
-// Write off cost center
-// -----------------------
-cur_frm.fields_dict.write_off_cost_center.get_query = function(doc) {
-	return{
-		filters:{
-			'is_group': 0,
-			'company': doc.company
-		}
-	};
-};
+});
