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 dc2b265..06db851 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.js
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.js
@@ -93,20 +93,22 @@
 		});
 	}
 
-	disable_text_box_and_button() {
-		let disabled = this.frm.doc.docstatus == 1 ? true: false;
-		let pointer_events = this.frm.doc.docstatus == 1 ? "none":"inherit";
+	toggle_editing(flag) {
+		let disabled;
+		if (flag !== undefined) {
+			disabled = !flag;
+		} else {
+			disabled = this.frm.doc.docstatus == 1 ? true: false;
+		}
+		const pointer_events = disabled ? 'none' : 'inherit';
 
-		$(this.wrapper).find('input, button', 'select').prop("disabled", disabled);
-		$(this.wrapper).find(".number-pad-container").toggleClass("hide", disabled);
+		this.wrapper.find('input, button, select').prop("disabled", disabled);
+		this.wrapper.find('.number-pad-container').toggleClass("hide", disabled);
 
-		$(this.wrapper).find('.cart-container').css('pointer-events', pointer_events);
-		$(this.wrapper).find('.item-container').css('pointer-events', pointer_events);
+		this.wrapper.find('.cart-container').css('pointer-events', pointer_events);
+		this.wrapper.find('.item-container').css('pointer-events', pointer_events);
 
 		this.page.clear_actions();
-		if(this.frm.doc.docstatus === 1) {
-			this.set_primary_action()
-		}
 	}
 
 	make_items() {
@@ -193,38 +195,27 @@
 	}
 
 	submit_sales_invoice() {
-		var me = this;
-		this.frm.savesubmit();
-		// frappe.confirm(__("Permanently Submit {0}?", [this.frm.doc.name]), function() {
-// 			return frappe.call({
-// 				method: 'erpnext.selling.page.point_of_sale.point_of_sale.submit_invoice',
-// 				freeze: true,
-// 				args: {
-// 					doc: me.frm.doc
-// 				}
-// 			}).then(r => {
-// 				if(r.message) {
-// 					me.frm.doc = r.message;
-// 					me.frm.meta.default_print_format = 'POS Invoice';
-// 					frappe.show_alert({
-// 						indicator: 'green',
-// 						message: __(`Sales invoice ${r.message.name} created succesfully`)
-// 					});
-//
-// 					me.frm.msgbox = frappe.msgprint(
-// 						`<a class="btn btn-primary" onclick="cur_frm.print_preview.printit(true)" style="margin-right: 5px;">
-// 							${__('Print')}</a>
-// 						<a class="btn btn-default new_doc">
-// 							${__('New')}</a>`
-// 					);
-// 					$(me.frm.msgbox.wrapper).find('.new_doc').click(function() {
-// 						me.frm.msgbox.hide()
-// 						me.make_new_invoice()
-// 					})
-// 					me.disable_text_box_and_button();
-// 				}
-// 			});
-// 		})
+
+		frappe.confirm(__("Permanently Submit {0}?", [this.frm.doc.name]), () => {
+			frappe.call({
+				method: 'erpnext.selling.page.point_of_sale.point_of_sale.submit_invoice',
+				freeze: true,
+				args: {
+					doc: this.frm.doc
+				}
+			}).then(r => {
+				if(r.message) {
+					this.frm.doc = r.message;
+					frappe.show_alert({
+						indicator: 'green',
+						message: __(`Sales invoice ${r.message.name} created succesfully`)
+					});
+
+					this.toggle_editing();
+					this.set_form_action();
+				}
+			});
+		});
 	}
 
 	bind_events() {
@@ -246,27 +237,42 @@
 		return frappe.run_serially([
 			() => this.make_sales_invoice_frm(),
 			() => {
-				this.make_cart();
-				this.disable_text_box_and_button();
+				if (this.cart) {
+					this.cart.frm = this.frm;
+					this.cart.reset();
+				} else {
+					this.make_cart();
+				}
+				this.toggle_editing(true);
 			}
 		]);
 	}
 
 	make_sales_invoice_frm() {
-		this.dt = 'Sales Invoice';
+		const doctype = 'Sales Invoice';
 		return new Promise(resolve => {
-			frappe.model.with_doctype(this.dt, () => {
-				const page = $('<div>');
-				const frm = new _f.Frm(this.dt, page, false);
-				const name = frappe.model.make_new_doc_and_get_name(this.dt, true);
-				frm.refresh(name);
-				frm.doc.items = [];
-				this.doc = frm.doc;
-				this.frm = frm;
-				this.frm.set_value('is_pos', 1);
+			if (this.frm) {
+				this.frm = get_frm(this.frm);
 				resolve();
-			});
+			} else {
+				frappe.model.with_doctype(doctype, () => {
+					this.frm = get_frm();
+					resolve();
+				});
+			}
 		});
+
+		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 = [];
+			frm.set_value('is_pos', 1);
+			frm.meta.default_print_format = 'POS Invoice';
+
+			return frm;
+		}
 	}
 
 	prepare_menu() {
@@ -291,15 +297,16 @@
 		});
 	}
 
-	set_primary_action() {
-		var me = this;
-		this.page.set_secondary_action(__("Print"), function () {
-			me.frm.print_preview.printit(true)
-		})
+	set_form_action() {
+		if(this.frm.doc.docstatus !== 1) return;
 
-		this.page.set_primary_action(__("New"), function () {
-			me.make_new_invoice()
-		})
+		this.page.set_secondary_action(__("Print"), () => {
+			this.frm.print_preview.printit(true);
+		});
+
+		this.page.set_primary_action(__("New"), () => {
+			this.make_new_invoice();
+		});
 	}
 
 	show_taxes_and_totals() {
@@ -307,21 +314,18 @@
 		let currency = this.frm.doc.currency;
 		const taxes_wrapper = $(this.wrapper).find('.taxes');
 
-		this.frm.refresh_field('taxes')
-		$(this.wrapper).find('.net_total').html(format_currency(this.frm.doc.net_total, this.currency))
-		console.log(this.frm.doc.taxes[0].tax_amount)
+		this.frm.refresh_field('taxes');
+		$(this.wrapper).find('.net-total').html(format_currency(this.frm.doc.net_total, this.currency))
 		$.each(this.frm.doc.taxes, function(index, data) {
-			console.log(data.tax_amount)
 			tax_template += `
 				<div class="list-item" style="padding-right: 0;">
 					<div >${data.description}</div>
 					<div class="text-right bold">${fmt_money(data.tax_amount, currency)}</div>
-				</div>`
-		})
+				</div>`;
+		});
 
 		taxes_wrapper.empty()
-		console.log(tax_template)
-		taxes_wrapper.html(tax_template)
+		taxes_wrapper.html(tax_template);
 	}
 }
 
@@ -341,7 +345,6 @@
 	}
 
 	make_dom() {
-		$(this.wrapper).find('.pos-cart').empty()
 		this.wrapper.append(`
 			<div class="pos-cart">
 				<div class="customer-field">
@@ -361,14 +364,7 @@
 						</div>
 					</div>
 					<div class="taxes-and-totals">
-						<div class="list-item">
-							<div class="list-item__content list-item__content--flex-2 text-muted">${__('Net Total')}</div>
-							<div class="list-item__content net_total">0.00</div>
-						</div>
-						<div class="list-item">
-							<div class="list-item__content list-item__content--flex-2 text-muted">${__('Taxes')}</div>
-							<div class="list-item__content taxes">0.00</div>
-						</div>
+						${this.get_taxes_and_totals()}
 					</div>
 				</div>
 				<div class="number-pad-container">
@@ -376,6 +372,28 @@
 			</div>
 		`);
 		this.$cart_items = this.wrapper.find('.cart-items');
+		this.$empty_state = this.wrapper.find('.cart-items .empty-state');
+		this.$taxes_and_totals = this.wrapper.find('.taxes-and-totals');
+	}
+
+	reset() {
+		this.$cart_items.find('.list-item').remove();
+		this.$empty_state.show();
+		this.$taxes_and_totals.html(this.get_taxes_and_totals());
+		this.numpad && this.numpad.reset_value();
+		this.customer_field.set_value("");
+	}
+
+	get_taxes_and_totals() {
+		return `
+			<div class="list-item">
+				<div class="list-item__content list-item__content--flex-2 text-muted">${__('Net Total')}</div>
+				<div class="list-item__content net-total">0.00</div>
+			</div>
+			<div class="list-item">
+				<div class="list-item__content list-item__content--flex-2 text-muted">${__('Taxes')}</div>
+				<div class="list-item__content taxes">0.00</div>
+			</div>`;
 	}
 
 	make_customer_field() {
@@ -458,7 +476,7 @@
 	}
 
 	add_item(item) {
-		this.wrapper.find('.cart-items .empty-state').hide();
+		this.$empty_state.hide();
 
 		if (this.exists(item.item_code)) {
 			// update quantity
@@ -575,7 +593,6 @@
 
 		// current item
 		this.$cart_items.on('click', '.list-item', function() {
-			console.log('cart item click');
 			me.set_selected_item($(this));
 		});
 
@@ -872,7 +889,7 @@
 				me.highlight_button($btn);
 			}
 			if (me.reset_btns.includes(btn_value)) {
-				me.value = '';
+				me.reset_value();
 			} else {
 				if (btn_value === me.del_btn) {
 					me.value = me.value.substr(0, me.value.length - 1);
@@ -884,6 +901,10 @@
 		});
 	}
 
+	reset_value() {
+		this.value = '';
+	}
+
 	get_value() {
 		return flt(this.value);
 	}
@@ -951,9 +972,9 @@
 		var me = this;
 
 		this.dialog.set_primary_action(__("Submit"), function() {
-			me.dialog.hide()
-			me.events.submit_form()
-		})
+			me.dialog.hide();
+			me.events.submit_form();
+		});
 	}
 
 	get_fields() {
