diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py
index 6856f62..36c2365 100644
--- a/erpnext/accounts/doctype/sales_invoice/pos.py
+++ b/erpnext/accounts/doctype/sales_invoice/pos.py
@@ -92,6 +92,7 @@
 	doc.customer_group = pos_profile.get('customer_group') or get_root('Customer Group')
 	doc.territory = pos_profile.get('territory') or get_root('Territory')
 	doc.terms = frappe.db.get_value('Terms and Conditions', pos_profile.get('tc_name'), 'terms') or doc.terms or ''
+	doc.offline_pos_name = ''
 
 def get_root(table):
 	root = frappe.db.sql(""" select name from `tab%(table)s` having
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 888520a..995a333 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -70,7 +70,6 @@
 		self.clear_unallocated_advances("Sales Invoice Advance", "advances")
 		self.add_remarks()
 		self.validate_write_off_account()
-		self.validate_duplicate_offline_pos_entry()
 		self.validate_account_for_change_amount()
 		self.validate_fixed_asset()
 		self.set_income_account_for_fixed_assets()
@@ -464,12 +463,6 @@
 		if flt(self.write_off_amount) and not self.write_off_account:
 			msgprint(_("Please enter Write Off Account"), raise_exception=1)
 
-	def validate_duplicate_offline_pos_entry(self):
-		if self.is_pos and self.offline_pos_name \
-			and frappe.db.get_value('Sales Invoice',
-			{'offline_pos_name': self.offline_pos_name, 'docstatus': 1}):
-			frappe.throw(_("Duplicate offline pos sales invoice {0}").format(self.offline_pos_name))
-
 	def validate_account_for_change_amount(self):
 		if flt(self.change_amount) and not self.account_for_change_amount:
 			msgprint(_("Please enter Account for Change Amount"), raise_exception=1)
diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js
index c442062..6b58033 100644
--- a/erpnext/accounts/page/pos/pos.js
+++ b/erpnext/accounts/page/pos/pos.js
@@ -179,41 +179,12 @@
 		}
 	},
 
-	dialog_actions: function () {
-		var me = this;
-
-		$(this.list_body).find('.list-select-all').click(function () {
-			me.removed_items = [];
-			$(me.list_body).find('.list-delete').prop("checked", $(this).is(":checked"))
-			if ($(this).is(":checked")) {
-				$.each(me.si_docs, function (index, data) {
-					for (key in data) {
-						me.removed_items.push(key)
-					}
-				})
-			}
-
-			me.toggle_delete_button();
-		})
-
-		$(this.list_body).find('.list-delete').click(function () {
-			me.name = $(this).parent().parent().attr('invoice-name');
-			if ($(this).is(":checked")) {
-				me.removed_items.push(me.name);
-			} else {
-				me.removed_items.pop(me.name)
-			}
-
-			me.toggle_delete_button();
-		})
-	},
-
 	edit_record: function () {
 		var me = this;
 
 		doc_data = this.get_invoice_doc(this.si_docs);
 		if (doc_data) {
-			this.frm.doc = doc_data[0][this.name];
+			this.frm.doc = doc_data[0][this.frm.doc.offline_pos_name];
 			this.set_missing_values();
 			this.refresh(false);
 			this.toggle_input_field();
@@ -226,16 +197,15 @@
 		this.validate_list()
 		this.remove_doc_from_localstorage()
 		this.update_localstorage();
-		// this.dialog_actions();
 		this.toggle_delete_button();
 	},
 
 	validate_list: function() {
 		var me = this;
 		this.si_docs = this.get_submitted_invoice()
-		$.each(this.removed_items, function(index, name){
+		$.each(this.removed_items, function(index, pos_name){
 			$.each(me.si_docs, function(key, data){
-				if(me.si_docs[key][name] && me.si_docs[key][name].offline_pos_name == name ){
+				if(me.si_docs[key][pos_name] && me.si_docs[key][pos_name].offline_pos_name == pos_name ){
 					frappe.throw(__("Submitted orders can not be deleted"))
 				}
 			})
@@ -294,7 +264,7 @@
 
 		return $.grep(this.si_docs, function (data) {
 			for (key in data) {
-				return key == me.name
+				return key == me.frm.doc.offline_pos_name;
 			}
 		})
 	},
@@ -348,7 +318,6 @@
 	create_new: function () {
 		var me = this;
 		this.frm = {}
-		this.name = null;
 		this.load_data(true);
 		this.setup();
 		this.set_default_customer()
@@ -362,6 +331,7 @@
 
 		if (load_doc) {
 			this.frm.doc = JSON.parse(localStorage.getItem('doc'));
+			this.frm.doc.offline_pos_name = null;
 		}
 
 		$.each(this.meta, function (i, data) {
@@ -629,6 +599,7 @@
 		// this.list_customers.empty();
 		this.si_docs = this.get_doc_from_localstorage();
 		if (!this.si_docs.length) {
+			this.list_customers.find('.list-customers-table').html("");
 			return;
 		}
 
@@ -655,7 +626,7 @@
 			me.list_customers_btn.toggleClass("view_customer");
 			me.pos_bill.show();
 			me.list_customers_btn.show();
-			me.name = $(this).parents().attr('invoice-name')
+			me.frm.doc.offline_pos_name = $(this).parents().attr('invoice-name')
 			me.edit_record();
 		})
 
@@ -675,11 +646,11 @@
 		});
 
 		$(this.wrapper).find('.list-delete').click(function () {
-			me.name = $(this).parent().parent().attr('invoice-name');
+			me.frm.doc.offline_pos_name = $(this).parent().parent().attr('invoice-name');
 			if ($(this).is(":checked")) {
-				me.removed_items.push(me.name);
+				me.removed_items.push(me.frm.doc.offline_pos_name);
 			} else {
-				me.removed_items.pop(me.name)
+				me.removed_items.pop(me.frm.doc.offline_pos_name)
 			}
 
 			me.toggle_delete_button();
@@ -1435,7 +1406,7 @@
 	},
 
 	update_paid_amount_status: function (update_paid_amount) {
-		if (this.name) {
+		if (this.frm.doc.offline_pos_name) {
 			update_paid_amount = update_paid_amount ? false : true;
 		}
 
@@ -1643,18 +1614,17 @@
 
 	create_invoice: function () {
 		var me = this;
-		var invoice_data = {}
+		var invoice_data = {};
 		this.si_docs = this.get_doc_from_localstorage();
-		if (this.name) {
-			this.update_invoice()
+		if (this.frm.doc.offline_pos_name) {
+			this.update_invoice();
 		} else {
-			this.name = $.now();
-			this.frm.doc.offline_pos_name = this.name;
+			this.frm.doc.offline_pos_name = $.now();
 			this.frm.doc.posting_date = frappe.datetime.get_today();
 			this.frm.doc.posting_time = frappe.datetime.now_time();
 			this.frm.doc.pos_profile = this.pos_profile_data['name'];
-			invoice_data[this.name] = this.frm.doc
-			this.si_docs.push(invoice_data)
+			invoice_data[this.frm.doc.offline_pos_name] = this.frm.doc;
+			this.si_docs.push(invoice_data);
 			this.update_localstorage();
 			this.set_primary_action();
 		}
@@ -1666,12 +1636,12 @@
 		this.si_docs = this.get_doc_from_localstorage();
 		$.each(this.si_docs, function (index, data) {
 			for (var key in data) {
-				if (key == me.name) {
+				if (key == me.frm.doc.offline_pos_name) {
 					me.si_docs[index][key] = me.frm.doc;
 					me.update_localstorage();
 				}
 			}
-		})
+		});
 	},
 
 	update_localstorage: function () {
@@ -1710,6 +1680,8 @@
 		freeze_screen = this.freeze_screen || false;
 
 		if ((this.si_docs.length || this.email_queue_list || this.customers_list) && !this.freeze) {
+			this.freeze = true;
+
 			frappe.call({
 				method: "erpnext.accounts.doctype.sales_invoice.pos.make_invoice",
 				freeze: freeze_screen,
@@ -1720,17 +1692,19 @@
 				},
 				callback: function (r) {
 					if (r.message) {
+						me.freeze = false;
 						me.customers = r.message.synced_customers_list;
 						me.address = r.message.synced_address;
 						me.contacts = r.message.synced_contacts;
 						me.removed_items = r.message.invoice;
-						me.removed_email = r.message.email_queue
-						me.removed_customers = r.message.customers
+						me.removed_email = r.message.email_queue;
+						me.removed_customers = r.message.customers;
 						me.remove_doc_from_localstorage();
 						me.remove_email_queue_from_localstorage();
 						me.remove_customer_from_localstorage();
-						me.prepare_customer_mapper()
-						me.autocomplete_customers()
+						me.prepare_customer_mapper();
+						me.autocomplete_customers();
+						me.render_list_customers();
 					}
 				}
 			})
