diff --git a/setup/doctype/price_list/price_list.js b/setup/doctype/price_list/price_list.js
index f3adc72..6dfbd0f 100644
--- a/setup/doctype/price_list/price_list.js
+++ b/setup/doctype/price_list/price_list.js
@@ -5,4 +5,305 @@
 	onload: function() {
 		erpnext.add_for_territory();
 	},
+});
+
+cur_frm.cscript.refresh = function(doc, cdt, cdn) {
+	cur_frm.cscript.show_item_prices();
+}
+
+cur_frm.cscript.show_item_prices = function() {
+	var counter = 0;
+	var item_price = wn.model.get("Item Price", {parent: cur_frm.doc.name});
+	
+	new wn.ui.form.TableGrid({
+		parent: cur_frm.fields_dict.item_prices.wrapper,
+		frm: cur_frm,
+		table_field: wn.model.get("DocField", {parent:"Price List", fieldname:"item_prices"})[0]
+	});
+}
+
+wn.ui.form.TableGrid = Class.extend({
+	init: function(opts) {
+		$.extend(this, opts);
+		this.fields = wn.model.get("DocField", {parent: this.table_field.options});
+		this.make_table();
+	},
+	make_table: function() {
+		var me = this;
+		// Creating table & assigning attributes
+		var grid_table = document.createElement("table");
+		$(grid_table).attr("class", "table table-hover table-bordered grid");
+		
+		// Appending header & rows to table
+
+		$(this.make_table_headers()).appendTo(grid_table);
+		$(this.make_table_rows()).appendTo(grid_table);
+				
+		// Creating button to add new row
+		var btn_div = document.createElement("div");
+		var new_row_btn = document.createElement("button");
+		$new_row_btn = $(new_row_btn);
+		$new_row_btn.attr({
+			"class": "btn btn-success table-new-row",
+			"title": "Add new row"
+		});
+		var btn_icon = document.createElement("i");
+		$(btn_icon).attr("class", "icon-plus");
+		$(btn_icon).appendTo(new_row_btn);
+		$new_row_btn.append(" Add new row");
+		$new_row_btn.appendTo(btn_div);
+
+		// Appending table & button to parent
+		var $grid_table = $(grid_table).appendTo($(this.parent));
+		var $btn_div = $(btn_div).appendTo($(this.parent));
+
+		$btn_div.on("click", ".table-new-row", function() {
+			me.make_dialog();
+			return false;
+		});
+
+		$grid_table.on("click", ".table-row", function() {
+			me.make_dialog(this);
+			return false;
+		});
+	},
+	make_table_headers: function() {
+		var me = this;
+		var header = document.createElement("thead");
+		
+		// Creating header row
+		var row = document.createElement("tr");
+		$(row).attr({
+			"class": "active",
+			"style": "height:50px"
+		});
+		$(row).appendTo(header);
+
+		// Creating head first cell
+		var th = document.createElement("th");
+		$(th).attr({
+			"width": "8%",
+			"style": "vertical-align:middle",
+			"class": "text-center"
+		});
+		$(th).html("#");
+		$(th).appendTo(row);
+
+		// Make other headers with label as heading
+		$.each(this.fields, function(i, obj) {
+			if (obj.in_list_view===1)
+				var th = document.createElement("th");
+				$(th).attr("style", "vertical-align:middle");
+				$(th).html(obj.label);
+				$(th).appendTo(row);
+		});
+
+		return header;
+	},
+	make_table_rows: function() {
+		var me = this;
+
+		// Creating table body
+		var table_body = document.createElement("tbody");
+		$(table_body).attr("style", "cursor:pointer");
+
+		$.each(wn.model.get_children(this.table_field.options, this.frm.doc.name, 
+			this.table_field.fieldname, this.frm.doctype), function(index, d) {
+
+				// Creating table row
+				var tr = document.createElement("tr");
+				$(tr).attr({
+					"class": "table-row",
+					"data-idx": d.idx
+				});
+
+				// Creating table data & appending to row
+				var td = document.createElement("td");
+				$(td).attr("class", "text-center");
+				$(td).html(d.idx);
+				$(td).appendTo(tr);
+
+				$.each(me.fields, function(i, obj) {
+					if (obj.in_list_view===1) {
+						var td = document.createElement("td");
+						$(td).attr({
+							"data-fieldtype": obj.fieldtype,
+							"data-fieldname": obj.fieldname,
+							"data-fieldvalue": d[obj.fieldname],
+							"data-doc_name": d["name"]
+						});
+						$(td).html(d[obj.fieldname]);
+						
+						// if field is currency then add style & change text
+						if (obj.fieldtype=="Currency") {
+							$(td).attr("style", "text-align:right");
+							$(td).html(format_currency(d[obj.fieldname], me.frm.doc.currency));
+						}
+						
+						// Append td to row
+						$(td).appendTo(tr);
+					}
+				});
+
+				// Append row to table body
+				$(tr).appendTo(table_body);
+		});
+		
+		return table_body;
+	},
+	make_dialog: function(row) {
+		var me = this;
+
+		this.dialog = new wn.ui.Dialog({
+			title: this.table_field.options, 
+			fields: this.fields
+		});
+
+		this.dialog.set_values(this.make_dialog_values(row));
+
+		$a(this.dialog.body, 'div', '', '', this.make_dialog_buttons());
+		this.dialog.show();
+
+		this.dialog.$wrapper.find('button.update').on('click', function() {
+			me.update_row(row);
+		});
+
+		this.dialog.$wrapper.find('button.delete').on('click', function() {
+			me.delete_row(row);
+		});
+		return row;
+	},
+	// make_dialog_fields: function() {
+	// 	var me = this;
+	// 	var fields = [];
+		
+	// 	$.each(this.fields, function(i, obj) {
+	// 		var dialog_field = {
+	// 			fieldtype: obj.fieldtype, 
+	// 			fieldname: obj.fieldname, 
+	// 			label: obj.label
+	// 		}
+
+	// 		// check if fields has options
+	// 		if (obj.options) {
+	// 			var options = {options: obj.options}
+	// 			$.extend(dialog_field, options);
+	// 		}
+
+	// 		// check if field is mandatory
+	// 		if (obj.reqd == 1) {
+	// 			var reqd = {reqd: obj.reqd}
+	// 			$.extend(dialog_field, reqd);
+	// 		}
+
+	// 		fields.push(obj);
+	// 	});
+
+	// 	return fields;
+	// },
+	make_dialog_values: function(row) {
+		var me = this;
+		var dialog_values = {};
+
+		$.each(this.fields, function(i, item) {
+			dialog_values[item.fieldname] = $(row).find('td[data-fieldname="'+ item.fieldname +'"]').data('fieldvalue');
+		});
+
+		return dialog_values;
+	},
+	make_dialog_buttons: function() {
+		var me = this;
+		var buttons = '<button class="btn btn-primary update">Update</button>';
+
+		// if user can delete then only add the delete button in dialog
+		if (wn.model.can_delete(me.frm.doc.doctype))
+			buttons += ' <button class="btn btn-default delete">Delete</button>';
+
+		return buttons;
+	},
+	update_row: function(row) {
+		var me = this;
+
+		if (!row) {
+			me.add_new_row();
+		}
+		else {
+			$.each(me.fields, function(i, item) {
+				var $td = $(row).find('td[data-fieldname="'+ item.fieldname +'"]');
+				var val = me.dialog.get_values()[item.fieldname];
+				
+				wn.model.set_value(me.table_field.options, $td.attr('data-doc_name'), 
+					item.fieldname, me.dialog.get_values()[item.fieldname]);
+				$td.attr('data-fieldvalue', val);
+				
+				// If field type is currency the update with format currency
+				if ($td.attr('data-fieldtype') == "Currency")
+					$td.html(format_currency(val, me.frm.doc.currency));
+				else
+					$td.html(val);
+			});
+		}
+		
+		this.dialog.hide();
+	},
+	delete_row: function(row) {
+		var me = this;
+		var doc_name = $(row).find('td:last').attr('data-doc_name');
+		wn.model.clear_doc(me.table_field.options, doc_name);
+		$(row).remove();
+
+		// Re-assign idx
+		$.each($(this.parent).find(".grid tbody tr"), function(idx, data) {
+			$(data).attr("data-idx", idx + 1);
+			var $td = $(data).find('td:first');
+			$td.html(idx + 1);
+		});
+		this.dialog.hide();
+	},
+	add_new_row: function() {
+		var me = this;
+		var row = $(this.parent).find(".grid tbody tr");
+
+		// Creating new row
+		var new_row = document.createElement("tr");
+		$(new_row).attr({
+			"class": "table-row",
+			"data-idx": row.length + 1
+		});
+
+		// Creating first table data
+		var td = document.createElement("td");
+		$(td).attr("class", "text-center");
+		$(td).html(row.length + 1);
+		$(td).appendTo(new_row);
+
+		var child = wn.model.add_child(this.frm.doc, this.table_field.options, 
+			this.table_field.fieldname);
+		
+		$.each(this.fields, function(i, obj) {
+			if (obj.in_list_view===1) {
+				child[obj.fieldname] = me.dialog.get_values()[obj.fieldname];
+				
+				var td = document.createElement("td");
+				$(td).attr({
+					"data-fieldtype": obj.fieldtype,
+					"data-fieldname": obj.fieldname,
+					"data-fieldvalue": child[obj.fieldname],
+					"data-doc_name": child["name"]
+				});
+				$(td).html(child[obj.fieldname]);
+				
+				// if field is currency then add style & change text
+				if (obj.fieldtype=="Currency") {
+					$(td).attr("style", "text-align:right");
+					$(td).html(format_currency(child[obj.fieldname], me.frm.doc.currency));
+				}
+				
+				// Append td to row
+				$(td).appendTo(new_row);
+			}
+		});
+
+		$(new_row).appendTo($(this.parent).find(".grid tbody"));
+	}
 });
\ No newline at end of file
