Merge branch 'develop' of github.com:frappe/erpnext into v4-hotfix
diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.js b/erpnext/setup/page/setup_wizard/setup_wizard.js
index 30de2c6..1ad3dd5 100644
--- a/erpnext/setup/page/setup_wizard/setup_wizard.js
+++ b/erpnext/setup/page/setup_wizard/setup_wizard.js
@@ -29,7 +29,7 @@
 					}, 2000);
 				},
 				error: function(r) {
-					
+
 					var d = msgprint(__("There were errors."));
 					d.custom_onhide = function() {
 						frappe.set_route(erpnext.wiz.page_name, "0");
@@ -223,8 +223,13 @@
 				title: __("Logo and Letter Heads"),
 				help: __('Upload your letter head and logo - you can edit them later.'),
 				fields: [
-					{fieldtype:"Attach Image", fieldname:"attach_letterhead", label: __("Attach Letterhead")},
-					{fieldtype:"Attach Image", fieldname:"attach_logo", label:__("Attach Logo")},
+					{fieldtype:"Attach Image", fieldname:"attach_letterhead",
+						label: __("Attach Letterhead"),
+						description: __("Keep it web friendly 900px (w) by 100px (h)")
+					},
+					{fieldtype:"Attach Image", fieldname:"attach_logo",
+						label:__("Attach Logo"),
+						description: __("100px by 100px")},
 				],
 			},
 
diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.py b/erpnext/setup/page/setup_wizard/setup_wizard.py
index aa96558..4b55f5b 100644
--- a/erpnext/setup/page/setup_wizard/setup_wizard.py
+++ b/erpnext/setup/page/setup_wizard/setup_wizard.py
@@ -15,66 +15,73 @@
 
 @frappe.whitelist()
 def setup_account(args=None):
-	frappe.clear_cache()
+	try:
+		frappe.clear_cache()
 
-	if frappe.db.sql("select name from tabCompany"):
-		frappe.throw(_("Setup Already Complete!!"))
+		if frappe.db.sql("select name from tabCompany"):
+			frappe.throw(_("Setup Already Complete!!"))
 
-	if not args:
-		args = frappe.local.form_dict
-	if isinstance(args, basestring):
-		args = json.loads(args)
-	args = frappe._dict(args)
+		if not args:
+			args = frappe.local.form_dict
+		if isinstance(args, basestring):
+			args = json.loads(args)
 
-	if args.language != "english":
-		set_default_language(args.language)
+		args = frappe._dict(args)
 
-	install_fixtures.install(args.get("country"))
+		if args.language != "english":
+			set_default_language(args.language)
 
-	update_user_name(args)
-	frappe.local.message_log = []
+		install_fixtures.install(args.get("country"))
 
-	create_fiscal_year_and_company(args)
-	frappe.local.message_log = []
+		update_user_name(args)
+		frappe.local.message_log = []
 
-	set_defaults(args)
-	frappe.local.message_log = []
+		create_fiscal_year_and_company(args)
+		frappe.local.message_log = []
 
-	create_territories()
-	frappe.local.message_log = []
+		set_defaults(args)
+		frappe.local.message_log = []
 
-	create_price_lists(args)
-	frappe.local.message_log = []
+		create_territories()
+		frappe.local.message_log = []
 
-	create_feed_and_todo()
-	frappe.local.message_log = []
+		create_price_lists(args)
+		frappe.local.message_log = []
 
-	create_email_digest()
-	frappe.local.message_log = []
+		create_feed_and_todo()
+		frappe.local.message_log = []
 
-	create_letter_head(args)
-	frappe.local.message_log = []
+		create_email_digest()
+		frappe.local.message_log = []
 
-	create_taxes(args)
-	frappe.local.message_log = []
+		create_letter_head(args)
+		frappe.local.message_log = []
 
-	create_items(args)
-	frappe.local.message_log = []
+		create_taxes(args)
+		frappe.local.message_log = []
 
-	create_customers(args)
-	frappe.local.message_log = []
+		create_items(args)
+		frappe.local.message_log = []
 
-	create_suppliers(args)
-	frappe.local.message_log = []
+		create_customers(args)
+		frappe.local.message_log = []
 
-	frappe.db.set_default('desktop:home_page', 'desktop')
+		create_suppliers(args)
+		frappe.local.message_log = []
 
-	website_maker(args.company_name, args.company_tagline, args.name)
-	create_logo(args)
+		frappe.db.set_default('desktop:home_page', 'desktop')
 
-	frappe.clear_cache()
-	frappe.db.commit()
+		website_maker(args.company_name, args.company_tagline, args.name)
+		create_logo(args)
 
+		frappe.clear_cache()
+		frappe.db.commit()
+	except:
+		traceback = frappe.get_traceback()
+		for hook in frappe.get_hooks("setup_wizard_exception"):
+			frappe.get_attr(hook)(traceback, args)
+
+		raise
 
 def update_user_name(args):
 	if args.get("email"):
diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json
index d7b3853..f42f35c 100644
--- a/erpnext/stock/doctype/item/item.json
+++ b/erpnext/stock/doctype/item/item.json
@@ -109,9 +109,9 @@
   }, 
   {
    "fieldname": "image", 
-   "fieldtype": "Select", 
+   "fieldtype": "Attach", 
    "label": "Image", 
-   "options": "attach_files:", 
+   "options": "", 
    "permlevel": 0, 
    "read_only": 0
   }, 
@@ -832,7 +832,7 @@
  "icon": "icon-tag", 
  "idx": 1, 
  "max_attachments": 1, 
- "modified": "2014-05-07 05:29:42.155019", 
+ "modified": "2014-05-12 07:54:58.118118", 
  "modified_by": "Administrator", 
  "module": "Stock", 
  "name": "Item",