[Fixes] Some changes and fixes
diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.js b/erpnext/accounts/doctype/pos_profile/pos_profile.js
index da49036..8de8e35 100755
--- a/erpnext/accounts/doctype/pos_profile/pos_profile.js
+++ b/erpnext/accounts/doctype/pos_profile/pos_profile.js
@@ -3,11 +3,11 @@
 
 frappe.ui.form.on("POS Profile", "onload", function(frm) {
 	frm.set_query("selling_price_list", function() {
-		return { filter: { selling: 1 } };
+		return { filters: { selling: 1 } };
 	});
 
 	frm.set_query("print_format", function() {
-		return { filter: { doc_type: "Sales Invoice" } };
+		return { filters: { doc_type: "Sales Invoice", print_format_type: "Js"} };
 	});
 
 	erpnext.queries.setup_queries(frm, "Warehouse", function() {
diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py
index 0cf17da..9bea107 100644
--- a/erpnext/accounts/doctype/sales_invoice/pos.py
+++ b/erpnext/accounts/doctype/sales_invoice/pos.py
@@ -14,14 +14,16 @@
 	doc = frappe.new_doc('Sales Invoice')
 	doc.update_stock = 1;
 	doc.is_pos = 1;
-	pos_profile = get_pos_profile(doc.company)
+	pos_profile = get_pos_profile(doc.company) or {}
 
-	if not pos_profile:
-		frappe.throw(_("Create pos profile first"))
+	if pos_profile.get('name'):
+		pos_profile = frappe.get_doc('POS Profile', pos_profile.get('name'))
+	else:
+		frappe.msgprint(_("Warning Message: Create pos profile"))
 
-	pos_profile = frappe.get_doc('POS Profile', pos_profile.name)	
 	update_pos_profile_data(doc, pos_profile)
 	update_multi_mode_option(doc, pos_profile)
+	print_template = frappe.db.get_value('Print Format', pos_profile.get('print_format'), 'html') or ''
 
 	return {
 		'doc': doc,
@@ -29,7 +31,7 @@
 		'customers': get_customers(pos_profile),
 		'pricing_rules': get_pricing_rules(doc),
 		'mode_of_payment': get_mode_of_payment(doc),
-		'print_template': frappe.db.get_value('Print Format', pos_profile.print_format, 'html') or '',
+		'print_template': print_template,
 		'meta': {
 			'invoice': frappe.get_meta('Sales Invoice'),
 			'items': frappe.get_meta('Sales Invoice Item'),
@@ -40,21 +42,21 @@
 def update_pos_profile_data(doc, pos_profile):
 	company_data = frappe.db.get_value('Company', doc.company, '*', as_dict=1)
 
-	doc.taxes_and_charges = pos_profile.taxes_and_charges
+	doc.taxes_and_charges = pos_profile.get('taxes_and_charges')
 	if doc.taxes_and_charges:
 		update_tax_table(doc)
 
-	doc.currency = pos_profile.currency or company_data.default_currency
+	doc.currency = pos_profile.get('currency') or company_data.default_currency
 	doc.conversion_rate = 1.0 
 	if doc.currency != company_data.default_currency:
 		doc.conversion_rate = get_exchange_rate(doc.currency, company_data.default_currency)
-	doc.selling_price_list = pos_profile.selling_price_list or frappe.db.get_value('Selling Settings', None, 'selling_price_list')
-	doc.naming_series = pos_profile.naming_series or 'SINV-'
-	doc.letter_head = pos_profile.letter_head or company_data.default_letter_head
-	doc.ignore_pricing_rule = pos_profile.ignore_pricing_rule
-	doc.apply_discount_on = pos_profile.apply_discount_on
-	doc.customer_group = pos_profile.customer_group or get_root('Customer Group')
-	doc.territory = pos_profile.territory or get_root('Territory')
+	doc.selling_price_list = pos_profile.get('selling_price_list') or frappe.db.get_value('Selling Settings', None, 'selling_price_list')
+	doc.naming_series = pos_profile.get('naming_series') or 'SINV-'
+	doc.letter_head = pos_profile.get('letter_head') or company_data.default_letter_head
+	doc.ignore_pricing_rule = pos_profile.get('ignore_pricing_rule') or 0
+	doc.apply_discount_on = pos_profile.get('apply_discount_on') or ''
+	doc.customer_group = pos_profile.get('customer_group') or get_root('Customer Group')
+	doc.territory = pos_profile.get('territory') or get_root('Territory')
 	
 def get_root(table):
 	root = frappe.db.sql(""" select name from `tab%(table)s` having 
@@ -64,6 +66,9 @@
 
 def update_multi_mode_option(doc, pos_profile):
 	from frappe.model import default_fields
+	
+	if not pos_profile:
+		return
 
 	for payment_mode in pos_profile.payments:
 		payment_mode = payment_mode.as_dict()
@@ -89,10 +94,10 @@
 
 		item.price_list_rate = frappe.db.get_value('Item Price', {'item_code': item.name,
 									'price_list': doc.selling_price_list}, 'price_list_rate') or 0
-		item.default_warehouse = pos_profile.warehouse or item.default_warehouse or None
-		item.expense_account = pos_profile.expense_account or item.expense_account
-		item.income_account = pos_profile.income_account or item_doc.income_account
-		item.cost_center = pos_profile.cost_center or item_doc.selling_cost_center
+		item.default_warehouse = pos_profile.get('warehouse') or item.default_warehouse or None
+		item.expense_account = pos_profile.get('expense_account') or item.expense_account
+		item.income_account = pos_profile.get('income_account') or item_doc.income_account
+		item.cost_center = pos_profile.get('cost_center') or item_doc.selling_cost_center
 		item.actual_qty = frappe.db.get_value('Bin', {'item_code': item.name,
 								'warehouse': item.default_warehouse}, 'actual_qty') or 0
 		item.serial_nos = frappe.db.sql_list("""select name from `tabSerial No` where warehouse= %(warehouse)s 
@@ -103,7 +108,7 @@
 
 def get_customers(pos_profile):
 	filters = {'disabled': 0}
-	if pos_profile.customer:
+	if pos_profile.get('customer'):
 		filters.update({'name': pos_profile.customer})
 
 	return frappe.get_all("Customer", fields=["*"], filters = filters)
@@ -133,13 +138,13 @@
 			si_doc = frappe.new_doc('Sales Invoice')
 			si_doc.offline_pos_name = name
 			si_doc.update(doc)
-			submit_invoice(si_doc)
+			submit_invoice(si_doc, name)
 			name_list.append(name)
 
 	return name_list
 
 def validate_customer(doc):
-	if not frappe.db.get_value('Customer', doc.get('customer')):
+	if not frappe.db.exists('Customer', doc.get('customer')):
 		customer_doc = frappe.new_doc('Customer')
 		customer_doc.customer_name = doc.get('customer')
 		customer_doc.customer_type = 'Company'
@@ -165,20 +170,21 @@
 			item_doc.save(ignore_permissions=True)
 			frappe.db.commit()
 
-def submit_invoice(si_doc):
+def submit_invoice(si_doc, name):
 	try:
 		si_doc.insert()
 		si_doc.submit()
 	except Exception, e:
 		if frappe.message_log: frappe.message_log.pop()
 		frappe.db.rollback()
-		save_invoice(e, si_doc)
+		save_invoice(e, si_doc, name)
 
-def save_invoice(e, si_doc):
-	si_doc.docstatus = 0
-	si_doc.name = ''
-	si_doc.save(ignore_permissions=True)
-	make_scheduler_log(e, si_doc.name)
+def save_invoice(e, si_doc, name):
+	if not frappe.db.exists('Sales Invoice', {'offline_pos_name': name, 'docstatus': 1}):
+		si_doc.docstatus = 0
+		si_doc.name = ''
+		si_doc.save(ignore_permissions=True)
+		make_scheduler_log(e, si_doc.name)
 
 def make_scheduler_log(e, sales_invoice):
 	scheduler_log = frappe.new_doc('Scheduler Log')
diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js
index 04dd580..2162563 100644
--- a/erpnext/accounts/page/pos/pos.js
+++ b/erpnext/accounts/page/pos/pos.js
@@ -7,21 +7,35 @@
 		title: 'Point of Sale',
 		single_column: true
 	});
-	
-	wrapper = $(wrapper).find('.page-content')
-	new erpnext.pos.PointOfSale(page, wrapper)
+
+	wrapper.pos = new erpnext.pos.PointOfSale(wrapper)
 }
 
+frappe.pages['pos'].refresh = function(wrapper) {
+	wrapper.pos.on_refresh_page()
+}
+
+
 erpnext.pos.PointOfSale = erpnext.taxes_and_totals.extend({
-	init: function(page, wrapper){
-		this.page = page;
-		this.wrapper = wrapper;
+	init: function(wrapper){
+		this.load = true;
+		this.page = wrapper.page;
+		this.wrapper = $(wrapper).find('.page-content');
 		this.set_indicator();
 		this.onload();
 		this.make_menu_list();
 		this.set_interval_for_si_sync();
 		this.si_docs = this.get_doc_from_localstorage();
 	},
+	
+	on_refresh_page: function() {
+		var me = this;
+		if(this.load){
+			this.load = false;
+		}else{
+			this.create_new();
+		}
+	},
 
 	check_internet_connection: function(){
 		var me = this;
@@ -48,7 +62,6 @@
 
 	onload: function(){
 		var me = this;
-
 		this.get_data_from_server(function(){
 			me.create_new(); 
 		});
@@ -64,7 +77,11 @@
 		});
 	
 		this.page.add_menu_item(__("Sync Master Data"), function(){
-			me.get_data_from_server()
+			me.get_data_from_server(function(){
+				me.load_data()
+				me.make_customer()
+				me.make_item_list()
+			})
 		});
 	
 		this.page.add_menu_item(__("New Sales Invoice"), function() {
@@ -83,7 +100,8 @@
 		this.list_dialog.show();
 		this.list_body = this.list_dialog.body;
 		$(this.list_body).append('<div class="row list-row list-row-head pos-invoice-list">\
-				<div class="col-xs-6">Customer</div>\
+				<div class="col-xs-3">Sr</div>\
+				<div class="col-xs-3">Customer</div>\
 				<div class="col-xs-3 text-right">Grand Total</div>\
 				<div class="col-xs-3 text-right">Status</div>\
 		</div>')
@@ -91,9 +109,10 @@
 		$.each(this.si_docs, function(index, data){
 			for(key in data) {
 				$(frappe.render_template("pos_invoice_list", {
+					sr: index + 1,
 					name: key,
 					customer: data[key].customer,
-					grand_total: data[key].grand_total,
+					grand_total: format_currency(data[key].grand_total, me.frm.doc.currency),
 					status: (data[key].docstatus == 1) ? 'Submitted' : 'Draft'
 				})).appendTo($(me.list_body));
 			}
@@ -104,12 +123,21 @@
 			doc_data = me.get_invoice_doc(me.si_docs)
 			if(doc_data){
 				me.frm.doc = doc_data[0][me.name];
+				me.set_missing_values();
 				me.refresh();
 				me.disable_input_field();
 				me.list_dialog.hide();
 			}
 		})
 	},
+	
+	set_missing_values: function(){
+		var me = this;
+		doc = JSON.parse(localStorage.getItem('doc'))
+		if(this.frm.doc.payments.length == 0){
+			this.frm.doc.payments = doc.payments;
+		}
+	},
 
 	get_invoice_doc: function(si_docs){
 		var me = this;
@@ -127,6 +155,7 @@
 		frappe.call({
 			method: "erpnext.accounts.doctype.sales_invoice.pos.get_pos_data",
 			freeze: true,
+			freeze_message: __("Master data syncing, it might take some time"),
 			callback: function(r){
 				window.items = r.message.items;
 				window.customers = r.message.customers;
@@ -142,8 +171,8 @@
 	},
 	
 	create_new: function(){
-		this.frm = {}
 		var me = this;
+		this.frm = {}
 		this.name = '';
 		this.frm.doc =  JSON.parse(localStorage.getItem('doc'))
 		this.load_data();
@@ -555,11 +584,9 @@
 				me.create_invoice();
 				me.make_payment();
 			});
-		}else if(this.frm.doc.docstatus == 0){
+		}else if(this.frm.doc.docstatus == 0 && this.name){
 			this.page.set_primary_action(__("Submit"), function() {
-				frappe.confirm(__("Do you really want to submit the invoice?"), function () {
-					me.write_off_amount()
-				})
+				me.write_off_amount()
 			})
 		}else if(this.frm.doc.docstatus == 1){
 			this.page.set_primary_action(__("Print"), function() {
@@ -571,6 +598,8 @@
 					}, 1000)
 				});
 			})
+		}else {
+			this.page.clear_primary_action()
 		}
 	},
 	
@@ -582,27 +611,36 @@
 			dialog = new frappe.ui.Dialog({
 				title: 'Write Off Amount',
 				fields: [
-					{fieldtype: "Currency", fieldname: "write_off_amount", label: __("Amount"), reqd: 1},
+					{fieldtype: "Check", fieldname: "write_off_amount", label: __("Write of Outstanding Amount")},
 				]
-			  });
+			});
   
-			  dialog.show();
+			dialog.show();
 			  
-			  dialog.fields_dict.write_off_amount.$input.change(function(){
-				  value = dialog.get_values()
-			  })
-			  
-			  dialog.set_primary_action(__("Submit"), function(){
-				  me.frm.doc.write_off_amount = value.write_off_amount;
-				  me.calculate_outstanding_amount();
-				  dialog.hide();
-				  me.change_status();
-			  })
+			dialog.fields_dict.write_off_amount.$input.change(function(){
+				write_off_amount = dialog.get_values().write_off_amount
+				me.frm.doc.write_off_outstanding_amount_automatically = write_off_amount;
+				me.frm.doc.base_write_off_amount = (write_off_amount==1) ? flt(me.frm.doc.grand_total - me.frm.doc.paid_amount, precision("outstanding_amount")) : 0;
+				me.frm.doc.write_off_amount = flt(me.frm.doc.base_write_off_amount * me.frm.doc.conversion_rate, precision("write_off_amount"))
+				me.calculate_outstanding_amount();
+			})
+			
+			dialog.set_primary_action(__("Submit"), function(){
+				dialog.hide()
+				me.submit_invoice()
+			})
 		}else{
-			me.change_status();
+			this.submit_invoice()
 		}
 	},
 	
+	submit_invoice: function(){
+		var me = this;
+		frappe.confirm(__("Do you really want to submit the invoice?"), function () {
+			me.change_status();
+		})
+	},
+
 	change_status: function(){
 		if(this.frm.doc.docstatus == 0){
 			this.frm.doc.docstatus = 1;
@@ -662,14 +700,18 @@
 	},
 
 	get_doc_from_localstorage: function(){
-		return JSON.parse(localStorage.getItem('sales_invoice_doc')) || [];
+		try{
+			return JSON.parse(localStorage.getItem('sales_invoice_doc')) || [];
+		}catch(e){
+			return []
+		}
 	},
 
 	set_interval_for_si_sync: function(){
 		var me = this;
 		setInterval(function(){
 			me.sync_sales_invoice()
-		}, 6000)
+		}, 60000)
 	},
 
 	sync_sales_invoice: function(){
@@ -711,14 +753,16 @@
 	remove_doc_from_localstorage: function(){
 		var me = this;
 		this.si_docs = this.get_doc_from_localstorage();
+		this.new_si_docs = []
 		if(this.removed_items){
 			$.each(this.si_docs, function(index, data){
 				for(key in data){
-					if(in_list(me.removed_items, key)){			
-						me.si_docs.splice(index)
+					if(!in_list(me.removed_items, key)){
+						me.new_si_docs.push(data)
 					}
 				}
 			})
+			this.si_docs = this.new_si_docs;
 			this.update_localstorage();
 		}
 	},
diff --git a/erpnext/accounts/print_format/point_of_sale/__init__.py b/erpnext/accounts/print_format/point_of_sale/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/accounts/print_format/point_of_sale/__init__.py
diff --git a/erpnext/accounts/print_format/point_of_sale/point_of_sale.json b/erpnext/accounts/print_format/point_of_sale/point_of_sale.json
new file mode 100644
index 0000000..7641924
--- /dev/null
+++ b/erpnext/accounts/print_format/point_of_sale/point_of_sale.json
@@ -0,0 +1,18 @@
+{
+ "creation": "2016-05-05 17:16:18.564460", 
+ "custom_format": 1, 
+ "disabled": 0, 
+ "doc_type": "Sales Invoice", 
+ "docstatus": 0, 
+ "doctype": "Print Format", 
+ "font": "Default", 
+ "html": "<style>\n\t.print-format table, .print-format tr, \n\t.print-format td, .print-format div, .print-format p {\n\t\tfont-family: Monospace;\n\t\tline-height: 200%;\n\t\tvertical-align: middle;\n\t}\n\t@media screen {\n\t\t.print-format {\n\t\t\twidth: 4in;\n\t\t\tpadding: 0.25in;\n\t\t\tmin-height: 8in;\n\t\t}\n\t}\n</style>\n\n<p class=\"text-center\">\n\t{{ company }}<br>\n\t{{  __(\"Invoice\") }}<br>\n</p>\n<p>\n\t<b>{{ __(\"Date\") }}:</b> {{ posting_date }}<br>\n</p>\n\n<hr>\n<table class=\"table table-condensed cart no-border\">\n\t<thead>\n\t\t<tr>\n\t\t\t<th width=\"50%\">{{ __(\"Item\") }}</b></th>\n\t\t\t<th width=\"25%\" class=\"text-right\">{{ __(\"Qty\") }}</th>\n\t\t\t<th width=\"25%\" class=\"text-right\">{{ __(\"Amount\") }}</th>\n\t\t</tr>\n\t</thead>\n\t<tbody>\n\t\t{% for item in items %}\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t{{ item.item_name }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">{{ item.qty }}<br>@ {{ format_currency(item.rate, currency) }}</td>\n\t\t\t<td class=\"text-right\">{{ format_currency(item.amount, currency) }}</td>\n\t\t</tr>\n\t\t{% endfor %}\n\t</tbody>\n</table>\n\n<table class=\"table table-condensed no-border\">\n\t<tbody>\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ __(\"Net Total\") }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ format_currency(total, currency) }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{% for row in taxes %}\n\t\t{% if not row.included_in_print_rate %}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 70%\">\n\t\t\t\t{{ row.description }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ format_currency(row.tax_amount, currency) }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{% endif %}\n\t\t{% endfor %}\n\t\t{% if discount_amount %}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 75%\">\n\t\t\t\t{{ __(\"Discount\") }}\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ format_currency(discount_amount, currency) }}\n\t\t\t</td>\n\t\t</tr>\n\t\t{% endif %}\n\t\t<tr>\n\t\t\t<td class=\"text-right\" style=\"width: 75%\">\n\t\t\t\t<b>{{ __(\"Grand Total\") }}</b>\n\t\t\t</td>\n\t\t\t<td class=\"text-right\">\n\t\t\t\t{{ format_currency(grand_total, currency) }}\n\t\t\t</td>\n\t\t</tr>\n\t</tbody>\n</table>\n\n\n<hr>\n<p class=\"text-center\">{{ __(\"Thank you, please visit again.\") }}</p>", 
+ "idx": 0, 
+ "modified": "2016-05-11 15:04:24.359583", 
+ "modified_by": "Administrator", 
+ "name": "Point of Sale", 
+ "owner": "Administrator", 
+ "print_format_builder": 0, 
+ "print_format_type": "Js", 
+ "standard": "Yes"
+}
\ No newline at end of file
diff --git a/erpnext/config/desktop.py b/erpnext/config/desktop.py
index 68bf768..9944db9 100644
--- a/erpnext/config/desktop.py
+++ b/erpnext/config/desktop.py
@@ -131,8 +131,7 @@
 			"icon": "octicon octicon-credit-card",
 			"type": "page",
 			"link": "pos",
-			"label": _("POS"),
-			"hidden": 1
+			"label": _("POS")
 		},
 		{
 			"module_name": "Projects",
diff --git a/erpnext/public/build.json b/erpnext/public/build.json
index 03c381a..340ebdb 100644
--- a/erpnext/public/build.json
+++ b/erpnext/public/build.json
@@ -15,15 +15,13 @@
 		"public/js/templates/address_list.html",
 		"public/js/templates/contact_list.html",
 		"public/js/controllers/stock_controller.js",
-		"public/js/controllers/payments.js",
+		"public/js/payment/payments.js",
 		"public/js/controllers/taxes_and_totals.js",
 		"public/js/controllers/transaction.js",
 		"public/js/pos/pos.html",
 		"public/js/pos/pos_bill_item.html",
 		"public/js/pos/pos_item.html",
 		"public/js/pos/pos_tax_row.html",
-		"public/js/pos/pos_print.html",
-		"public/js/pos/pos.js",
 		"public/js/pos/pos_invoice_list.html",
 		"public/js/payment/pos_payment.html",
 		"public/js/payment/payment_details.html",
diff --git a/erpnext/public/css/erpnext.css b/erpnext/public/css/erpnext.css
index 6777e1e..346cfa0 100644
--- a/erpnext/public/css/erpnext.css
+++ b/erpnext/public/css/erpnext.css
@@ -124,3 +124,55 @@
 .dashboard-list-item:last-child {
   border-bottom: none;
 }
+
+.payment-toolbar {
+	margin-left: 35px;
+}
+
+.payment-mode {
+	cursor: pointer;
+	font-family: sans-serif;
+	font-size: 15px;
+}
+
+.pos-payment-row .col-xs-6 {
+	padding :10px;
+}
+
+.pos-payment-row {
+	border-bottom:1px solid #d1d8dd;
+    margin: 2px 0px 5px 0px;
+}
+
+.pos-payment-row:hover, .pos-keyboard-key:hover{
+	background-color: #FAFBFC;
+	cursor: pointer;
+}
+
+.pos-keyboard-key, .delete-btn {
+	border: 1px solid #d1d8dd;
+	height:85px;
+	width:85px;
+	margin:10px 10px;
+	font-size:24px;
+	font-weight:200;
+	background-color: #FDFDFD;
+	border-color: #e8e8e8;
+}
+
+.amount {
+	margin-top: 5px;
+}
+
+.amount-label {
+	font-size: 16px;
+}
+
+.selected-payment-mode {
+	background-color: #FAFBFC;
+	cursor: pointer;
+}
+
+.pos-invoice-list {
+	padding: 15px 10px;
+}
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index c622466..af651c9 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -165,7 +165,6 @@
 		erpnext.hide_company();
 		this.show_item_wise_taxes();
 		this.set_dynamic_labels();
-		// erpnext.pos.make_pos_btn(this.frm);
 		this.setup_sms();
 		this.make_show_payments_btn();
 	},
diff --git a/erpnext/public/js/controllers/payments.js b/erpnext/public/js/payment/payments.js
similarity index 93%
rename from erpnext/public/js/controllers/payments.js
rename to erpnext/public/js/payment/payments.js
index 7ac2b7b..f5527b1 100644
--- a/erpnext/public/js/controllers/payments.js
+++ b/erpnext/public/js/payment/payments.js
@@ -20,10 +20,8 @@
 		var me = this;
 	
 		this.dialog.set_primary_action(__("Submit"), function() {
-			frappe.confirm(__("Do you really want to submit the invoice?"), function () {
-				me.write_off_amount();
-				me.dialog.hide();
-			})
+			me.dialog.hide()
+			me.write_off_amount()
 		})
 	},
 
@@ -35,13 +33,6 @@
 		this.bind_keyboard_event()
 	},
 
-	pay_amount: function(){
-		var me = this;
-		this.make_multimode_payment();
-		this.calculate_outstanding_amount()
-		this.show_payment_details();
-	},
-
 	make_multimode_payment: function(){
 		var me = this;
 
@@ -91,12 +82,12 @@
 				me.payment_val = flt(me.frm.doc.outstanding_amount)
 				me.selected_mode.val(format_number(me.payment_val, 2));
 				me.update_paid_amount()
-				me.bind_amount_change_event();
 			}else if(flt(me.selected_mode.val()) > 0){
 				//If user click on existing row which has value
 				me.payment_val = flt(me.selected_mode.val());
 			}
 			me.selected_mode.select()
+			me.bind_amount_change_event();
 		})
 	},
 	
diff --git a/erpnext/public/js/payment/pos_payment.html b/erpnext/public/js/payment/pos_payment.html
index e93644d..223850c 100644
--- a/erpnext/public/js/payment/pos_payment.html
+++ b/erpnext/public/js/payment/pos_payment.html
@@ -31,7 +31,7 @@
 					</div>
 				{% } %}   
 				<div class="row">
-					<button type="button"  class="btn btn-default delete-btn"><span class="mega-octicon octicon-triangle-left"></span></button>
+					<button type="button"  class="btn btn-default delete-btn">Del</button>
 					<button type="button"  class="btn btn-default pos-keyboard-key">0</button>
 					<button type="button"  class="btn btn-default pos-keyboard-key">.</button>
 				</div>
diff --git a/erpnext/public/js/pos/pos.js b/erpnext/public/js/pos/pos.js
deleted file mode 100644
index 60801e6..0000000
--- a/erpnext/public/js/pos/pos.js
+++ /dev/null
@@ -1,583 +0,0 @@
-// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-// License: GNU General Public License v3. See license.txt
-
-frappe.provide("erpnext.pos");
-
-erpnext.pos.PointOfSale = Class.extend({
-	init: function(wrapper, frm) {
-		this.wrapper = wrapper;
-		this.frm = frm;
-		this.wrapper.html(frappe.render_template("pos", {currency: this.frm.currency}));
-
-		this.check_transaction_type();
-		this.make();
-
-		var me = this;
-		$(this.frm.wrapper).on("refresh-fields", function() {
-			me.refresh();
-		});
-
-		this.wrapper.find('input.discount-percentage').on("change", function() {
-			frappe.model.set_value(me.frm.doctype, me.frm.docname,
-				"additional_discount_percentage", flt(this.value));
-		});
-
-		this.wrapper.find('input.discount-amount').on("change", function() {
-			frappe.model.set_value(me.frm.doctype, me.frm.docname, "discount_amount", flt(this.value));
-		});
-	},
-	check_transaction_type: function() {
-		var me = this;
-
-		// Check whether the transaction is "Sales" or "Purchase"
-		if (frappe.meta.has_field(cur_frm.doc.doctype, "customer")) {
-			this.set_transaction_defaults("Customer");
-		}
-		else if (frappe.meta.has_field(cur_frm.doc.doctype, "supplier")) {
-			this.set_transaction_defaults("Supplier");
-		}
-	},
-	set_transaction_defaults: function(party) {
-		var me = this;
-		this.party = party;
-		this.price_list = (party == "Customer" ?
-			this.frm.doc.selling_price_list : this.frm.doc.buying_price_list);
-		this.price_list_field = (party == "Customer" ? "selling_price_list" : "buying_price_list");
-		this.sales_or_purchase = (party == "Customer" ? "Sales" : "Purchase");
-	},
-	make: function() {
-		this.make_party();
-		this.make_search();
-		this.make_item_list();
-	},
-	make_party: function() {
-		var me = this;
-		this.party_field = frappe.ui.form.make_control({
-			df: {
-				"fieldtype": "Link",
-				"options": this.party,
-				"label": this.party,
-				"fieldname": this.party.toLowerCase(),
-				"placeholder": this.party
-			},
-			parent: this.wrapper.find(".party-area"),
-			frm: this.frm,
-			doctype: this.frm.doctype,
-			docname: this.frm.docname,
-			only_input: true,
-		});
-		this.party_field.make_input();
-		this.party_field.$input.on("change", function() {
-			if(!me.party_field.autocomplete_open)
-				frappe.model.set_value(me.frm.doctype, me.frm.docname,
-					me.party.toLowerCase(), this.value);
-		});
-	},
-	make_search: function() {
-		var me = this;
-		this.search = frappe.ui.form.make_control({
-			df: {
-				"fieldtype": "Data",
-				"label": "Item",
-				"fieldname": "pos_item",
-				"placeholder": "Search Item"
-			},
-			parent: this.wrapper.find(".search-area"),
-			only_input: true,
-		});
-		this.search.make_input();
-		this.search.$input.on("keyup", function() {
-			if(!me.search.autocomplete_open)
-				if(me.item_timeout)
-					clearTimeout(me.item_timeout);
-				me.item_timeout = setTimeout(function() { me.make_item_list(); }, 1000);
-		});
-	},
-	make_item_list: function() {
-		var me = this;
-		if(!this.price_list) {
-			msgprint(__("Price List not found or disabled"));
-			return;
-		}
-
-		me.item_timeout = null;
-		frappe.call({
-			method: 'erpnext.accounts.doctype.sales_invoice.pos.get_items',
-			args: {
-				sales_or_purchase: this.sales_or_purchase,
-				price_list: this.price_list,
-				item: this.search.$input.val()
-			},
-			callback: function(r) {
-				var $wrap = me.wrapper.find(".item-list");
-				me.wrapper.find(".item-list").empty();
-				if (r.message) {
-					if (r.message.length === 1) {
-						var item = r.message[0];
-						if (item.serial_no) {
-							me.add_to_cart(item.item_code, item.serial_no);
-							me.search.$input.val("");
-							return;
-
-						} else if (item.barcode) {
-							me.add_to_cart(item.item_code);
-							me.search.$input.val("");
-							return;
-						}
-					}
-
-					$.each(r.message, function(index, obj) {
-						$(frappe.render_template("pos_item", {
-							item_code: obj.name,
-							item_price: format_currency(obj.price_list_rate, obj.currency),
-							item_name: obj.name===obj.item_name ? "" : obj.item_name,
-							item_image: obj.image ? "url('" + obj.image + "')" : null,
-							color: frappe.get_palette(obj.item_name),
-							abbr: frappe.get_abbr(obj.item_name)
-						})).tooltip().appendTo($wrap);
-					});
-				}
-
-				// if form is local then allow this function
-				$(me.wrapper).find("div.pos-item").on("click", function() {
-					if(me.frm.doc.docstatus==0) {
-						me.add_to_cart($(this).attr("data-item-code"));
-					}
-				});
-			}
-		});
-	},
-	add_to_cart: function(item_code, serial_no) {
-		var me = this;
-		var caught = false;
-
-		if(!me.frm.doc[me.party.toLowerCase()] && ((me.frm.doctype == "Quotation" &&
-				me.frm.doc.quotation_to == "Customer")
-				|| me.frm.doctype != "Quotation")) {
-			msgprint(__("Please select {0} first.", [me.party]));
-			return;
-		}
-
-		// get no_of_items
-		var no_of_items = me.wrapper.find(".pos-bill-item").length;
-
-		// check whether the item is already added
-		if (no_of_items != 0) {
-			$.each(this.frm.doc["items"] || [], function(i, d) {
-				if (d.item_code == item_code) {
-					caught = true;
-					if (serial_no)
-						frappe.model.set_value(d.doctype, d.name, "serial_no", d.serial_no + '\n' + serial_no);
-					else
-						frappe.model.set_value(d.doctype, d.name, "qty", d.qty + 1);
-				}
-			});
-		}
-
-		// if item not found then add new item
-		if (!caught)
-			this.add_new_item_to_grid(item_code, serial_no);
-
-		this.refresh();
-		this.refresh_search_box();
-	},
-	add_new_item_to_grid: function(item_code, serial_no) {
-		var me = this;
-
-		var child = frappe.model.add_child(me.frm.doc, this.frm.doctype + " Item", "items");
-		child.item_code = item_code;
-		child.qty = 1;
-
-		if (serial_no)
-			child.serial_no = serial_no;
-
-		this.frm.script_manager.trigger("item_code", child.doctype, child.name);
-		frappe.after_ajax(function() {
-			me.frm.script_manager.trigger("qty", child.doctype, child.name);
-		})
-	},
-	refresh_search_box: function() {
-		var me = this;
-
-		// Clear Item Box and remake item list
-		if (this.search.$input.val()) {
-			this.search.set_input("");
-			this.make_item_list();
-		}
-	},
-	update_qty: function(item_code, qty) {
-		var me = this;
-		$.each(this.frm.doc["items"] || [], function(i, d) {
-			if (d.item_code == item_code) {
-				if (qty == 0) {
-					frappe.model.clear_doc(d.doctype, d.name);
-					me.refresh_grid();
-				} else {
-					frappe.model.set_value(d.doctype, d.name, "qty", qty);
-				}
-			}
-		});
-		this.refresh();
-	},
-	refresh: function() {
-		var me = this;
-
-		this.refresh_item_list();
-		this.refresh_fields();
-
-		// if form is local then only run all these functions
-		if (this.frm.doc.docstatus===0) {
-			this.call_when_local();
-		}
-
-		this.disable_text_box_and_button();
-		this.set_primary_action();
-
-		// If quotation to is not Customer then remove party
-		if (this.frm.doctype == "Quotation" && this.frm.doc.quotation_to!="Customer") {
-			this.party_field.$input.prop("disabled", true);
-		}
-	},
-	refresh_fields: function() {
-		this.party_field.set_input(this.frm.doc[this.party.toLowerCase()]);
-		this.party_field.frm = this.frm;
-		this.party_field.doctype = this.frm.doctype;
-		this.party_field.docname = this.frm.docname;
-
-		this.wrapper.find('input.discount-percentage').val(this.frm.doc.additional_discount_percentage);
-		this.wrapper.find('input.discount-amount').val(this.frm.doc.discount_amount);
-
-		this.show_items_in_item_cart();
-		this.show_taxes();
-		this.set_totals();
-	},
-	refresh_item_list: function() {
-		var me = this;
-		// refresh item list on change of price list
-		if (this.frm.doc[this.price_list_field] != this.price_list) {
-			this.price_list = this.frm.doc[this.price_list_field];
-			this.make_item_list();
-		}
-	},
-	show_items_in_item_cart: function() {
-		var me = this;
-		var $items = this.wrapper.find(".items").empty();
-
-		$.each(this.frm.doc.items|| [], function(i, d) {
-			$(frappe.render_template("pos_bill_item", {
-				item_code: d.item_code,
-				item_name: (d.item_name===d.item_code || !d.item_name) ? "" : ("<br>" + d.item_name),
-				qty: d.qty,
-				actual_qty: d.actual_qty,
-				projected_qty: d.projected_qty,
-				rate: format_currency(d.rate, me.frm.doc.currency),
-				amount: format_currency(d.amount, me.frm.doc.currency)
-			})).appendTo($items);
-		});
-
-		this.wrapper.find("input.pos-item-qty").on("focus", function() {
-			$(this).select();
-		});
-	},
-	show_taxes: function() {
-		var me = this;
-		var taxes = this.frm.doc["taxes"] || [];
-		$(this.wrapper)
-			.find(".tax-area").toggleClass("hide", (taxes && taxes.length) ? false : true)
-			.find(".tax-table").empty();
-
-		$.each(taxes, function(i, d) {
-			if (d.tax_amount) {
-				$(frappe.render_template("pos_tax_row", {
-					description: d.description,
-					tax_amount: format_currency(flt(d.tax_amount)/flt(me.frm.doc.conversion_rate),
-						me.frm.doc.currency)
-				})).appendTo(me.wrapper.find(".tax-table"));
-			}
-		});
-	},
-	set_totals: function() {
-		var me = this;
-		this.wrapper.find(".net-total").text(format_currency(me.frm.doc["net_total"], me.frm.doc.currency));
-		this.wrapper.find(".grand-total").text(format_currency(me.frm.doc.grand_total, me.frm.doc.currency));
-	},
-	call_when_local: function() {
-		var me = this;
-
-		// append quantity to the respective item after change from input box
-		$(this.wrapper).find("input.pos-item-qty").on("change", function() {
-			var item_code = $(this).parents(".pos-bill-item").attr("data-item-code");
-			me.update_qty(item_code, $(this).val());
-		});
-
-		// increase/decrease qty on plus/minus button
-		$(this.wrapper).find(".pos-qty-btn").on("click", function() {
-			var $item = $(this).parents(".pos-bill-item:first");
-			me.increase_decrease_qty($item, $(this).attr("data-action"));
-		});
-
-		this.focus();
-	},
-	focus: function() {
-		if(this.frm.doc[this.party.toLowerCase()]) {
-			this.search.$input.focus();
-		} else {
-			if(!(this.frm.doctype == "Quotation" && this.frm.doc.quotation_to!="Customer"))
-				this.party_field.$input.focus();
-		}
-	},
-	increase_decrease_qty: function($item, operation) {
-		var item_code = $item.attr("data-item-code");
-		var item_qty = cint($item.find("input.pos-item-qty").val());
-
-		if (operation == "increase-qty")
-			this.update_qty(item_code, item_qty + 1);
-		else if (operation == "decrease-qty" && item_qty != 0)
-			this.update_qty(item_code, item_qty - 1);
-	},
-	disable_text_box_and_button: function() {
-		var me = this;
-		// if form is submitted & cancelled then disable all input box & buttons
-		$(this.wrapper)
-			.find(".pos-qty-btn")
-			.toggle(this.frm.doc.docstatus===0);
-
-		$(this.wrapper).find('input, button').prop("disabled", !(this.frm.doc.docstatus===0));
-
-		this.wrapper.find(".pos-item-area").toggleClass("hide", me.frm.doc.docstatus!==0);
-
-	},
-	set_primary_action: function() {
-		var me = this;
-		if (this.frm.page.current_view_name==="main") return;
-
-		if (this.frm.doctype == "Sales Invoice" && this.frm.doc.docstatus===0) {
-			if (!this.frm.doc.is_pos) {
-				this.frm.set_value("is_pos", 1);
-			}
-			this.frm.page.set_primary_action(__("Pay"), function() {
-				me.make_payment();
-			});
-		} else if (this.frm.doc.docstatus===1) {
-			this.frm.page.set_primary_action(__("New"), function() {
-				erpnext.open_as_pos = true;
-				new_doc(me.frm.doctype);
-			});
-		}
-	},
-	refresh_delete_btn: function() {
-		$(this.wrapper).find(".remove-items").toggle($(".item-cart .warning").length ? true : false);
-	},
-	remove_selected_items: function() {
-		var me = this;
-		var selected_items = [];
-		var no_of_items = $(this.wrapper).find("#cart tbody tr").length;
-		for(var x=0; x<=no_of_items - 1; x++) {
-			var row = $(this.wrapper).find("#cart tbody tr:eq(" + x + ")");
-			if(row.attr("data-selected") == "true") {
-				selected_items.push(row.attr("id"));
-			}
-		}
-
-		var child = this.frm.doc["items"] || [];
-
-		$.each(child, function(i, d) {
-			for (var i in selected_items) {
-				if (d.item_code == selected_items[i]) {
-					frappe.model.clear_doc(d.doctype, d.name);
-				}
-			}
-		});
-
-		this.refresh_grid();
-	},
-	refresh_grid: function() {
-		this.frm.dirty();
-		this.frm.fields_dict["items"].grid.refresh();
-		this.frm.script_manager.trigger("calculate_taxes_and_totals");
-		this.refresh();
-	},
-	with_modes_of_payment: function(callback) {
-		var me = this;
-		if(me.modes_of_payment) {
-			callback();
-		} else {
-			me.modes_of_payment = [];
-			$.ajax("/api/resource/Mode of Payment").success(function(data) {
-				$.each(data.data, function(i, d) { me.modes_of_payment.push(d.name); });
-				callback();
-			});
-		}
-	},
-	make_payment: function() {
-		var me = this;
-		var no_of_items = this.frm.doc.items.length;
-
-		if (no_of_items == 0)
-			msgprint(__("Payment cannot be made for empty cart"));
-		else {
-
-			this.with_modes_of_payment(function() {
-				// prefer cash payment!
-				var default_mode = me.frm.doc.mode_of_payment ? me.frm.doc.mode_of_payment :
-					me.modes_of_payment.indexOf(__("Cash"))!==-1 ? __("Cash") : undefined;
-
-				// show payment wizard
-				var dialog = new frappe.ui.Dialog({
-					width: 400,
-					title: 'Payment',
-					fields: [
-						{fieldtype:'Currency',
-							fieldname:'total_amount', label: __('Total Amount'),
-							"default": me.frm.doc.grand_total},
-						{fieldtype:'Select', fieldname:'mode_of_payment',
-							label: __('Mode of Payment'),
-							options: me.modes_of_payment.join('\n'), reqd: 1,
-							"default": default_mode},
-						{fieldtype:'Currency', fieldname:'paid_amount', label:__('Amount Paid'),
-							reqd:1, "default": me.frm.doc.grand_total,
-							change: function() {
-								var values = dialog.get_values();
-
-								var actual_change = flt(values.paid_amount - values.total_amount,
-									precision("paid_amount"));
-
-								if (actual_change > 0) {
-									var rounded_change =
-										round_based_on_smallest_currency_fraction(actual_change,
-											me.frm.doc.currency, precision("paid_amount"));
-								} else {
-									var rounded_change = 0;
-								}
-
-								dialog.set_value("change", rounded_change);
-								dialog.get_input("change").trigger("change");
-
-							}},
-						{fieldtype:'Currency', fieldname:'change', label: __('Change'),
-							"default": 0.0, hidden: 1, change: function() {
-								var values = dialog.get_values();
-								var write_off_amount = (flt(values.paid_amount) - flt(values.change)) - values.total_amount;
-								dialog.get_field("write_off_amount").toggle(write_off_amount);
-								dialog.set_value("write_off_amount", write_off_amount);
-							}
-						},
-						{fieldtype:'Currency', fieldname:'write_off_amount',
-							label: __('Write Off'), "default": 0.0, hidden: 1},
-					]
-				});
-				me.dialog = dialog;
-				dialog.show();
-
-				// make read only
-				dialog.get_input("total_amount").prop("disabled", true);
-				dialog.get_input("write_off_amount").prop("disabled", true);
-
-				// toggle amount paid and change
-				dialog.get_input("mode_of_payment").on("change", function() {
-					var is_cash = dialog.get_value("mode_of_payment") === __("Cash");
-					dialog.get_field("paid_amount").toggle(is_cash);
-					dialog.get_field("change").toggle(is_cash);
-
-					if (is_cash && !dialog.get_value("change")) {
-						// set to nearest 5
-						dialog.set_value("paid_amount", dialog.get_value("total_amount"));
-						dialog.get_input("paid_amount").trigger("change");
-					} else if (!is_cash) {
-						dialog.set_value("paid_amount", dialog.get_value("total_amount"));
-						dialog.set_value("change", 0);
-					}
-				}).trigger("change");
-
-				me.set_pay_button(dialog);
-			});
-		}
-	},
-	set_pay_button: function(dialog) {
-		var me = this;
-		dialog.set_primary_action(__("Pay"), function() {
-			var values = dialog.get_values();
-			var is_cash = values.mode_of_payment === __("Cash");
-			if (!is_cash) {
-				values.write_off_amount = values.change = 0.0;
-				values.paid_amount = values.total_amount;
-			}
-			me.frm.set_value("mode_of_payment", values.mode_of_payment);
-
-			var paid_amount = flt((flt(values.paid_amount) - flt(values.change)), precision("paid_amount"));
-			me.frm.set_value("paid_amount", paid_amount);
-
-			// specifying writeoff amount here itself, so as to avoid recursion issue
-			me.frm.set_value("write_off_amount", me.frm.doc.grand_total - paid_amount);
-			me.frm.set_value("outstanding_amount", 0);
-
-			me.frm.savesubmit(this);
-			dialog.hide();
-		})
-
-	}
-});
-
-erpnext.pos.make_pos_btn = function(frm) {
-	frm.page.add_menu_item(__("{0} View", [frm.page.current_view_name === "pos" ? "Form" : "Point-of-Sale"]), function() {
-		erpnext.pos.toggle(frm);
-	});
-
-	if(frm.pos_btn) return;
-
-	// Show POS button only if it is enabled from features setup
-	if (cint(sys_defaults.fs_pos_view)!==1 || frm.doctype==="Material Request") {
-		return;
-	}
-
-	if(!frm.pos_btn) {
-		frm.pos_btn = frm.page.add_action_icon("icon-th", function() {
-			erpnext.pos.toggle(frm);
-		});
-	}
-
-	if(erpnext.open_as_pos && frm.page.current_view_name !== "pos") {
-		erpnext.pos.toggle(frm, true);
-	}
-}
-
-erpnext.pos.toggle = function(frm, show) {
-	// Check whether it is Selling or Buying cycle
-	var price_list = frappe.meta.has_field(cur_frm.doc.doctype, "selling_price_list") ?
-		frm.doc.selling_price_list : frm.doc.buying_price_list;
-
-	if(show!==undefined) {
-		if((show===true && frm.page.current_view_name === "pos")
-			|| (show===false && frm.page.current_view_name === "main")) {
-			return;
-		}
-	}
-
-	if(frm.page.current_view_name!=="pos") {
-		// before switching, ask for pos name
-		if(!price_list) {
-			frappe.throw(__("Please select Price List"));
-		}
-
-		if(!frm.doc.company) {
-			frappe.throw(__("Please select Company"));
-		}
-	}
-
-	// make pos
-	if(!frm.pos) {
-		var wrapper = frm.page.add_view("pos", "<div>");
-		frm.pos = new erpnext.pos.PointOfSale(wrapper, frm);
-	}
-
-	// toggle view
-	frm.page.set_view(frm.page.current_view_name==="pos" ? "main" : "pos");
-
-	frm.toolbar.current_status = null;
-	frm.refresh();
-
-	// refresh
-	if(frm.page.current_view_name==="pos") {
-		frm.pos.refresh();
-	}
-}
diff --git a/erpnext/public/js/pos/pos_invoice_list.html b/erpnext/public/js/pos/pos_invoice_list.html
index 463b3e7..8d2644c 100644
--- a/erpnext/public/js/pos/pos_invoice_list.html
+++ b/erpnext/public/js/pos/pos_invoice_list.html
@@ -1,5 +1,6 @@
 <div class="row list-row pos-invoice-list" invoice-name = "{{name}}">
-	<div class="col-xs-6">{%= customer %}</div>
+	<div class="col-xs-3">{%= sr %}</div>
+	<div class="col-xs-3">{%= customer %}</div>
 	<div class="col-xs-3 text-right">{%= grand_total %}</div>
 	<div class="col-xs-3 text-right">{%= status %}</div>
 </div>
diff --git a/erpnext/public/js/pos/pos_print.html b/erpnext/public/js/pos/pos_print.html
deleted file mode 100644
index d31a885..0000000
--- a/erpnext/public/js/pos/pos_print.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<style>
-	.print-format table, .print-format tr, 
-	.print-format td, .print-format div, .print-format p {
-		font-family: Monospace;
-		line-height: 200%;
-		vertical-align: middle;
-	}
-	@media screen {
-		.print-format {
-			width: 4in;
-			padding: 0.25in;
-			min-height: 8in;
-		}
-	}
-</style>
-
-<p class="text-center">
-	{{ company }}<br>
-</p>
-<p>
-	{{currency}}
-</p>
-{% for item in items %}
-	<p> {{item.item_code}} </p>
-{% endfor %}
\ No newline at end of file