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 41d7e3c..84ee8f5 100644
--- a/erpnext/selling/page/point_of_sale/point_of_sale.js
+++ b/erpnext/selling/page/point_of_sale/point_of_sale.js
@@ -9,7 +9,7 @@
 
 	wrapper.pos = new PointOfSale(wrapper);
 	window.cur_pos = wrapper.pos;
-}
+};
 
 class PointOfSale {
 	constructor(wrapper) {
@@ -74,12 +74,20 @@
 		this.cart = new POSCart({
 			wrapper: this.wrapper.find('.cart-container'),
 			events: {
-				customer_change: (customer) => this.cur_frm.set_value('customer', customer),
+				customer_change: (customer) => this.frm.set_value('customer', customer),
 				increase_qty: (item_code) => {
 					this.add_item_to_cart(item_code);
 				},
 				decrease_qty: (item_code) => {
 					this.add_item_to_cart(item_code, -1);
+				},
+				on_numpad: (value) => {
+					if (value == 'Pay') {
+						if (!this.payment) {
+							this.make_payment_modal();
+						}
+						this.payment.open_modal();
+					}
 				}
 			}
 		});
@@ -91,7 +99,7 @@
 			pos_profile: this.pos_profile,
 			events: {
 				item_click: (item_code) => {
-					if(!this.cur_frm.doc.customer) {
+					if(!this.frm.doc.customer) {
 						frappe.throw(__('Please select a customer'));
 					}
 					this.add_item_to_cart(item_code);
@@ -104,21 +112,25 @@
 
 		if(this.cart.exists(item_code)) {
 			// increase qty by 1
-			this.cur_frm.doc.items.forEach((item) => {
+			this.frm.doc.items.forEach((item) => {
 				if (item.item_code === item_code) {
-					frappe.model.set_value(item.doctype, item.name, 'qty', item.qty + qty)
+					const final_qty = item.qty + qty;
+					frappe.model.set_value(item.doctype, item.name, 'qty', final_qty)
 						.then(() => {
+							if (final_qty === 0) {
+								frappe.model.clear_doc(item.doctype, item.name);
+							}
+							// update cart
 							this.cart.add_item(item);
-						})
-					// update cart
+						});
 				}
 			});
 			return;
 		}
 
 		// add to cur_frm
-		const item = this.cur_frm.add_child('items', { item_code: item_code });
-		this.cur_frm.script_manager
+		const item = this.frm.add_child('items', { item_code: item_code });
+		this.frm.script_manager
 			.trigger('item_code', item.doctype, item.name)
 			.then(() => {
 				// update cart
@@ -126,6 +138,10 @@
 			});
 	}
 
+	make_payment_modal() {
+		this.payment = new Payment(this.frm);
+	}
+
 	bind_events() {
 
 	}
@@ -150,8 +166,8 @@
 				const name = frappe.model.make_new_doc_and_get_name(dt, true);
 				frm.refresh(name);
 				frm.doc.items = [];
-				this.cur_frm = frm;
-				this.cur_frm.set_value('is_pos', 1)
+				this.frm = frm;
+				this.frm.set_value('is_pos', 1);
 				resolve();
 			});
 		});
@@ -167,7 +183,7 @@
 
 		this.page.add_menu_item(__("New Sales Invoice"), function () {
 			//
-		})
+		});
 
 		this.page.add_menu_item(__("Sync Master Data"), function () {
 			//
@@ -229,7 +245,7 @@
 				label: 'Customer',
 				options: 'Customer',
 				reqd: 1,
-				onchange: (e) => {
+				onchange: () => {
 					this.events.customer_change.apply(null, [this.customer_field.get_value()]);
 				}
 			},
@@ -243,19 +259,21 @@
 			wrapper: this.wrapper.find('.number-pad-container'),
 			onclick: (btn_value) => {
 				// on click
-				if (btn_value == 'Pay') {
-					this.make_payment()
+				if (['Qty', 'Disc', 'Price'].includes(btn_value)) {
+					this.set_input_active(btn_value);
 				}
 
-				console.log(btn_value);
+				this.events.on_numpad.apply(null, [btn_value]);
 			}
 		});
 	}
 
-	make_payment() {
-		this.payment = new MakePayment({
-			frm: cur_frm
-		})
+	set_input_active(btn_value) {
+		if (!this.selected_item) return;
+
+		if (btn_value === 'Qty') {
+			this.selected_item.find('.quantity input').css('border', '1px solid blue');
+		}
 	}
 
 	add_item(item) {
@@ -281,7 +299,6 @@
 			$item.find('.rate').text(item.rate);
 		} else {
 			$item.remove();
-			frappe.model.clear_doc(item.doctype, item.name)
 		}
 	}
 
@@ -352,6 +369,10 @@
 					events.decrease_qty(item_code);
 				}
 			});
+		const me = this;
+		this.$cart_items.on('click', '.list-item', function() {
+			me.selected_item = $(this);
+		});
 	}
 }
 
@@ -528,30 +549,6 @@
 			</div>
 		`;
 
-		// const template = `
-
-		// 	<div class="pos-item-wrapper" data-item-code="${item_code}">
-		// 		<div class="pos-item-head">
-		// 			<span class="bold">${item_name}</span>
-		// 			<span class="text-muted">Stock: ${item_stock}</span>
-		// 		</div>
-		// 		<div class="pos-item-body">
-		// 			<div class="pos-item-image text-center"
-		// 				style="${!item_image ?
-		// 					'background-color: #fafbfc;' : ''
-		// 				} border: 0px;">
-		// 				${item_image ?
-		// 					`<img src="${item_image}" alt="${item_title}">` :
-		// 					`<span class="placeholder-text">
-		// 						${frappe.get_abbr(item_title)}
-		// 					</span>`
-		// 				}
-		// 			</div>
-		// 		</div>
-		// 	</div>
-
-		// `;
-
 		return template;
 	}
 
@@ -601,24 +598,27 @@
 }
 
 class NumberPad {
-	constructor({wrapper, onclick}) {
+	constructor({wrapper, onclick, button_array}) {
 		this.wrapper = wrapper;
 		this.onclick = onclick;
+		this.button_array = button_array;
 		this.make_dom();
 		this.bind_events();
 	}
 
 	make_dom() {
-		const button_array = [
-			[1, 2, 3, 'Qty'],
-			[4, 5, 6, 'Disc'],
-			[7, 8, 9, 'Price'],
-			['Del', 0, '.', 'Pay']
-		];
+		if (!this.button_array) {
+			this.button_array = [
+				[1, 2, 3, 'Qty'],
+				[4, 5, 6, 'Disc'],
+				[7, 8, 9, 'Price'],
+				['Del', 0, '.', 'Pay']
+			];
+		}
 
 		this.wrapper.html(`
 			<div class="number-pad">
-				${button_array.map(get_row).join("")}
+				${this.button_array.map(get_row).join("")}
 			</div>
 		`);
 
@@ -648,30 +648,38 @@
 	}
 }
 
-class MakePayment {
-	constructor({frm}) {
-		this.frm = frm
+class Payment {
+	constructor(frm) {
+		this.frm = frm;
 		this.make();
 		this.set_primary_action();
-		this.show_total_amount();
 		// this.show_outstanding_amount()
 	}
 
+	open_modal() {
+		this.show_total_amount();
+		this.dialog.show();
+	}
+
 	make() {
-		const me = this;
-		this.update_flag()
+		this.set_flag();
 
 		this.dialog = new frappe.ui.Dialog({
 			title: __('Payment'),
 			fields: this.get_fields(),
-			width:800
+			width: 800
 		});
 
-		this.dialog.show();
 		this.$body = this.dialog.body;
 
 		this.numpad = new NumberPad({
-			wrapper: $(this.$body).find('[data-fieldname = "numpad"]'),
+			wrapper: $(this.$body).find('[data-fieldname="numpad"]'),
+			button_array: [
+				[1, 2, 3],
+				[4, 5, 6],
+				[7, 8, 9],
+				['Del', 0, '.'],
+			],
 			onclick: (btn_value) => {
 				// on click
 			}
@@ -680,24 +688,24 @@
 
 	set_primary_action() {
 		this.dialog.set_primary_action(__("Submit"), function() {
-			//save form
-		})
+			// save form
+		});
 	}
 
 	get_fields() {
 		const me = this;
-		const total_amount = [
+		let fields = [
 			{
 				fieldtype: 'HTML',
-				fieldname: "total_amount",
+				fieldname: 'total_amount',
 			},
 			{
 				fieldtype: 'Section Break',
-				label: __("Mode of Payments")
+				label: __('Mode of Payments')
 			},
-		]
+		];
 
-		const mode_of_paymen_fields = this.frm.doc.payments.map(p => {
+		fields = fields.concat(this.frm.doc.payments.map(p => {
 			return {
 				fieldtype: 'Currency',
 				label: __(p.mode_of_payment),
@@ -707,12 +715,12 @@
 				onchange: (e) => {
 					const fieldname = $(e.target).attr('data-fieldname');
 					const value = this.dialog.get_value(fieldname);
-					me.update_payment_value(fieldname, value)
+					me.update_payment_value(fieldname, value);
 				}
-			}
-		})
+			};
+		}));
 
-		const other_fields = [
+		fields = fields.concat([
 			{
 				fieldtype: 'Column Break',
 			},
@@ -729,11 +737,11 @@
 				options: me.frm.doc.currency,
 				fieldname: "write_off_amount",
 				default: me.frm.doc.write_off_amount,
-				onchange: (e) => {
+				onchange: () => {
 					me.update_cur_frm_value('write_off_amount', () => {
 						frappe.flags.change_amount = false;
 						me.update_change_amount()
-					})
+					});
 				}
 			},
 			{
@@ -745,20 +753,19 @@
 				options: me.frm.doc.currency,
 				fieldname: "change_amount",
 				default: me.frm.doc.change_amount,
-				onchange: (e) => {
+				onchange: () => {
 					me.update_cur_frm_value('change_amount', () => {
 						frappe.flags.write_off_amount = false;
-						me.update_write_off_amount()
-					})
+						me.update_write_off_amount();
+					});
 				}
 			},
-		]
+		]);
 
-		$.merge(total_amount, mode_of_paymen_fields)
-		return $.merge(total_amount, other_fields)
+		return fields;
 	}
 
-	update_flag() {
+	set_flag() {
 		frappe.flags.write_off_amount = true;
 		frappe.flags.change_amount = true;
 	}
@@ -797,14 +804,14 @@
 	}
 
 	show_total_amount() {
-		const grand_total = format_currency(this.frm.doc.grand_total, this.frm.doc.currency)
+		const grand_total = format_currency(this.frm.doc.grand_total, this.frm.doc.currency);
 		const template = `
 			<h3>
 				${ __("Total Amount") }:
 				<span class="label label-default">${__(grand_total)}</span>
 			</h3>
 		`
-		this.total_amount_section = $(this.$body).find("[data-fieldname = 'total_amount']")
-		this.total_amount_section.append(template)
+		this.total_amount_section = $(this.$body).find("[data-fieldname = 'total_amount']");
+		this.total_amount_section.html(template);
 	}
 }
\ No newline at end of file
