diff --git a/erpnext/accounts/doctype/account/account.js b/erpnext/accounts/doctype/account/account.js
index 162eeaf..75cc9e5 100644
--- a/erpnext/accounts/doctype/account/account.js
+++ b/erpnext/accounts/doctype/account/account.js
@@ -30,12 +30,12 @@
 // Refresh
 // -----------------------------------------
 cur_frm.cscript.refresh = function(doc, cdt, cdn) {
+	cur_frm.toggle_fields('account_name', doc.__islocal);
+	
 	// hide fields if group
 	cur_frm.toggle_fields(['account_type', 'master_type', 'master_name', 'freeze_account', 
 		'credit_days', 'credit_limit', 'tax_rate'], doc.group_or_ledger=='Ledger')	
 
-	cur_frm.toggle_fields('account_name', doc.__islocal)
-
 	// read-only for root accounts
   	root_acc = ['Application of Funds (Assets)','Expenses','Income','Source of Funds (Liabilities)'];
 	if(in_list(root_acc, doc.account_name)) {
diff --git a/erpnext/accounts/doctype/cost_center/cost_center.js b/erpnext/accounts/doctype/cost_center/cost_center.js
index 9b66704..c131081 100644
--- a/erpnext/accounts/doctype/cost_center/cost_center.js
+++ b/erpnext/accounts/doctype/cost_center/cost_center.js
@@ -34,9 +34,9 @@
 }
 
 cur_frm.cscript.refresh = function(doc, cdt, cdn) {
-	cur_frm.toggle_fields('cost_center_name', doc.__islocal)
-
 	var intro_txt = '';
+	cur_frm.toggle_fields('cost_center_name', doc.__islocal);
+
 	if(!doc.__islocal && doc.group_or_ledger=='Group') {
 		intro_txt += '<p><b>Note:</b> This is Cost Center is a <i>Group</i>, \
 			Accounting Entries are not allowed against groups.</p>';
diff --git a/erpnext/accounts/doctype/fiscal_year/fiscal_year.js b/erpnext/accounts/doctype/fiscal_year/fiscal_year.js
index f263ee4..d60e4ec 100644
--- a/erpnext/accounts/doctype/fiscal_year/fiscal_year.js
+++ b/erpnext/accounts/doctype/fiscal_year/fiscal_year.js
@@ -1,4 +1,3 @@
 cur_frm.cscript.refresh = function(doc, dt, dn) {
-	cur_frm.toggle_fields('year', doc.__islocal);
 	cur_frm.enable_fields('year_start_date', doc.__islocal)
 }
diff --git a/erpnext/setup/doctype/price_list/price_list.js b/erpnext/setup/doctype/price_list/price_list.js
index a222a65..11993f8 100644
--- a/erpnext/setup/doctype/price_list/price_list.js
+++ b/erpnext/setup/doctype/price_list/price_list.js
@@ -14,24 +14,34 @@
 // You should have received a copy of the GNU General Public License
 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-
-//--------- ONLOAD -------------
-cur_frm.cscript.onload = function(doc, cdt, cdn) {
-}
-
 cur_frm.cscript.refresh = function(doc, cdt, cdn) {
 	if(doc.__islocal) {
-		set_field_options('price_help', ''); return;
+		cur_frm.set_intro("Save this list to begin.");
+		return;
 	}
 	if(!doc.file_list) {
-		set_field_options('price_help', '<div class="help_box">To upload a price list, please attach a (.csv) file with 3 columns - <b>Item Code, Price and Currency</b> (no headings necessary). See attachments box in the right column</div>')
-	} else {
-		set_field_options('price_help', '<div class="help_box">To update prices from the attachment, please click on "Update Prices"</div>')
-	}
-}
+		cur_frm.set_intro('<p>1. Click on "Download Template" \
+			to download the template of all Items.</p>'
+		+'<p>2. Update prices and Currency.</p>'
+		+'<p>3. Save it as a CSV (.csv) file.</p>'
+		+'<p>4. Upload the file.</p>');
+		
+		cur_frm.add_custom_button('Download Template', function() {
+			$c_obj_csv(cur_frm.get_doclist(), 'download_template');
+		}, 'icon-download')
+		
+		cur_frm.add_custom_button('Upload Price List', function() {
+			cur_frm.attachments.add_attachment();
+		}, 'icon-upload')
+		
 
-cur_frm.cscript.clear_prices = function(doc, cdt, cdn) {
-	if(confirm("This action will clear all rates for '"+ doc.name +"' from the Item Master and cannot be un-done. Are you sure you want to continue?")) {
-		$c_obj(make_doclist(doc.doctype, doc.name), 'clear_prices', '', function(r, rt) { });
+	} else {
+		cur_frm.set_intro('To update prices from the attachment, click on "Update Prices". \
+			To reset prices, delete the attachment (in the sidebar) and upload again.');
+		
+		// Update Prices
+		cur_frm.add_custom_button('Update Prices', function() {
+			cur_frm.call_server('update_prices');
+		}, 'icon-refresh')		
 	}
 }
diff --git a/erpnext/setup/doctype/price_list/price_list.py b/erpnext/setup/doctype/price_list/price_list.py
index be59c65..69b87a5 100644
--- a/erpnext/setup/doctype/price_list/price_list.py
+++ b/erpnext/setup/doctype/price_list/price_list.py
@@ -14,23 +14,10 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# Please edit this list and import only required elements
 import webnotes
 
-from webnotes.utils import add_days, add_months, add_years, cint, cstr, date_diff, default_fields, flt, fmt_money, formatdate, generate_hash, getTraceback, get_defaults, get_first_day, get_last_day, getdate, has_common, month_name, now, nowdate, replace_newlines, sendmail, set_default, str_esc_quote, user_format, validate_email_add
-from webnotes.model import db_exists
-from webnotes.model.doc import Document, addchild, getchildren, make_autoname
-from webnotes.model.doclist import getlist, copy_doclist
-from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax
-from webnotes import session, form, is_testing, msgprint, errprint
-
-set = webnotes.conn.set
-sql = webnotes.conn.sql
-get_value = webnotes.conn.get_value
-in_transaction = webnotes.conn.in_transaction
-convert_to_lists = webnotes.conn.convert_to_lists
-	
-# -----------------------------------------------------------------------------------------
+from webnotes.model.doc import Document
+from webnotes import msgprint
 
 
 class DocType:
@@ -43,11 +30,25 @@
 		if currency in self.cl:
 			return 1
 			
-		if sql("select name from tabCurrency where name=%s", currency):
+		if webnotes.conn.sql("select name from tabCurrency where name=%s", currency):
 			self.cl.append(currency)
 			return 1
 		else:
 			return 0
+			
+	def download_template(self, arg=None):
+		"""download 3 column template with all Items"""
+		default_currency = webnotes.conn.get_default('currency')
+		item_list = webnotes.conn.sql("""select name from tabItem where 
+			ifnull(is_stock_item,'')='Yes' and (ifnull(is_sales_item,'')='Yes'
+				or ifnull(is_service_item,'')='Yes')""")
+		data = [self.get_price(i[0], default_currency) for i in item_list]
+		return [['Item', 'Rate', 'Currency']] + data
+	
+	def get_price(self, item, default_currency):
+		rate = webnotes.conn.sql("""select ref_rate, ref_currency from `tabItem Price` 
+			where parent=%s and price_list_name=%s""", (item, self.doc.name))
+		return [item, rate and rate[0][0] or 0, rate and rate[0][1] or default_currency]
 	
 	# update prices in Price List
 	def update_prices(self):
@@ -57,15 +58,15 @@
 		updated = 0
 		
 		for line in data:
-			if line and len(line)==3:
+			if line and len(line)==3 and line[0]!='Item':
 				# if item exists
-				if sql("select name from tabItem where name=%s", line[0]):
+				if webnotes.conn.sql("select name from tabItem where name=%s", line[0]):
 					if self.is_currency_valid(line[2]):
 						# if price exists
-						ref_ret_detail = sql("select name from `tabItem Price` where parent=%s and price_list_name=%s and ref_currency=%s", \
+						ref_ret_detail = webnotes.conn.sql("select name from `tabItem Price` where parent=%s and price_list_name=%s and ref_currency=%s", \
 							(line[0], self.doc.name, line[2]))
 						if ref_ret_detail:
-							sql("update `tabItem Price` set ref_rate=%s where name=%s", (line[1], ref_ret_detail[0][0]))
+							webnotes.conn.sql("update `tabItem Price` set ref_rate=%s where name=%s", (line[1], ref_ret_detail[0][0]))
 						else:
 							d = Document('Item Price')
 							d.parent = line[0]
@@ -80,17 +81,9 @@
 						msgprint("[Ignored] Unknown currency '%s' for Item '%s'" % (line[2], line[0]))
 				else:
 					msgprint("[Ignored] Did not find Item '%s'" % line[1])
-			else:
-				msgprint("[Ignored] Incorrect format: %s" % str(line))
 		
 		msgprint("<b>%s</b> items updated" % updated)
 
-	# clear prices
-	def clear_prices(self):
-		cnt = sql("select count(*) from `tabItem Price` where price_list_name = %s", self.doc.name)
-		sql("delete from `tabItem Price` where price_list_name = %s", self.doc.name)
-		msgprint("%s prices cleared" % cnt[0][0])
-
 	# Update CSV data
 	def get_csv_data(self):
 		if not self.doc.file_list:
@@ -99,8 +92,12 @@
 
 		fid = self.doc.file_list.split(',')[1]
 		  
-		from webnotes.utils import file_manager
-		fn, content = file_manager.get_file(fid)
+		try:
+			from webnotes.utils import file_manager
+			fn, content = file_manager.get_file(fid)
+		except Exception, e:
+			webnotes.msgprint("Unable to open attached file. Please try again.")
+			raise e
 	
 		# NOTE: Don't know why this condition exists
 		if not isinstance(content, basestring) and hasattr(content, 'tostring'):
diff --git a/erpnext/setup/doctype/price_list/price_list.txt b/erpnext/setup/doctype/price_list/price_list.txt
index 2881cd7..4aa3b3b 100644
--- a/erpnext/setup/doctype/price_list/price_list.txt
+++ b/erpnext/setup/doctype/price_list/price_list.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2012-05-15 12:15:02',
+		'creation': '2012-07-03 13:30:55',
 		'docstatus': 0,
-		'modified': '2012-06-22 10:51:23',
+		'modified': '2012-07-11 17:06:32',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -14,6 +14,9 @@
 	{
 		'_last_update': u'1303100817',
 		'allow_attach': 1,
+		'allow_copy': 1,
+		'allow_email': 1,
+		'allow_print': 1,
 		'allow_trash': 1,
 		'autoname': u'field:price_list_name',
 		'colour': u'White:FFF',
@@ -34,7 +37,8 @@
 		'name': '__common__',
 		'parent': u'Price List',
 		'parentfield': u'fields',
-		'parenttype': u'DocType'
+		'parenttype': u'DocType',
+		'permlevel': 0
 	},
 
 	# These values are common for all DocPerm
@@ -108,71 +112,20 @@
 	# DocField
 	{
 		'doctype': u'DocField',
-		'fieldname': u'trash_reason',
-		'fieldtype': u'Small Text',
-		'label': u'Trash Reason',
-		'oldfieldname': u'trash_reason',
-		'oldfieldtype': u'Small Text',
-		'permlevel': 1
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
 		'fieldname': u'price_list_name',
 		'fieldtype': u'Data',
 		'label': u'Price List Name',
 		'oldfieldname': u'price_list_name',
 		'oldfieldtype': u'Data',
-		'permlevel': 0,
 		'reqd': 1
 	},
 
 	# DocField
 	{
-		'colour': u'White:FFF',
-		'depends_on': u'eval:!doc.__islocal',
-		'doctype': u'DocField',
-		'fieldname': u'price_help',
-		'fieldtype': u'HTML',
-		'label': u'Price Help',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'depends_on': u'eval:!doc.__islocal',
-		'description': u'Click on this button to clear prices for this list in all items',
-		'doctype': u'DocField',
-		'fieldname': u'clear_prices',
-		'fieldtype': u'Button',
-		'label': u'Clear Prices',
-		'permlevel': 0,
-		'trigger': u'Client'
-	},
-
-	# DocField
-	{
 		'doctype': u'DocField',
 		'fieldname': u'file_list',
 		'fieldtype': u'Text',
 		'hidden': 1,
-		'label': u'File List',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'depends_on': u'eval:!doc.__islocal',
-		'description': u'Update prices from the attachment',
-		'doctype': u'DocField',
-		'fieldname': u'update_prices',
-		'fieldtype': u'Button',
-		'label': u'Update Prices',
-		'options': u'update_prices',
-		'permlevel': 0,
-		'trigger': u'Server'
+		'label': u'File List'
 	}
 ]
\ No newline at end of file
diff --git a/public/js/all-app.js b/public/js/all-app.js
index e634cf3..8732fdd 100644
--- a/public/js/all-app.js
+++ b/public/js/all-app.js
@@ -397,8 +397,8 @@
 if(r.server_messages)msgprint(r.server_messages)
 if(r.exc){console.log(r.exc);};if(r['403']){wn.container.change_to('403');}
 if(r.docs){LocalDB.sync(r.docs);}}
-wn.request.call=function(opts){wn.request.prepare(opts);$.ajax({url:opts.url||wn.request.url,data:opts.args,type:opts.type||'POST',dataType:opts.dataType||'json',success:function(r,xhr){wn.request.cleanup(opts,r);opts.success(r,xhr.responseText);},error:function(xhr,textStatus){wn.request.cleanup(opts,{});show_alert('Unable to complete request: '+textStatus)
-if(opts.error)opts.error(xhr)}})}
+wn.request.call=function(opts){wn.request.prepare(opts);$.ajax({url:opts.url||wn.request.url,data:opts.args,type:opts.type||'POST',dataType:opts.dataType||'json',success:function(r,xhr){wn.request.cleanup(opts,r);opts.success&&opts.success(r,xhr.responseText);},error:function(xhr,textStatus){wn.request.cleanup(opts,{});show_alert('Unable to complete request: '+textStatus)
+opts.error&&opts.error(xhr)}})}
 wn.call=function(opts){var args=$.extend({},opts.args)
 if(opts.module&&opts.page){args.cmd=opts.module+'.page.'+opts.page+'.'+opts.page+'.'+opts.method}else if(opts.method){args.cmd=opts.method;}
 for(key in args){if(args[key]&&typeof args[key]!='string'){args[key]=JSON.stringify(args[key]);}}
@@ -1794,7 +1794,7 @@
 this.cleanup_refresh(this);}
 _f.Frm.prototype.cleanup_refresh=function(){var me=this;if(me.fields_dict['amended_from']){if(me.doc.amended_from){unhide_field('amended_from');unhide_field('amendment_date');}else{hide_field('amended_from');hide_field('amendment_date');}}
 if(me.fields_dict['trash_reason']){if(me.doc.trash_reason&&me.doc.docstatus==2){unhide_field('trash_reason');}else{hide_field('trash_reason');}}
-if(me.meta.autoname&&me.meta.autoname.substr(0,6)=='field:'&&!me.doc.__islocal){var fn=me.meta.autoname.substr(6);set_field_permlevel(fn,1);}}
+if(me.meta.autoname&&me.meta.autoname.substr(0,6)=='field:'&&!me.doc.__islocal){var fn=me.meta.autoname.substr(6);cur_frm.toggle_fields(fn,false);}}
 _f.Frm.prototype.refresh_dependency=function(){var me=this;var doc=locals[this.doctype][this.docname];var dep_dict={};var has_dep=false;for(fkey in me.fields){var f=me.fields[fkey];f.dependencies_clear=true;var guardian=f.df.depends_on;if(guardian){if(!dep_dict[guardian])
 dep_dict[guardian]=[];dep_dict[guardian][dep_dict[guardian].length]=f;has_dep=true;}}
 if(!has_dep)return;for(var i=me.fields.length-1;i>=0;i--){var f=me.fields[i];f.guardian_has_value=true;if(f.df.depends_on){var v=doc[f.df.depends_on];if(f.df.depends_on.substr(0,5)=='eval:'){f.guardian_has_value=eval(f.df.depends_on.substr(5));}else if(f.df.depends_on.substr(0,3)=='fn:'){f.guardian_has_value=me.runclientscript(f.df.depends_on.substr(3),me.doctype,me.docname);}else{if(v||(v==0&&!v.substr)){}else{f.guardian_has_value=false;}}
@@ -1858,6 +1858,7 @@
 _f.Frm.prototype.toggle_fields=function(fields,show){if(show){unhide_field(fields)}
 else{hide_field(fields)}}
 _f.Frm.prototype.enable_fields=function(fields,enable){if(typeof fields=='string')fields=[fields];$.each(fields,function(i,f){var field=cur_frm.fields_dict[f];if(field){field.disabled=enable?false:true;field.refresh&&field.refresh();};})}
+_f.Frm.prototype.call_server=function(method,args,callback){$c_obj(cur_frm.get_doclist(),method,args,callback);}
 /*
  *	lib/js/legacy/widgets/form/form_fields.js
  */
diff --git a/public/js/all-web.js b/public/js/all-web.js
index 2e7f1ce..ec171ad 100644
--- a/public/js/all-web.js
+++ b/public/js/all-web.js
@@ -284,8 +284,8 @@
 if(r.server_messages)msgprint(r.server_messages)
 if(r.exc){console.log(r.exc);};if(r['403']){wn.container.change_to('403');}
 if(r.docs){LocalDB.sync(r.docs);}}
-wn.request.call=function(opts){wn.request.prepare(opts);$.ajax({url:opts.url||wn.request.url,data:opts.args,type:opts.type||'POST',dataType:opts.dataType||'json',success:function(r,xhr){wn.request.cleanup(opts,r);opts.success(r,xhr.responseText);},error:function(xhr,textStatus){wn.request.cleanup(opts,{});show_alert('Unable to complete request: '+textStatus)
-if(opts.error)opts.error(xhr)}})}
+wn.request.call=function(opts){wn.request.prepare(opts);$.ajax({url:opts.url||wn.request.url,data:opts.args,type:opts.type||'POST',dataType:opts.dataType||'json',success:function(r,xhr){wn.request.cleanup(opts,r);opts.success&&opts.success(r,xhr.responseText);},error:function(xhr,textStatus){wn.request.cleanup(opts,{});show_alert('Unable to complete request: '+textStatus)
+opts.error&&opts.error(xhr)}})}
 wn.call=function(opts){var args=$.extend({},opts.args)
 if(opts.module&&opts.page){args.cmd=opts.module+'.page.'+opts.page+'.'+opts.page+'.'+opts.method}else if(opts.method){args.cmd=opts.method;}
 for(key in args){if(args[key]&&typeof args[key]!='string'){args[key]=JSON.stringify(args[key]);}}
