diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index c4ed73c..af9de92 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -421,8 +421,8 @@
 				raise Exception
 
 	def validate_pos(self):
-		if not self.doc.cash_bank_account:
-			msgprint("Cash/Bank Account is mandatory for POS entry")
+		if not self.doc.cash_bank_account and flt(self.doc.paid_amount):
+			msgprint("Cash/Bank Account is mandatory for POS, for making payment entry")
 			raise Exception
 		if (flt(self.doc.paid_amount) + flt(self.doc.write_off_amount) - round(flt(self.doc.grand_total), 2))>0.001:
 			msgprint("(Paid amount + Write Off Amount) can not be greater than Grand Total")
@@ -676,8 +676,14 @@
 					if not d.warehouse:
 						d.warehouse = cstr(w)
 
-			if flt(self.doc.paid_amount) == 0: 
-				webnotes.conn.set(self.doc,'paid_amount',(flt(self.doc.grand_total) - flt(self.doc.write_off_amount)))
+			if flt(self.doc.paid_amount) == 0:
+				if self.doc.cash_bank_account: 
+					webnotes.conn.set(self.doc, 'paid_amount', 
+						(flt(self.doc.grand_total) - flt(self.doc.write_off_amount)))
+				else:
+					# show message that the amount is not paid
+					webnotes.conn.set(self.doc,'paid_amount',0)
+					webnotes.msgprint("Note: Payment Entry not created since 'Cash/Bank Account' was not specified.")
 
 		else:
 			webnotes.conn.set(self.doc,'paid_amount',0)
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.py b/erpnext/buying/doctype/purchase_common/purchase_common.py
index 5157f7c..e230e0f 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.py
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.py
@@ -407,9 +407,21 @@
 		if not default_currency:
 			msgprint('Message: Please enter default currency in Company Master')
 			raise Exception
-		if (obj.doc.currency == default_currency and flt(obj.doc.conversion_rate) != 1.00) or not obj.doc.conversion_rate or (obj.doc.currency != default_currency and flt(obj.doc.conversion_rate) == 1.00):
-			msgprint("Message: Please Enter Appropriate Conversion Rate.")
-			raise Exception
+			
+		if obj.doc.conversion_rate == 0:
+			msgprint('Conversion Rate cannot be 0', raise_exception=1)
+		elif not obj.doc.conversion_rate:
+			msgprint('Please specify Conversion Rate', raise_exception=1)
+		elif obj.doc.currency == default_currency and \
+				flt(obj.doc.conversion_rate) != 1.00:
+			msgprint("""Conversion Rate should be equal to 1.00, \
+						since the specified Currency and the company's currency \
+						are same""", raise_exception=1)
+		elif obj.doc.currency != default_currency and \
+				flt(obj.doc.conversion_rate) == 1.00:
+			msgprint("""Conversion Rate should not be equal to 1.00, \
+						since the specified Currency and the company's currency \
+						are different""", raise_exception=1)
 
 	def validate_doc(self, obj, prevdoc_doctype, prevdoc_docname):
 		if prevdoc_docname :
diff --git a/erpnext/buying/doctype/supplier/supplier.js b/erpnext/buying/doctype/supplier/supplier.js
index 498dbb4..5678e98 100644
--- a/erpnext/buying/doctype/supplier/supplier.js
+++ b/erpnext/buying/doctype/supplier/supplier.js
@@ -105,47 +105,48 @@
 	cur_frm.contact_list.run();
 }
 
-// make purchase order list
-cur_frm.cscript.make_po_list = function(parent, doc){
-	wn.require('js/listing.js');
-	var lst = new Listing();
-	lst.colwidths = ['5%','25%','20%','25%','25%'];
-	lst.colnames = ['Sr.','Id','Status','PO Date','Grand Total'];
-	lst.coltypes = ['Data','Link','Data','Data','Currency'];
-	lst.coloptions = ['','Purchase Order','','','',''];
 
-	var q = repl("select name,status,transaction_date, grand_total from `tabPurchase Order` where supplier='%(sup)s' order by transaction_date desc", {'sup':doc.name});
-	var q_max = repl("select count(name) from `tabPurchase Order` where supplier='%(sup)s'", {'sup':doc.name});
-	
-	cur_frm.cscript.run_list(lst,parent,q,q_max,doc,'Purchase Order','Purchase Order');
+// Transaction History
+
+cur_frm.cscript.make_po_list = function(parent, doc) {
+	cur_frm.cscript.render_transaction_history(parent, doc, 'Purchase Order', 
+		[
+			{fieldname: 'name', width: '28%', label: 'Id', type: 'Link'},
+			{fieldname: 'status', width: '25%', label: 'Status', type: 'Data'},
+			{fieldname: 'modified', width: '12%', label: 'Last Modified On', 
+				type: 'Date', style: 'text-align: right; color: #777'},
+			{fieldname: 'currency', width: '0%', label: 'Currency', 
+				style: 'display: hidden'},
+			{fieldname: 'grand_total', width: '35%', label: 'Grand Total', 
+				type: 'Currency', style: 'text-align: right'},
+		]);
 }
 
-// make purchase receipt list
-cur_frm.cscript.make_pr_list = function(parent,doc){
-	wn.require('js/listing.js');
-	var lst = new Listing();
-	lst.colwidths = ['5%','20%','20%','20%','15%','20%'];
-	lst.colnames = ['Sr.','Id','Status','Receipt Date','% Billed','Grand Total'];
-	lst.coltypes = ['Data','Link','Data','Data','Currency','Currency'];
-	lst.coloptions = ['','Purchase Receipt','','','',''];
-	
-	var q = repl("select name,status,transaction_date,per_billed,grand_total from `tabPurchase Receipt` where supplier='%(sup)s' order by transaction_date desc", {'sup':doc.name});
-	var q_max = repl("select count(name) from `tabPurchase Receipt` where supplier='%(sup)s'", {'sup':doc.name});
-	
-	cur_frm.cscript.run_list(lst,parent,q,q_max,doc,'Purchase Receipt','Purchase Receipt');
+cur_frm.cscript.make_pr_list = function(parent, doc) {
+	cur_frm.cscript.render_transaction_history(parent, doc, 'Purchase Receipt', 
+		[
+			{fieldname: 'name', width: '28%', label: 'Id', type: 'Link'},
+			{fieldname: 'status', width: '15%', label: 'Status', type: 'Data'},
+			{fieldname: 'per_billed', width: '10%', label: '% Billed', 
+				type: 'Percentage', style: 'text-align: right'},
+			{fieldname: 'modified', width: '12%', label: 'Last Modified On', 
+				type: 'Date', style: 'text-align: right; color: #777'},
+			{fieldname: 'currency', width: '0%', label: 'Currency', 
+				style: 'display: hidden'},
+			{fieldname: 'grand_total', width: '35%', label: 'Grand Total', 
+				type: 'Currency', style: 'text-align: right'},
+		]);
 }
 
-// make purchase invoice list
-cur_frm.cscript.make_pi_list = function(parent,doc){
-	wn.require('js/listing.js');
-	var lst = new Listing();
-	lst.colwidths = ['5%','20%','20%','20%','15%','20%'];
-	lst.colnames = ['Sr.','Id','Posting Date','Credit To','Bill Date','Grand Total'];
-	lst.coltypes = ['Data','Link','Data','Data','Currency','Currency'];
-	lst.coloptions = ['','Purchase Invoice','','','',''];
-
-	var q = repl("select name, posting_date, credit_to, bill_date, grand_total from `tabPurchase Invoice` where supplier='%(sup)s' order by posting_date desc", {'sup':doc.name});
-	var q_max = repl("select count(name) from `tabPurchase Invoice` where supplier='%(sup)s'", {'sup':doc.name});
-	
-	cur_frm.cscript.run_list(lst,parent,q,q_max,doc,'Purchase Invoice','Purchase Invoice');	
-}
+cur_frm.cscript.make_pi_list = function(parent, doc) {
+	cur_frm.cscript.render_transaction_history(parent, doc, 'Purchase Invoice', 
+		[
+			{fieldname: 'name', width: '30%', label: 'Id', type: 'Link'},
+			{fieldname: 'modified', width: '35%', label: 'Last Modified On', 
+				type: 'Date', style: 'text-align: right; color: #777'},
+			{fieldname: 'currency', width: '0%', label: 'Currency', 
+				style: 'display: hidden'},
+			{fieldname: 'grand_total', width: '35%', label: 'Grand Total', 
+				type: 'Currency', style: 'text-align: right'},
+		]);
+}
\ No newline at end of file
diff --git a/erpnext/patches/may_2012/remove_euro_currency.py b/erpnext/patches/may_2012/remove_euro_currency.py
new file mode 100644
index 0000000..2fb5373
--- /dev/null
+++ b/erpnext/patches/may_2012/remove_euro_currency.py
@@ -0,0 +1,17 @@
+def execute():
+	"""
+		* Replace EURO with EUR
+		* Delete EURO from tabCurrency
+	"""
+	import webnotes
+	tables = webnotes.conn.sql("show tables")
+	for (tab,) in tables:
+		desc = webnotes.conn.sql("desc `%s`" % tab, as_dict=1)
+		for d in desc:
+			if "currency" in d.get('Field'):
+				field = d.get('Field')
+				webnotes.conn.sql("""\
+					update `%s` set `%s`='EUR'
+					where `%s`='EURO'""" % (tab, field, field))
+	webnotes.conn.sql("update `tabSingles` set value='EUR' where value='EURO'")
+	webnotes.conn.sql("delete from `tabCurrency` where name='EURO'")
\ No newline at end of file
diff --git a/erpnext/patches/patch_list.py b/erpnext/patches/patch_list.py
index e781e9d..32a1e77 100644
--- a/erpnext/patches/patch_list.py
+++ b/erpnext/patches/patch_list.py
@@ -402,4 +402,9 @@
 		'patch_file': 'profile_perm_patch',
 		'description': 'Make profile readonly for role All'
 	},
+	{
+		'patch_module': 'patches.may_2012',
+		'patch_file': 'remove_euro_currency',
+		'description': 'Remove EURO currency and replace with EUR'
+	},
 ]
\ No newline at end of file
diff --git a/erpnext/production/doctype/production_order/production_order.txt b/erpnext/production/doctype/production_order/production_order.txt
index 62aa610..c244399 100644
--- a/erpnext/production/doctype/production_order/production_order.txt
+++ b/erpnext/production/doctype/production_order/production_order.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2012-03-27 14:36:05',
+		'creation': '2012-05-15 12:14:48',
 		'docstatus': 0,
-		'modified': '2012-03-27 14:45:50',
+		'modified': '2012-05-28 19:03:56',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -23,7 +23,7 @@
 		'section_style': u'Tabbed',
 		'server_code_error': u' ',
 		'show_in_menu': 0,
-		'version': 190
+		'version': 1
 	},
 
 	# These values are common for all DocField
@@ -323,6 +323,7 @@
 		'fieldname': u'produced_qty',
 		'fieldtype': u'Currency',
 		'label': u'Produced Qty',
+		'no_copy': 1,
 		'oldfieldname': u'produced_qty',
 		'oldfieldtype': u'Currency',
 		'permlevel': 1
diff --git a/erpnext/selling/doctype/customer/customer.js b/erpnext/selling/doctype/customer/customer.js
index 3ff20a3..f64d3f2 100644
--- a/erpnext/selling/doctype/customer/customer.js
+++ b/erpnext/selling/doctype/customer/customer.js
@@ -148,114 +148,63 @@
 	return 'SELECT `tabLead`.`name` FROM `tabLead` WHERE `tabLead`.`status`!="Converted" AND `tabLead`.%(key)s LIKE "%s" ORDER BY `tabLead`.`name` ASC LIMIT 50';	
 }
 
-/* ********************************* transaction history ************************************** */
 
-cur_frm.render_transaction_history_row = function(data) {
-	data.grand_total = fmt_money(data.grand_total);
-	data.modified = wn.datetime.only_date(data.modified);
-	return repl('\
-		<table><tr> \
-			<td width="30%" title="Id"> \
-				<a href="#!Form/%(doctype)s/%(name)s">%(name)s</a> \
-			</td> \
-			<td width="20%" title="Status">%(status)s</td> \
-			<td width="30%" title="Grand Total" style="text-align: right;"> \
-				%(currency)s %(grand_total)s \
-			</td> \
-			<td width="20%" title="Modified Date" style="text-align: right;"> \
-				%(modified)s \
-			</td> \
-		</tr></table>', data);
+// Transaction History
+// functions called by these functions are defined in contact_control.js
+cur_frm.cscript.make_qtn_list = function(parent, doc) {
+	cur_frm.cscript.render_transaction_history(parent, doc, 'Quotation', 
+		[
+			{fieldname: 'name', width: '28%', label: 'Id', type: 'Link'},
+			{fieldname: 'status', width: '25%', label: 'Status', type: 'Data'},
+			{fieldname: 'modified', width: '12%', label: 'Last Modified On', 
+				type: 'Date', style: 'text-align: right; color: #777'},
+			{fieldname: 'currency', width: '0%', label: 'Currency', 
+				style: 'display: hidden'},
+			{fieldname: 'grand_total', width: '35%', label: 'Grand Total', 
+				type: 'Currency', style: 'text-align: right'},
+		]);
 }
 
-cur_frm.get_query_transaction_history = function(args) {
-	return repl("\
-		select name, status, modified, currency, \
-			grand_total \
-		from `tab%(doctype)s` \
-		where customer='%(customer)s' \
-		order by modified desc", args);
+cur_frm.cscript.make_so_list = function(parent, doc) {
+	cur_frm.cscript.render_transaction_history(parent, doc, 'Sales Order', 
+		[
+			{fieldname: 'name', width: '28%', label: 'Id', type: 'Link'},
+			{fieldname: 'status', width: '25%', label: 'Status', type: 'Data'},
+			{fieldname: 'modified', width: '12%', label: 'Last Modified On', 
+				type: 'Date', style: 'text-align: right; color: #777'},
+			{fieldname: 'currency', width: '0%', label: 'Currency', 
+				style: 'display: hidden'},
+			{fieldname: 'grand_total', width: '35%', label: 'Grand Total', 
+				type: 'Currency', style: 'text-align: right'},
+		]);
 }
 
-cur_frm.render_transaction_history = function(parent, doc, doctype, get_query, render_row) {
-	$(parent).css({
-		'padding-top': '10px',
-	});
-	
-	cur_frm.transaction_list = new wn.ui.Listing({
-		parent: parent,
-		page_length: 10,
-		get_query: get_query || function() {
-			return cur_frm.get_query_transaction_history({
-				customer: doc.name,
-				doctype: doctype,
-			});
-		},
-		as_dict: 1,
-		no_result_message: repl('No %(doctype)s created for this customer', { doctype: doctype }),
-		render_row: function(wrapper, data) {
-			data.doctype = doctype;
-			render_html = render_row
-						? render_row(data)
-						: cur_frm.render_transaction_history_row(data);
-			$(wrapper).html(render_html);
-		},
-	});
-	
-	cur_frm.transaction_list.run();
-}
-// --------------------
-// make quotation list
-// --------------------
-cur_frm.cscript.make_qtn_list = function(parent,doc){
-	cur_frm.render_transaction_history(parent, doc, 'Quotation');
+cur_frm.cscript.make_dn_list = function(parent, doc) {
+	cur_frm.cscript.render_transaction_history(parent, doc, 'Delivery Note', 
+		[
+			{fieldname: 'name', width: '28%', label: 'Id', type: 'Link'},
+			{fieldname: 'status', width: '25%', label: 'Status', type: 'Data'},
+			{fieldname: 'modified', width: '12%', label: 'Last Modified On', 
+				type: 'Date', style: 'text-align: right; color: #777'},
+			{fieldname: 'currency', width: '0%', label: 'Currency', 
+				style: 'display: hidden'},
+			{fieldname: 'grand_total', width: '35%', label: 'Grand Total', 
+				type: 'Currency', style: 'text-align: right'},
+		]);
 }
 
-// -------------
-// make so list
-// -------------
-cur_frm.cscript.make_so_list = function(parent,doc){
-	cur_frm.render_transaction_history(parent, doc, 'Sales Order');
-}
-
-
-// -------------
-// make dn list
-// -------------
-cur_frm.cscript.make_dn_list = function(parent,doc){
-	cur_frm.render_transaction_history(parent, doc, 'Delivery Note');
-}
-
-// -------------
-// make si list
-// -------------
-cur_frm.cscript.make_si_list = function(parent,doc){
-	cur_frm.render_transaction_history(parent, doc, 'Sales Invoice', function() {
-		return repl("\
-			select name, outstanding_amount, modified, currency, \
-				grand_total \
-			from `tab%(doctype)s` \
-			where customer='%(customer)s' \
-			order by modified desc", { doctype: 'Sales Invoice', customer: doc.name });
-	}, function(data) {
-		data.grand_total = fmt_money(data.grand_total);
-		data.modified = wn.datetime.only_date(data.modified);
-		data.outstanding_amount = fmt_money(data.outstanding_amount);
-		return repl('\
-			<table><tr> \
-				<td width="30%" title="Id"> \
-					<a href="#!Form/%(doctype)s/%(name)s">%(name)s</a> \
-				</td> \
-				<td width="20%" title="Outstanding Amount" \
-					style="text-align: right; color: #777"> \
-					%(currency)s %(outstanding_amount)s \
-				</td>\
-				<td width="30%" title="Grand Total" style="text-align: right;"> \
-					%(currency)s %(grand_total)s\
-				</td> \
-				<td width="20%" title="Modified Date" style="text-align: right;"> \
-					%(modified)s \
-				</td> \
-			</tr></table>', data);
-	});
+cur_frm.cscript.make_si_list = function(parent, doc) {
+	cur_frm.cscript.render_transaction_history(parent, doc, 'Sales Invoice', 
+		[
+			{fieldname: 'name', width: '28%', label: 'Id', type: 'Link'},
+			{fieldname: 'outstanding_amount', width: '25%',
+				label: 'Outstanding Amount',
+				type: 'Currency', style: 'text-align: right; color: #777'},
+			{fieldname: 'modified', width: '12%', label: 'Last Modified On', 
+				type: 'Date', style: 'text-align: right; color: #777'},
+			{fieldname: 'currency', width: '0%', label: 'Currency', 
+				style: 'display: hidden'},
+			{fieldname: 'grand_total', width: '35%', label: 'Grand Total', 
+				type: 'Currency', style: 'text-align: right'},
+		]);
 }
\ No newline at end of file
diff --git a/erpnext/selling/doctype/sales_common/sales_common.py b/erpnext/selling/doctype/sales_common/sales_common.py
index a04b058..21f83b5 100644
--- a/erpnext/selling/doctype/sales_common/sales_common.py
+++ b/erpnext/selling/doctype/sales_common/sales_common.py
@@ -207,21 +207,32 @@
 			if default: add_cond = 'ifnull(t2.is_default,0) = 1'
 			else: add_cond = 't1.parent = "'+cstr(obj.doc.charge)+'"'
 			idx = 0
-			other_charge = webnotes.conn.sql("select t1.charge_type,t1.row_id,t1.description,t1.account_head,t1.rate,t1.tax_amount,t1.included_in_print_rate, t1.cost_center_other_charges from `tabSales Taxes and Charges` t1, `tabSales Taxes and Charges Master` t2 where t1.parent = t2.name and t2.company = '%s' and %s order by t1.idx" % (obj.doc.company, add_cond), as_dict = 1)
+			other_charge = webnotes.conn.sql("""\
+				select t1.*
+				from
+					`tabSales Taxes and Charges` t1,
+					`tabSales Taxes and Charges Master` t2
+				where
+					t1.parent = t2.name and
+					t2.company = '%s' and
+					%s
+				order by t1.idx""" % (obj.doc.company, add_cond), as_dict=1)
+			from webnotes.model import default_fields
 			for other in other_charge:
-				d =	addchild(obj.doc, 'other_charges', 'Sales Taxes and Charges', 1, obj.doclist)
-				d.charge_type = other['charge_type']
-				d.row_id = other['row_id']
-				d.description = other['description']
-				d.account_head = other['account_head']
-				d.cost_center_other_charges = other['cost_center_other_charges']
-				d.rate = flt(other['rate'])
-				d.tax_amount = flt(other['tax_amount'])
-				d.included_in_print_rate = cint(other['included_in_print_rate'])
+				# remove default fields like parent, parenttype etc.
+				# from query results
+				for field in default_fields:
+					if field in other: del other[field]
+
+				d = addchild(obj.doc, 'other_charges', 'Sales Taxes and Charges', 1,
+						obj.doclist)
+				d.fields.update(other)
+				d.rate = flt(d.rate)
+				d.tax_amount = flt(d.tax_rate)
+				d.included_in_print_rate = cint(d.included_in_print_rate)
 				d.idx = idx
 				idx += 1
 			
-			
 	# Get TERMS AND CONDITIONS
 	# =======================================================================================
 	def get_tc_details(self,obj):
@@ -352,8 +363,10 @@
 			
 			if self.has_sales_bom(d.item_code):
 				for p in getlist(obj.doclist, 'packing_details'):
-					if p.parent_item == d.item_code:
-						il.append([warehouse, p.item_code, flt(p.qty)*qty, flt(p.qty)* reserved_qty, p.uom, p.batch_no, p.serial_no])
+					#if p.parent_item == d.item_code: -- this fails when item with same name appears more than once in delivery note item table
+					if p.parent_detail_docname == d.name:
+						# the packing details table's qty is already multiplied with parent's qty
+						il.append([warehouse, p.item_code, flt(p.qty), (flt(p.qty)/qty)*(reserved_qty), p.uom, p.batch_no, p.serial_no])
 			else:
 				il.append([warehouse, d.item_code, qty, reserved_qty, d.stock_uom, d.batch_no, d.serial_no])
 		return il
@@ -424,6 +437,10 @@
 			pi.serial_no = cstr(line.serial_no)
 			pi.batch_no = cstr(line.batch_no)
 		pi.idx = self.packing_list_idx
+		
+		# has to be saved, since this function is called on_update of delivery note
+		pi.save()
+		
 		self.packing_list_idx += 1
 
 
diff --git a/erpnext/setup/doctype/contact_control/contact_control.js b/erpnext/setup/doctype/contact_control/contact_control.js
index 51fc5cf..f9dc2c9 100755
--- a/erpnext/setup/doctype/contact_control/contact_control.js
+++ b/erpnext/setup/doctype/contact_control/contact_control.js
@@ -121,3 +121,80 @@
 		return 'SELECT `tabTerritory`.`name`,`tabTerritory`.`parent_territory` FROM `tabTerritory` WHERE `tabTerritory`.`is_group` = "No" AND `tabTerritory`.`docstatus`!= 2 AND `tabTerritory`.%(key)s LIKE "%s"  ORDER BY  `tabTerritory`.`name` ASC LIMIT 50';
 	}
 }
+
+
+// Transaction History related functions
+cur_frm.cscript.render_transaction_history = function(parent, doc, doctype, args) {
+	$(parent).css({ 'padding-top': '10px' });
+	cur_frm.transaction_list = new wn.ui.Listing({
+		parent: parent,
+		page_length: 10,
+		get_query: function() {
+			return cur_frm.cscript.get_query_transaction_history({
+				parent: doc.doctype.toLowerCase(),
+				parent_name: doc.name,
+				doctype: doctype,
+				fields: (function() {
+					var fields = [];
+					for(var i in args) {
+						fields.push(args[i].fieldname);
+					}
+					return fields.join(", ");
+				})(),
+			});
+		},
+		as_dict: 1,
+		no_result_message: repl('No %(doctype)s created for this %(parent)s', 
+								{ doctype: doctype, parent: doc.doctype }),
+		render_row: function(wrapper, data) {
+			render_html = cur_frm.cscript.render_transaction_history_row(data, args, doctype);
+			$(wrapper).html(render_html);
+		},
+	});
+	cur_frm.transaction_list.run();
+}
+
+cur_frm.cscript.render_transaction_history_row = function(data, args, doctype) {
+	var content = [];
+	var currency = data.currency;
+	for (var a in args) {
+		for (var d in data) {
+			if (args[a].fieldname === d && args[a].fieldname !== 'currency') {
+				if (args[a].type === 'Link') {
+					data[d] = repl('<a href="#!Form/%(doctype)s/%(name)s">\
+						%(name)s</a>', { doctype: doctype, name: data[d]});
+				} else if (args[a].type === 'Currency') {
+					data[d] = currency + " " + fmt_money(data[d]);
+				} else if (args[a].type === 'Percentage') {
+					data[d] = flt(data[d]) + '%';
+				} else if (args[a].type === 'Date') {
+					data[d] = wn.datetime.only_date(data[d]);
+				}
+				if (args[a].style == undefined) {
+					args[a].style = '';
+				}
+				data[d] = repl('\
+					<td width="%(width)s" title="%(title)s" style="%(style)s">\
+					%(content)s</td>',
+					{
+						content: data[d],
+						width: args[a].width,
+						title: args[a].label,
+						style: args[a].style,
+					});
+				content.push(data[d]);
+				break;
+			}
+		}
+	}
+	content = content.join("\n");
+	return '<table><tr>' + content + '</tr></table>';
+}
+
+cur_frm.cscript.get_query_transaction_history = function(args) {
+	var query = repl("\
+		select %(fields)s from `tab%(doctype)s` \
+		where %(parent)s = '%(parent_name)s' \
+		order by modified desc", args);
+	return query;
+}
\ No newline at end of file
diff --git a/erpnext/startup/js/modules.js b/erpnext/startup/js/modules.js
index 2e0e701..2799fa1 100644
--- a/erpnext/startup/js/modules.js
+++ b/erpnext/startup/js/modules.js
@@ -61,22 +61,40 @@
 
 erpnext.module_page.make_list = function(module, wrapper) {
 	// make project listing
-	wrapper.list = new wn.ui.Listing({
-		parent: $(wrapper).find('.reports-list').get(0),
-		method: 'utilities.get_report_list',
+	var $w = $(wrapper).find('.reports-list');
+	var $parent1 = $('<div style="width: 45%; float: left; margin-right: 4.5%"></div>').appendTo($w);
+	var $parent2 = $('<div style="width: 45%; float: left;"></div>').appendTo($w);
+
+	wrapper.list1 = new wn.ui.Listing({
+		parent: $parent1,
+		method: 'utilities.get_sc_list',
 		render_row: function(row, data) {
 			if(!data.parent_doc_type) data.parent_doc_type = data.doc_type;
 			$(row).html(repl('<a href="#!Report/%(doc_type)s/%(criteria_name)s" \
 				data-doctype="%(parent_doc_type)s">\
 				%(criteria_name)s</a>', data))
 		},
-		args: {
-			module: module
-		},
+		args: { module: module },
 		no_refresh: true,
 		callback: function(r) {
-			erpnext.module_page.hide_links(wrapper)
+			erpnext.module_page.hide_links($parent1)
 		}
 	});
-	wrapper.list.run();	
+	wrapper.list1.run();	
+
+	wrapper.list2 = new wn.ui.Listing({
+		parent: $parent2,
+		method: 'utilities.get_report_list',
+		render_row: function(row, data) {
+			$(row).html(repl('<a href="#!Report2/%(ref_doctype)s/%(name)s" \
+				data-doctype="%(ref_doctype)s">\
+				%(name)s</a>', data))
+		},
+		args: { module: module },
+		no_refresh: true,
+		callback: function(r) {
+			erpnext.module_page.hide_links($parent2)
+		}
+	});
+	wrapper.list2.run();
 }
\ No newline at end of file
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index fa4144b..61ebe3f 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -182,7 +182,6 @@
 		#self.validate_prevdoc_details()
 		self.validate_reference_value()
 		self.validate_for_items()
-		sales_com_obj.make_packing_list(self,'delivery_note_details')
 		sales_com_obj.validate_max_discount(self, 'delivery_note_details')						 #verify whether rate is not greater than max discount
 		sales_com_obj.get_allocated_sum(self)	# this is to verify that the allocated % of sales persons is 100%
 		sales_com_obj.check_conversion_rate(self)
@@ -474,6 +473,7 @@
 
 	# on update
 	def on_update(self):
+		get_obj('Sales Common').make_packing_list(self,'delivery_note_details')
 		self.set_actual_qty()
 		get_obj('Stock Ledger').scrub_serial_nos(self)
 
diff --git a/erpnext/utilities/__init__.py b/erpnext/utilities/__init__.py
index d57f0de..f6f3859 100644
--- a/erpnext/utilities/__init__.py
+++ b/erpnext/utilities/__init__.py
@@ -17,7 +17,7 @@
 import webnotes
 
 @webnotes.whitelist()
-def get_report_list(arg=None):
+def get_sc_list(arg=None):
 	"""return list of reports for the given module module"""	
 	webnotes.response['values'] = webnotes.conn.sql("""select 
 		distinct criteria_name, doc_type, parent_doc_type
@@ -26,4 +26,16 @@
 		and docstatus in (0, NULL)
 		and ifnull(disabled, 0) = 0 
 		order by criteria_name 
+		limit %(limit_start)s, %(limit_page_length)s""" % webnotes.form_dict, as_dict=True)
+
+@webnotes.whitelist()
+def get_report_list():
+	"""return list on new style reports for modules"""
+	webnotes.response['values'] = webnotes.conn.sql("""select 
+		distinct tabReport.name, tabReport.ref_doctype
+		from `tabReport`, `tabDocType`
+		where tabDocType.module='%(module)s' 
+		and tabDocType.name = tabReport.ref_doctype
+		and tabReport.docstatus in (0, NULL)
+		order by tabReport.name 
 		limit %(limit_start)s, %(limit_page_length)s""" % webnotes.form_dict, as_dict=True)
\ No newline at end of file
diff --git a/erpnext/utilities/doctype/address/address.js b/erpnext/utilities/doctype/address/address.js
index 8949c5a..c4631f8 100644
--- a/erpnext/utilities/doctype/address/address.js
+++ b/erpnext/utilities/doctype/address/address.js
@@ -20,17 +20,17 @@
 	
 	var route = wn.get_route();
 	if(route[1]=='Supplier') {
-		var supplier = locals.Supplier[route[2]]
+		var supplier = wn.container.page.frm.doc;
 		doc.supplier = supplier.name;
 		doc.supplier_name = supplier.supplier_name;
 		doc.address_type = 'Office';
 	} else if(route[1]=='Customer') {
-		var customer = locals.Customer[route[2]]
+		var customer = wn.container.page.frm.doc;
 		doc.customer = customer.name;
 		doc.customer_name = customer.customer_name;
 		doc.address_type = 'Office';
 	} else if(route[1]=='Sales Partner') {
-		var sp = locals['Sales Partner'][route[2]];
+		var sp = wn.container.page.frm.doc;
 		doc.sales_partner = sp.name;
 		doc.address_type = 'Office';				
 	}
diff --git a/erpnext/utilities/doctype/contact/contact.js b/erpnext/utilities/doctype/contact/contact.js
index ae06ed4..1b0894e 100644
--- a/erpnext/utilities/doctype/contact/contact.js
+++ b/erpnext/utilities/doctype/contact/contact.js
@@ -21,18 +21,18 @@
 
 	var route = wn.get_route();
 	if(route[1]=='Supplier') {
-		var supplier = locals.Supplier[route[2]]
+		var supplier = wn.container.page.frm.doc;
 		doc.supplier = supplier.name;
 		doc.supplier_name = supplier.supplier_name;
 	} else if(route[1]=='Customer') {
-		var customer = locals.Customer[route[2]];
+		var customer = wn.container.page.frm.doc;
 		doc.customer = customer.name;
 		doc.customer_name = customer.customer_name;
 		if(customer.customer_type == 'Individual') {
 			doc.first_name = customer.customer_name;
 		}		
 	} else if(route[1]=='Sales Partner') {
-		var sp = locals['Sales Partner'][route[2]];
+		var sp = wn.container.page.frm.doc;
 		doc.sales_partner = sp.name;
 	}
 }
diff --git a/public/css/all-app.css b/public/css/all-app.css
index a5378a6..4f5d548 100644
--- a/public/css/all-app.css
+++ b/public/css/all-app.css
@@ -3276,51 +3276,71 @@
   font-family: 'Pontano Sans';
   font-style: normal;
   font-weight: 800;
-  src: url('../lib/css/fonts/pontanosans.woff') format('woff');
+  src: url('fonts/pontanosans.woff') format('woff');
 }
 
 @font-face {
   font-family: 'Droid Sans';
   font-style: normal;
   font-weight: normal;
-  src: local('Droid Sans'), local('DroidSans'), url('../lib/css/fonts/droidsans.woff') format('woff');
+  src: local('Droid Sans'), local('DroidSans'), url('fonts/droidsans.woff') format('woff');
 }
 
 @font-face {
   font-family: 'PT Sans';
   font-style: normal;
   font-weight: normal;
-  src: local('PT Sans'), local('PTSans-Regular'), url('../lib/css/fonts/ptsans.woff') format('woff');
+  src: local('PT Sans'), local('PTSans-Regular'), url('fonts/ptsans.woff') format('woff');
 }
 
 @font-face {
   font-family: 'Open Sans';
   font-style: normal;
   font-weight: 400;
-  src: local('Open Sans'), local('OpenSans'), url('../lib/css/fonts/opensans.woff') format('woff');
+  src: local('Open Sans'), local('OpenSans'), url('fonts/opensans.woff') format('woff');
 }
 
 @font-face {
   font-family: 'Lato';
   font-style: normal;
   font-weight: 400;
-  src: local('Lato Regular'), local('Lato-Regular'), url('../lib/css/fonts/lato.woff') format('woff');
+  src: local('Lato Regular'), local('Lato-Regular'), url('fonts/lato.woff') format('woff');
 }
 
 @font-face {
   font-family: 'Cabin';
   font-style: normal;
   font-weight: 400;
-  src: local('Cabin Regular'), local('Cabin-Regular'), url('../lib/css/fonts/cabin.woff') format('woff');
+  src: local('Cabin Regular'), local('Cabin-Regular'), url('fonts/cabin.woff') format('woff');
 }
 
 @font-face {
   font-family: 'Pacifico';
   font-style: normal;
   font-weight: normal;
-  src: local('Pacifico Regular'), local('Pacifico-Regular'), url('../lib/css/fonts/pacifico.woff') format('woff');
+  src: local('Pacifico Regular'), local('Pacifico-Regular'), url('fonts/pacifico.woff') format('woff');
 }
 
+@font-face {
+  font-family: 'Oleo Script';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Oleo Script'), local('OleoScript-Regular'), url('fonts/oleoscript.woff') format('woff');
+}
+
+@font-face {
+  font-family: 'Cookie';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Cookie-Regular'), url('fonts/cookie.woff') format('woff');
+}
+
+@font-face {
+  font-family: 'Marck Script';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Marck Script'), local('MarckScript-Regular'), url('fonts/marckscript.woff') format('woff');
+}
 
 
 /*
diff --git a/public/css/all-web.css b/public/css/all-web.css
index e518820..1848143 100644
--- a/public/css/all-web.css
+++ b/public/css/all-web.css
@@ -2271,51 +2271,71 @@
   font-family: 'Pontano Sans';
   font-style: normal;
   font-weight: 800;
-  src: url('../lib/css/fonts/pontanosans.woff') format('woff');
+  src: url('fonts/pontanosans.woff') format('woff');
 }
 
 @font-face {
   font-family: 'Droid Sans';
   font-style: normal;
   font-weight: normal;
-  src: local('Droid Sans'), local('DroidSans'), url('../lib/css/fonts/droidsans.woff') format('woff');
+  src: local('Droid Sans'), local('DroidSans'), url('fonts/droidsans.woff') format('woff');
 }
 
 @font-face {
   font-family: 'PT Sans';
   font-style: normal;
   font-weight: normal;
-  src: local('PT Sans'), local('PTSans-Regular'), url('../lib/css/fonts/ptsans.woff') format('woff');
+  src: local('PT Sans'), local('PTSans-Regular'), url('fonts/ptsans.woff') format('woff');
 }
 
 @font-face {
   font-family: 'Open Sans';
   font-style: normal;
   font-weight: 400;
-  src: local('Open Sans'), local('OpenSans'), url('../lib/css/fonts/opensans.woff') format('woff');
+  src: local('Open Sans'), local('OpenSans'), url('fonts/opensans.woff') format('woff');
 }
 
 @font-face {
   font-family: 'Lato';
   font-style: normal;
   font-weight: 400;
-  src: local('Lato Regular'), local('Lato-Regular'), url('../lib/css/fonts/lato.woff') format('woff');
+  src: local('Lato Regular'), local('Lato-Regular'), url('fonts/lato.woff') format('woff');
 }
 
 @font-face {
   font-family: 'Cabin';
   font-style: normal;
   font-weight: 400;
-  src: local('Cabin Regular'), local('Cabin-Regular'), url('../lib/css/fonts/cabin.woff') format('woff');
+  src: local('Cabin Regular'), local('Cabin-Regular'), url('fonts/cabin.woff') format('woff');
 }
 
 @font-face {
   font-family: 'Pacifico';
   font-style: normal;
   font-weight: normal;
-  src: local('Pacifico Regular'), local('Pacifico-Regular'), url('../lib/css/fonts/pacifico.woff') format('woff');
+  src: local('Pacifico Regular'), local('Pacifico-Regular'), url('fonts/pacifico.woff') format('woff');
 }
 
+@font-face {
+  font-family: 'Oleo Script';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Oleo Script'), local('OleoScript-Regular'), url('fonts/oleoscript.woff') format('woff');
+}
+
+@font-face {
+  font-family: 'Cookie';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Cookie-Regular'), url('fonts/cookie.woff') format('woff');
+}
+
+@font-face {
+  font-family: 'Marck Script';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Marck Script'), local('MarckScript-Regular'), url('fonts/marckscript.woff') format('woff');
+}
 
 
 /*
diff --git a/public/css/fonts/cabin.woff b/public/css/fonts/cabin.woff
new file mode 100644
index 0000000..6f24a8a
--- /dev/null
+++ b/public/css/fonts/cabin.woff
Binary files differ
diff --git a/public/css/fonts/cookie.woff b/public/css/fonts/cookie.woff
new file mode 100644
index 0000000..454762d
--- /dev/null
+++ b/public/css/fonts/cookie.woff
Binary files differ
diff --git a/public/css/fonts/droidsans.woff b/public/css/fonts/droidsans.woff
new file mode 100644
index 0000000..3807cd6
--- /dev/null
+++ b/public/css/fonts/droidsans.woff
Binary files differ
diff --git a/public/css/fonts/lato.woff b/public/css/fonts/lato.woff
new file mode 100644
index 0000000..ad1a467
--- /dev/null
+++ b/public/css/fonts/lato.woff
Binary files differ
diff --git a/public/css/fonts/marckscript.woff b/public/css/fonts/marckscript.woff
new file mode 100644
index 0000000..e5f1f0b
--- /dev/null
+++ b/public/css/fonts/marckscript.woff
Binary files differ
diff --git a/public/css/fonts/oleoscript.woff b/public/css/fonts/oleoscript.woff
new file mode 100644
index 0000000..feb3f96
--- /dev/null
+++ b/public/css/fonts/oleoscript.woff
Binary files differ
diff --git a/public/css/fonts/opensans.woff b/public/css/fonts/opensans.woff
new file mode 100644
index 0000000..58e6cb3
--- /dev/null
+++ b/public/css/fonts/opensans.woff
Binary files differ
diff --git a/public/css/fonts/pacifico.woff b/public/css/fonts/pacifico.woff
new file mode 100644
index 0000000..373c381
--- /dev/null
+++ b/public/css/fonts/pacifico.woff
Binary files differ
diff --git a/public/css/fonts/pontanosans.woff b/public/css/fonts/pontanosans.woff
new file mode 100644
index 0000000..d728f0c
--- /dev/null
+++ b/public/css/fonts/pontanosans.woff
Binary files differ
diff --git a/public/css/fonts/ptsans.woff b/public/css/fonts/ptsans.woff
new file mode 100644
index 0000000..56c598d
--- /dev/null
+++ b/public/css/fonts/ptsans.woff
Binary files differ
diff --git a/public/js/all-app.js b/public/js/all-app.js
index 3d2b40a..c5e760e 100644
--- a/public/js/all-app.js
+++ b/public/js/all-app.js
@@ -959,7 +959,7 @@
     <div class="wnlist-area"><div class="help">Loading...</div></div>\
    </div>\
    <div class="layout-side-section">\
-    <div class="stat-wrapper show-docstatus hide">\
+    <div class="show-docstatus hide" style="margin-bottom: 19px">\
      <h4>Show</h4>\
      <div><input data-docstatus="0" type="checkbox" checked="checked" /> Drafts</div>\
      <div><input data-docstatus="1" type="checkbox" checked="checked" /> Submitted</div>\
@@ -978,7 +978,7 @@
   </p></div>',{doctype_label:get_doctype_label(this.doctype),doctype:this.doctype,description:wn.markdown(locals.DocType[this.doctype].description||'')});},render_row:function(row,data){data.doctype=this.doctype;this.listview.render(row,data,this);},get_query_fields:function(){return this.listview.fields;},get_args:function(){return{doctype:this.doctype,fields:this.get_query_fields(),filters:this.filter_list.get_filters(),docstatus:this.can_submit?$.map(this.$page.find('.show-docstatus :checked'),function(inp){return $(inp).attr('data-docstatus')}):[]}},add_delete_option:function(){var me=this;if(this.can_delete){this.add_button('Delete',function(){me.delete_items();},'icon-remove')}},delete_items:function(){var me=this;var dl=$.map(me.$page.find('.list-delete:checked'),function(e){return $(e).data('name');});if(!dl.length)
 return;if(!confirm('This is PERMANENT action and you cannot undo. Continue?')){return;}
 me.set_working(true);wn.call({method:'webnotes.widgets.doclistview.delete_items',args:{items:dl,doctype:me.doctype},callback:function(){me.set_working(false);me.refresh();}})},init_stats:function(){var me=this
-wn.call({method:'webnotes.widgets.doclistview.get_stats',args:{stats:me.listview.stats,doctype:me.doctype},callback:function(r){$.each(me.listview.stats,function(i,v){me.render_stat(v,r.message[v]);});}});},render_stat:function(field,stat){var me=this;if(!stat||!stat.length){if(field=='_user_tags'){this.$page.find('.layout-side-section').append('<div class="stat-wrapper"><h4>Tags</h4>\
+wn.call({method:'webnotes.widgets.doclistview.get_stats',args:{stats:me.listview.stats,doctype:me.doctype},callback:function(r){$.each(me.listview.stats,function(i,v){me.render_stat(v,r.message[v]);});if(me.listview.stats.length){$('<button class="btn btn-small"><i class="refresh"></i> Refresh</button>').click(function(){me.reload_stats();}).appendTo($('<div class="stat-wrapper">').appendTo(me.$page.find('.layout-side-section')))}}});},render_stat:function(field,stat){var me=this;if(!stat||!stat.length){if(field=='_user_tags'){this.$page.find('.layout-side-section').append('<div class="stat-wrapper"><h4>Tags</h4>\
       <div class="help small"><i>No records tagged.</i><br><br> \
       To add a tag, open the document and click on \
       "Add Tag" on the sidebar</div></div>');}
@@ -995,7 +995,7 @@
     <a href="#" data-label="%(label)s" data-field="%(field)s">\
      %(label)s</a> \
     (%(count)s)</div>\
-  </div>',args));this.setup_stat_item_click($item);return $item;},setup_stat_item_click:function($item){var me=this;$item.find('a').click(function(){var fieldname=$(this).attr('data-field');var label=$(this).attr('data-label');me.set_filter(fieldname,label);return false;});},set_filter:function(fieldname,label){var filter=this.filter_list.get_filter(fieldname);if(filter){var v=filter.field.get_value();if(v.indexOf(label)!=-1){return false;}else{if(fieldname=='_user_tags'){this.filter_list.add_filter(fieldname,'like','%'+label);}else{filter.set_values(fieldname,'in',v+', '+label);}}}else{if(fieldname=='_user_tags'){this.filter_list.add_filter(fieldname,'like','%'+label);}else{this.filter_list.add_filter(fieldname,'=',label);}}
+  </div>',args));this.setup_stat_item_click($item);return $item;},reload_stats:function(){this.$page.find('.layout-side-section .stat-wrapper').remove();this.init_stats();},setup_stat_item_click:function($item){var me=this;$item.find('a').click(function(){var fieldname=$(this).attr('data-field');var label=$(this).attr('data-label');me.set_filter(fieldname,label);return false;});},set_filter:function(fieldname,label){var filter=this.filter_list.get_filter(fieldname);if(filter){var v=filter.field.get_value();if(v.indexOf(label)!=-1){return false;}else{if(fieldname=='_user_tags'){this.filter_list.add_filter(fieldname,'like','%'+label);}else{filter.set_values(fieldname,'in',v+', '+label);}}}else{if(fieldname=='_user_tags'){this.filter_list.add_filter(fieldname,'like','%'+label);}else{this.filter_list.add_filter(fieldname,'=',label);}}
 this.run();}});wn.views.ListView=Class.extend({init:function(doclistview){this.doclistview=doclistview;this.doctype=doclistview.doctype;var t="`tab"+this.doctype+"`.";this.fields=[t+'name',t+'owner',t+'docstatus',t+'_user_tags',t+'modified'];this.stats=['_user_tags'];this.show_hide_check_column();},columns:[{width:'3%',content:'check'},{width:'4%',content:'avatar'},{width:'3%',content:'docstatus',css:{"text-align":"center"}},{width:'35%',content:'name'},{width:'40%',content:'tags',css:{'color':'#aaa'}},{width:'15%',content:'modified',css:{'text-align':'right','color':'#222'}}],render_column:function(data,parent,opts){var me=this;if(opts.css){$.each(opts.css,function(k,v){$(parent).css(k,v)});}
 if(opts.content.indexOf&&opts.content.indexOf('+')!=-1){$.map(opts.content.split('+'),function(v){me.render_column(data,parent,{content:v});});return;}
 if(typeof opts.content=='function'){opts.content(parent,data);}
@@ -2284,9 +2284,11 @@
  */
 wn.provide('erpnext.module_page');erpnext.module_page.setup_page=function(module,wrapper){erpnext.module_page.hide_links(wrapper);erpnext.module_page.make_list(module,wrapper);$(wrapper).find("a[title]").tooltip({delay:{show:500,hide:100}});}
 erpnext.module_page.hide_links=function(wrapper){$(wrapper).find('[href*="List/"]').each(function(){var href=$(this).attr('href');var dt=href.split('/')[1];if(wn.boot.profile.all_read.indexOf(get_label_doctype(dt))==-1){var txt=$(this).text();$(this).parent().css('color','#999').html(txt);}});$(wrapper).find('[data-doctype]').each(function(){var dt=$(this).attr('data-doctype');if(wn.boot.profile.all_read.indexOf(dt)==-1){var txt=$(this).text();$(this).parent().css('color','#999').html(txt);}});$(wrapper).find('[href*="Form/"]').each(function(){var href=$(this).attr('href');var dt=href.split('/')[1];if(wn.boot.profile.all_read.indexOf(get_label_doctype(dt))==-1){var txt=$(this).text();$(this).parent().css('color','#999').html(txt);}});}
-erpnext.module_page.make_list=function(module,wrapper){wrapper.list=new wn.ui.Listing({parent:$(wrapper).find('.reports-list').get(0),method:'utilities.get_report_list',render_row:function(row,data){if(!data.parent_doc_type)data.parent_doc_type=data.doc_type;$(row).html(repl('<a href="#!Report/%(doc_type)s/%(criteria_name)s" \
+erpnext.module_page.make_list=function(module,wrapper){var $w=$(wrapper).find('.reports-list');var $parent1=$('<div style="width: 45%; float: left; margin-right: 4.5%"></div>').appendTo($w);var $parent2=$('<div style="width: 45%; float: left;"></div>').appendTo($w);wrapper.list1=new wn.ui.Listing({parent:$parent1,method:'utilities.get_sc_list',render_row:function(row,data){if(!data.parent_doc_type)data.parent_doc_type=data.doc_type;$(row).html(repl('<a href="#!Report/%(doc_type)s/%(criteria_name)s" \
     data-doctype="%(parent_doc_type)s">\
-    %(criteria_name)s</a>',data))},args:{module:module},no_refresh:true,callback:function(r){erpnext.module_page.hide_links(wrapper)}});wrapper.list.run();}
+    %(criteria_name)s</a>',data))},args:{module:module},no_refresh:true,callback:function(r){erpnext.module_page.hide_links($parent1)}});wrapper.list1.run();wrapper.list2=new wn.ui.Listing({parent:$parent2,method:'utilities.get_report_list',render_row:function(row,data){$(row).html(repl('<a href="#!Report2/%(ref_doctype)s/%(name)s" \
+    data-doctype="%(ref_doctype)s">\
+    %(name)s</a>',data))},args:{module:module},no_refresh:true,callback:function(r){erpnext.module_page.hide_links($parent2)}});wrapper.list2.run();}
 /*
  *	erpnext/startup/js/toolbar.js
  */
diff --git a/update_erpnext.py b/update_erpnext.py
new file mode 100644
index 0000000..341fafd
--- /dev/null
+++ b/update_erpnext.py
@@ -0,0 +1,23 @@
+#!/usr/bin/python
+import commands
+
+cmd_list = [
+	'lib/wnf.py --pull origin master',
+	'lib/wnf.py -l',
+	'lib/wnf.py --sync_all'
+]
+err = 0
+for cmd in cmd_list:
+	stat, op = commands.getstatusoutput(cmd)
+	if stat != 0:
+		print "something went wrong"
+		print "cannot proceed with update"
+		print "status: %s" % stat
+		print "output: %s" % op
+		err = 1
+		break
+		
+if not err:
+	print "update_erpnext.py --> run success."
+else:
+	print "update_erpnext.py --> run failed."
\ No newline at end of file
