started client side testing using selenium and other related and unrelated fixes
diff --git a/.travis.yml b/.travis.yml
index fd26535..1e78ceb 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -19,12 +19,12 @@
 
 script:
     cd ./test_sites/ &&
-    frappe --reinstall test_site &&
-    frappe --install_app erpnext test_site --verbose &&
-    frappe --request '?cmd=erpnext.setup.page.setup_wizard.setup_wizard.setup_account&currency=USD&first_name=Test&last_name=User&company_name=Wind+Power+LLC&timezone=America/New_York&company_abbr=WP&industry=Manufacturing&country=United States&fy_start_date=2014-01-01&fy_end_date=2014-12-31&language=english&company_tagline=Testing&email=test@erpnext.com&password=test' test_site &&
-    frappe --verbose --run_tests test_site --app erpnext
+	frappe --use test_site &&
+    frappe --reinstall &&
+    frappe --install_app erpnext --verbose &&
+    frappe --verbose --run_tests --app erpnext
 
 before_script:
-  - mysql -e 'create database travis' &&
-  - echo "USE mysql;\nUPDATE user SET password=PASSWORD('travis') WHERE user='travis';\nFLUSH PRIVILEGES;\n" | mysql -u root
+  - mysql -e 'create database test_site' &&
+  - echo "USE mysql;\nUPDATE user SET password=PASSWORD('test_site') WHERE user='test_site';\nFLUSH PRIVILEGES;\n" | mysql -u root
 
diff --git a/erpnext/accounts/doctype/account/account.py b/erpnext/accounts/doctype/account/account.py
index e72c27e..3c73d1f 100644
--- a/erpnext/accounts/doctype/account/account.py
+++ b/erpnext/accounts/doctype/account/account.py
@@ -33,7 +33,6 @@
 	def validate(self):
 		self.validate_master_name()
 		self.validate_parent()
-		self.validate_duplicate_account()
 		self.validate_root_details()
 		self.validate_mandatory()
 		self.validate_warehouse_account()
@@ -61,12 +60,6 @@
 			if par["report_type"]:
 				self.report_type = par["report_type"]
 
-	def validate_duplicate_account(self):
-		if self.get('__islocal') or not self.name:
-			company_abbr = frappe.db.get_value("Company", self.company, "abbr")
-			if frappe.db.exists("Account", (self.account_name + " - " + company_abbr)):
-				throw(_("Account {0} already exists").format(self.account_name))
-
 	def validate_root_details(self):
 		#does not exists parent
 		if frappe.db.exists("Account", self.name):
diff --git a/erpnext/accounts/doctype/cost_center/cost_center.py b/erpnext/accounts/doctype/cost_center/cost_center.py
index b20cbe9..0cc9918 100644
--- a/erpnext/accounts/doctype/cost_center/cost_center.py
+++ b/erpnext/accounts/doctype/cost_center/cost_center.py
@@ -61,15 +61,6 @@
 				check_acc_list.append([d.account, d.fiscal_year])
 
 	def validate(self):
-		"""
-			Cost Center name must be unique
-		"""
-		if ((self.get("__islocal") or not self.name) and
-			frappe.db.sql("select name from `tabCost Center` where cost_center_name=%s and company=%s",
-				(self.cost_center_name, self.company))
-			):
-			msgprint(_("Cost Center Name already exists"), raise_exception=1)
-
 		self.validate_mandatory()
 		self.validate_budget_details()
 
diff --git a/erpnext/accounts/doctype/pos_setting/test_records.json b/erpnext/accounts/doctype/pos_setting/test_records.json
index f507162..0d382a7 100644
--- a/erpnext/accounts/doctype/pos_setting/test_records.json
+++ b/erpnext/accounts/doctype/pos_setting/test_records.json
@@ -1,16 +1,16 @@
 [
  {
-  "cash_bank_account": "_Test Account Bank Account - _TC", 
-  "company": "_Test Company", 
-  "cost_center": "_Test Cost Center - _TC", 
-  "currency": "INR", 
-  "doctype": "POS Setting", 
-  "expense_account": "_Test Account Cost for Goods Sold - _TC", 
-  "income_account": "Sales - _TC", 
-  "name": "_Test POS Setting", 
-  "naming_series": "_T-Sales Invoice-", 
-  "selling_price_list": "_Test Price List", 
-  "territory": "_Test Territory", 
+  "cash_bank_account": "_Test Account Bank Account - _TC",
+  "company": "_Test Company",
+  "cost_center": "_Test Cost Center - _TC",
+  "currency": "INR",
+  "doctype": "POS Setting",
+  "expense_account": "_Test Account Cost for Goods Sold - _TC",
+  "income_account": "Sales - _TC",
+  "name": "_Test POS Setting",
+  "naming_series": "_T-POS Setting-",
+  "selling_price_list": "_Test Price List",
+  "territory": "_Test Territory",
   "warehouse": "_Test Warehouse - _TC"
  }
-]
\ No newline at end of file
+]
diff --git a/erpnext/hooks.txt b/erpnext/hooks.txt
index d84b369..b4e6b8e 100644
--- a/erpnext/hooks.txt
+++ b/erpnext/hooks.txt
@@ -21,6 +21,7 @@
 mail_footer = erpnext.startup.mail_footer
 
 on_session_creation = erpnext.startup.event_handlers.on_session_creation
+before_tests = erpnext.setup.utils.before_tests
 
 # Bean Events
 # -------------------------
diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.js b/erpnext/hr/doctype/leave_allocation/leave_allocation.js
index 1e376da..577fcf4 100755
--- a/erpnext/hr/doctype/leave_allocation/leave_allocation.js
+++ b/erpnext/hr/doctype/leave_allocation/leave_allocation.js
@@ -1,62 +1,37 @@
 // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-// ****************************************** onload ********************************************************
 cur_frm.cscript.onload = function(doc, dt, dn) {
   if(!doc.posting_date) set_multiple(dt,dn,{posting_date:get_today()});
 }
 
 
-// ************************************** client triggers ***************************************************
-// ---------
-// employee
-// ---------
 cur_frm.add_fetch('employee','employee_name','employee_name');
 
 cur_frm.cscript.employee = function(doc, dt, dn) {
   calculate_total_leaves_allocated(doc, dt, dn);
 }
 
-// -----------
-// leave type
-// -----------
 cur_frm.cscript.leave_type = function(doc, dt, dn) {
   calculate_total_leaves_allocated(doc, dt, dn);
 }
 
-// ------------
-// fiscal year
-// ------------
 cur_frm.cscript.fiscal_year = function(doc, dt, dn) {
   calculate_total_leaves_allocated(doc, dt, dn);
 }
 
-// -------------------------------
-// include previous leave balance
-// -------------------------------
 cur_frm.cscript.carry_forward = function(doc, dt, dn) {
   calculate_total_leaves_allocated(doc, dt, dn);
 }
 
-// -----------------------
-// previous balance leaves
-// -----------------------
 cur_frm.cscript.carry_forwarded_leaves = function(doc, dt, dn) {
   set_multiple(dt,dn,{total_leaves_allocated : flt(doc.carry_forwarded_leaves)+flt(doc.new_leaves_allocated)});
 }
 
-// ---------------------
-// new leaves allocated
-// ---------------------
 cur_frm.cscript.new_leaves_allocated = function(doc, dt, dn) {
   set_multiple(dt,dn,{total_leaves_allocated : flt(doc.carry_forwarded_leaves)+flt(doc.new_leaves_allocated)});
 }
 
-
-// ****************************************** utilities ******************************************************
-// ---------------------------------
-// calculate total leaves allocated
-// ---------------------------------
 calculate_total_leaves_allocated = function(doc, dt, dn) {
   if(cint(doc.carry_forward) == 1 && doc.leave_type && doc.fiscal_year && doc.employee){
     return get_server_fields('get_carry_forwarded_leaves','','', doc, dt, dn, 1);
@@ -69,5 +44,5 @@
 cur_frm.fields_dict.employee.get_query = function(doc,cdt,cdn) {
   return{
     query: "erpnext.controllers.queries.employee_query"
-  } 
-}
\ No newline at end of file
+  }
+}
diff --git a/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py b/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py
new file mode 100644
index 0000000..2c73323
--- /dev/null
+++ b/erpnext/hr/doctype/leave_allocation/test_leave_allocation.py
@@ -0,0 +1,3 @@
+import frappe
+
+test_records = frappe.get_test_records('Leave Allocation')
diff --git a/erpnext/hr/doctype/leave_allocation/test_records.json b/erpnext/hr/doctype/leave_allocation/test_records.json
new file mode 100644
index 0000000..036dc49
--- /dev/null
+++ b/erpnext/hr/doctype/leave_allocation/test_records.json
@@ -0,0 +1,18 @@
+[
+ {
+  "docstatus": 1,
+  "doctype": "Leave Allocation",
+  "employee": "_T-Employee-0001",
+  "fiscal_year": "_Test Fiscal Year 2013",
+  "leave_type": "_Test Leave Type",
+  "new_leaves_allocated": 15
+ },
+ {
+  "docstatus": 1,
+  "doctype": "Leave Allocation",
+  "employee": "_T-Employee-0002",
+  "fiscal_year": "_Test Fiscal Year 2013",
+  "leave_type": "_Test Leave Type",
+  "new_leaves_allocated": 15
+ }
+]
diff --git a/erpnext/hr/doctype/leave_application/test_leave_application.py b/erpnext/hr/doctype/leave_application/test_leave_application.py
index 89c9833..91fd583 100644
--- a/erpnext/hr/doctype/leave_application/test_leave_application.py
+++ b/erpnext/hr/doctype/leave_application/test_leave_application.py
@@ -6,20 +6,56 @@
 
 from erpnext.hr.doctype.leave_application.leave_application import LeaveDayBlockedError, OverlapError
 
+test_dependencies = ["Leave Allocation", "Leave Block List"]
+
+_test_records = [
+ {
+  "company": "_Test Company",
+  "doctype": "Leave Application",
+  "employee": "_T-Employee-0001",
+  "fiscal_year": "_Test Fiscal Year 2013",
+  "from_date": "2013-05-01",
+  "leave_type": "_Test Leave Type",
+  "posting_date": "2013-01-02",
+  "to_date": "2013-05-05"
+ },
+ {
+  "company": "_Test Company",
+  "doctype": "Leave Application",
+  "employee": "_T-Employee-0002",
+  "fiscal_year": "_Test Fiscal Year 2013",
+  "from_date": "2013-05-01",
+  "leave_type": "_Test Leave Type",
+  "posting_date": "2013-01-02",
+  "to_date": "2013-05-05"
+ },
+ {
+  "company": "_Test Company",
+  "doctype": "Leave Application",
+  "employee": "_T-Employee-0001",
+  "fiscal_year": "_Test Fiscal Year 2013",
+  "from_date": "2013-01-15",
+  "leave_type": "_Test Leave Type LWP",
+  "posting_date": "2013-01-02",
+  "to_date": "2013-01-15"
+ }
+]
+
+
 class TestLeaveApplication(unittest.TestCase):
 	def tearDown(self):
 		frappe.set_user("Administrator")
-		
+
 		# so that this test doesn't affect other tests
 		frappe.db.sql("""delete from `tabEmployee Leave Approver`""")
-		
+
 	def _clear_roles(self):
-		frappe.db.sql("""delete from `tabUserRole` where parent in 
+		frappe.db.sql("""delete from `tabUserRole` where parent in
 			("test@example.com", "test1@example.com", "test2@example.com")""")
-			
+
 	def _clear_applications(self):
 		frappe.db.sql("""delete from `tabLeave Application`""")
-		
+
 	def _add_employee_leave_approver(self, employee, leave_approver):
 		temp_session_user = frappe.session.user
 		frappe.set_user("Administrator")
@@ -30,7 +66,7 @@
 		})
 		employee.save()
 		frappe.set_user(temp_session_user)
-	
+
 	def get_application(self, doc):
 		application = frappe.copy_doc(doc)
 		application.from_date = "2013-01-01"
@@ -39,144 +75,145 @@
 
 	def test_block_list(self):
 		self._clear_roles()
-		
+
 		from frappe.utils.user import add_role
 		add_role("test1@example.com", "HR User")
-			
-		frappe.db.set_value("Department", "_Test Department", 
+
+		frappe.db.set_value("Department", "_Test Department",
 			"leave_block_list", "_Test Leave Block List")
-		
-		application = self.get_application(test_records[1])
+
+		application = self.get_application(_test_records[0])
 		application.insert()
 		application.status = "Approved"
 		self.assertRaises(LeaveDayBlockedError, application.submit)
-		
+
 		frappe.set_user("test1@example.com")
 
 		# clear other applications
 		frappe.db.sql("delete from `tabLeave Application`")
-		
-		application = self.get_application(test_records[1])
+
+		application = self.get_application(_test_records[0])
 		self.assertTrue(application.insert())
-		
+
 	def test_overlap(self):
 		self._clear_roles()
 		self._clear_applications()
-		
+
 		from frappe.utils.user import add_role
 		add_role("test@example.com", "Employee")
 		add_role("test2@example.com", "Leave Approver")
-		
+
 		frappe.set_user("test@example.com")
-		application = self.get_application(test_records[1])
+		application = self.get_application(_test_records[0])
 		application.leave_approver = "test2@example.com"
 		application.insert()
-		
-		application = self.get_application(test_records[1])
+
+		application = self.get_application(_test_records[0])
 		application.leave_approver = "test2@example.com"
 		self.assertRaises(OverlapError, application.insert)
-		
+
 	def test_global_block_list(self):
 		self._clear_roles()
 
 		from frappe.utils.user import add_role
 		add_role("test1@example.com", "Employee")
 		add_role("test@example.com", "Leave Approver")
-				
-		application = self.get_application(test_records[3])
+		add_role("test@example.com", "HR Manager")
+
+		application = self.get_application(_test_records[1])
 		application.leave_approver = "test@example.com"
-		
-		frappe.db.set_value("Leave Block List", "_Test Leave Block List", 
+
+		frappe.db.set_value("Leave Block List", "_Test Leave Block List",
 			"applies_to_all_departments", 1)
-		frappe.db.set_value("Employee", "_T-Employee-0002", "department", 
+		frappe.db.set_value("Employee", "_T-Employee-0002", "department",
 			"_Test Department")
-		
+
 		frappe.set_user("test1@example.com")
 		application.insert()
-		
+
 		frappe.set_user("test@example.com")
 		application.status = "Approved"
 		self.assertRaises(LeaveDayBlockedError, application.submit)
-		
-		frappe.db.set_value("Leave Block List", "_Test Leave Block List", 
+
+		frappe.db.set_value("Leave Block List", "_Test Leave Block List",
 			"applies_to_all_departments", 0)
-		
+
 	def test_leave_approval(self):
 		self._clear_roles()
-		
+
 		from frappe.utils.user import add_role
 		add_role("test@example.com", "Employee")
 		add_role("test1@example.com", "Leave Approver")
 		add_role("test2@example.com", "Leave Approver")
-		
+
 		self._test_leave_approval_basic_case()
 		self._test_leave_approval_invalid_leave_approver_insert()
 		self._test_leave_approval_invalid_leave_approver_submit()
 		self._test_leave_approval_valid_leave_approver_insert()
-		
+
 	def _test_leave_approval_basic_case(self):
 		self._clear_applications()
-		
+
 		# create leave application as Employee
 		frappe.set_user("test@example.com")
-		application = self.get_application(test_records[1])
+		application = self.get_application(_test_records[0])
 		application.leave_approver = "test1@example.com"
 		application.insert()
-		
+
 		# submit leave application by Leave Approver
 		frappe.set_user("test1@example.com")
 		application.status = "Approved"
 		application.submit()
 		self.assertEqual(frappe.db.get_value("Leave Application", application.name,
 			"docstatus"), 1)
-		
+
 	def _test_leave_approval_invalid_leave_approver_insert(self):
 		from erpnext.hr.doctype.leave_application.leave_application import InvalidLeaveApproverError
-		
+
 		self._clear_applications()
-		
+
 		# add a different leave approver in the employee's list
 		# should raise exception if not a valid leave approver
 		self._add_employee_leave_approver("_T-Employee-0001", "test2@example.com")
-		
+
 		# TODO - add test2@example.com leave approver in employee's leave approvers list
-		application = self.get_application(test_records[1])
+		application = self.get_application(_test_records[0])
 		frappe.set_user("test@example.com")
-		
+
 		application.leave_approver = "test1@example.com"
 		self.assertRaises(InvalidLeaveApproverError, application.insert)
-		
+
 		frappe.db.sql("""delete from `tabEmployee Leave Approver` where parent=%s""",
 			"_T-Employee-0001")
-		
+
 	def _test_leave_approval_invalid_leave_approver_submit(self):
 		self._clear_applications()
 		self._add_employee_leave_approver("_T-Employee-0001", "test2@example.com")
-		
+
 		# create leave application as employee
 		# but submit as invalid leave approver - should raise exception
 		frappe.set_user("test@example.com")
-		application = self.get_application(test_records[1])
+		application = self.get_application(_test_records[0])
 		application.leave_approver = "test2@example.com"
 		application.insert()
 		frappe.set_user("test1@example.com")
 		application.status = "Approved"
-		
+
 		from erpnext.hr.doctype.leave_application.leave_application import LeaveApproverIdentityError
 		self.assertRaises(LeaveApproverIdentityError, application.submit)
 
 		frappe.db.sql("""delete from `tabEmployee Leave Approver` where parent=%s""",
 			"_T-Employee-0001")
-			
+
 	def _test_leave_approval_valid_leave_approver_insert(self):
 		self._clear_applications()
 		self._add_employee_leave_approver("_T-Employee-0001", "test2@example.com")
-		
+
 		original_department = frappe.db.get_value("Employee", "_T-Employee-0001", "department")
 		frappe.db.set_value("Employee", "_T-Employee-0001", "department", None)
-		
+
 		frappe.set_user("test@example.com")
-		application = self.get_application(test_records[1])
+		application = self.get_application(_test_records[0])
 		application.leave_approver = "test2@example.com"
 		application.insert()
 
@@ -186,12 +223,8 @@
 		application.submit()
 		self.assertEqual(frappe.db.get_value("Leave Application", application.name,
 			"docstatus"), 1)
-			
+
 		frappe.db.sql("""delete from `tabEmployee Leave Approver` where parent=%s""",
 			"_T-Employee-0001")
-		
-		frappe.db.set_value("Employee", "_T-Employee-0001", "department", original_department)
-		
-test_dependencies = ["Leave Block List"]		
 
-test_records = frappe.get_test_records('Leave Application')
\ No newline at end of file
+		frappe.db.set_value("Employee", "_T-Employee-0001", "department", original_department)
diff --git a/erpnext/hr/doctype/leave_application/test_records.json b/erpnext/hr/doctype/leave_application/test_records.json
deleted file mode 100644
index aac41fb..0000000
--- a/erpnext/hr/doctype/leave_application/test_records.json
+++ /dev/null
@@ -1,48 +0,0 @@
-[
- {
-  "docstatus": 1, 
-  "doctype": "Leave Allocation", 
-  "employee": "_T-Employee-0001", 
-  "fiscal_year": "_Test Fiscal Year 2013", 
-  "leave_type": "_Test Leave Type", 
-  "new_leaves_allocated": 15
- }, 
- {
-  "company": "_Test Company", 
-  "doctype": "Leave Application", 
-  "employee": "_T-Employee-0001", 
-  "fiscal_year": "_Test Fiscal Year 2013", 
-  "from_date": "2013-05-01", 
-  "leave_type": "_Test Leave Type", 
-  "posting_date": "2013-01-02", 
-  "to_date": "2013-05-05"
- }, 
- {
-  "docstatus": 1, 
-  "doctype": "Leave Allocation", 
-  "employee": "_T-Employee-0002", 
-  "fiscal_year": "_Test Fiscal Year 2013", 
-  "leave_type": "_Test Leave Type", 
-  "new_leaves_allocated": 15
- }, 
- {
-  "company": "_Test Company", 
-  "doctype": "Leave Application", 
-  "employee": "_T-Employee-0002", 
-  "fiscal_year": "_Test Fiscal Year 2013", 
-  "from_date": "2013-05-01", 
-  "leave_type": "_Test Leave Type", 
-  "posting_date": "2013-01-02", 
-  "to_date": "2013-05-05"
- }, 
- {
-  "company": "_Test Company", 
-  "doctype": "Leave Application", 
-  "employee": "_T-Employee-0001", 
-  "fiscal_year": "_Test Fiscal Year 2013", 
-  "from_date": "2013-01-15", 
-  "leave_type": "_Test Leave Type LWP", 
-  "posting_date": "2013-01-02", 
-  "to_date": "2013-01-15"
- }
-]
\ No newline at end of file
diff --git a/erpnext/hr/doctype/salary_slip/test_salary_slip.py b/erpnext/hr/doctype/salary_slip/test_salary_slip.py
index e8c978e..28a9f3f 100644
--- a/erpnext/hr/doctype/salary_slip/test_salary_slip.py
+++ b/erpnext/hr/doctype/salary_slip/test_salary_slip.py
@@ -9,14 +9,14 @@
 		frappe.db.sql("""delete from `tabLeave Application`""")
 		frappe.db.sql("""delete from `tabSalary Slip`""")
 		from erpnext.hr.doctype.leave_application.test_leave_application import test_records as leave_applications
-		la = frappe.copy_doc(leave_applications[4])
+		la = frappe.copy_doc(leave_applications[2])
 		la.insert()
 		la.status = "Approved"
 		la.submit()
-		
+
 	def tearDown(self):
 		frappe.db.set_value("HR Settings", "HR Settings", "include_holidays_in_total_working_days", 0)
-		
+
 	def test_salary_slip_with_holidays_included(self):
 		frappe.db.set_value("HR Settings", "HR Settings", "include_holidays_in_total_working_days", 1)
 		ss = frappe.copy_doc(test_records[0])
@@ -29,7 +29,7 @@
 		self.assertEquals(ss.deduction_details[1].d_modified_amount, 48.39)
 		self.assertEquals(ss.gross_pay, 15016.13)
 		self.assertEquals(ss.net_pay, 14867.74)
-		
+
 	def test_salary_slip_with_holidays_excluded(self):
 		ss = frappe.copy_doc(test_records[0])
 		ss.insert()
@@ -44,4 +44,4 @@
 
 test_dependencies = ["Leave Application"]
 
-test_records = frappe.get_test_records('Salary Slip')
\ No newline at end of file
+test_records = frappe.get_test_records('Salary Slip')
diff --git a/erpnext/setup/utils.py b/erpnext/setup/utils.py
index efbc12f..a734ffd 100644
--- a/erpnext/setup/utils.py
+++ b/erpnext/setup/utils.py
@@ -3,8 +3,7 @@
 
 from __future__ import unicode_literals
 import frappe
-from frappe import _, msgprint, throw
-import json
+from frappe import _, throw
 
 def get_company_currency(company):
 	currency = frappe.db.get_value("Company", company, "default_currency")
@@ -38,3 +37,30 @@
 		throw(_("Price List {0} is disabled").format(price_list))
 	else:
 		return {"price_list_currency": price_list_currency}
+
+def before_tests():
+	# complete setup if missing
+	from erpnext.setup.page.setup_wizard.setup_wizard import setup_account
+	if not frappe.get_list("Item Group"):
+		setup_account({
+			"currency"			:"USD",
+			"first_name"		:"Test",
+			"last_name"			:"User",
+			"company_name"		:"Wind Power LLC",
+			"timezone"			:"America/New_York",
+			"company_abbr"		:"WP",
+			"industry"			:"Manufacturing",
+			"country"			:"United States",
+			"fy_start_date"		:"2014-01-01",
+			"fy_end_date"		:"2014-12-31",
+			"language"			:"english",
+			"company_tagline"	:"Testing",
+			"email"				:"test@erpnext.com",
+			"password"			:"test"
+		})
+
+	frappe.db.sql("delete from `tabLeave Allocation`")
+	frappe.db.sql("delete from `tabLeave Application`")
+	frappe.db.sql("delete from `tabSalary Slip`")
+	frappe.db.sql("delete from `tabItem Price`")
+	frappe.db.commit()
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index a894ac1..c4ca77f 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -27,6 +27,8 @@
 	def validate(self):
 		if not self.stock_uom:
 			msgprint(_("Please enter default Unit of Measure"), raise_exception=1)
+		if self.image and not self.website_image:
+			self.website_image = self.image
 
 		self.check_warehouse_is_set_for_stock_item()
 		self.check_stock_uom_with_bin()
@@ -131,6 +133,7 @@
 			bom = frappe.db.sql("""select name from `tabBOM` where item = %s
 				and is_active = 1""", (self.name,))
 			if bom and bom[0][0]:
+				print self.name
 				frappe.throw(_("""Allow Bill of Materials should be 'Yes'. Because one or many active BOMs present for this item"""))
 
 	def fill_customer_code(self):
diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
index 37886ce..183e3e5 100644
--- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py
@@ -190,6 +190,7 @@
 		})
 		stock_reco.insert()
 		stock_reco.submit()
+		frappe.db.commit()
 		return stock_reco
 
 	def insert_existing_sle(self, valuation_method):
diff --git a/erpnext/stock/doctype/warehouse/warehouse.py b/erpnext/stock/doctype/warehouse/warehouse.py
index 8cb920b..81e028e 100644
--- a/erpnext/stock/doctype/warehouse/warehouse.py
+++ b/erpnext/stock/doctype/warehouse/warehouse.py
@@ -56,7 +56,7 @@
 					ac_doc.ignore_permissions = True
 					ac_doc.insert()
 
-					msgprint(_("Account head {0} created"))
+					msgprint(_("Account head {0} created").format(ac_doc.name))
 
 	def validate_parent_account(self):
 		if not self.create_account_under:
diff --git a/erpnext/templates/includes/product_in_grid.html b/erpnext/templates/includes/product_in_grid.html
index 7edd0de..4c4be71 100644
--- a/erpnext/templates/includes/product_in_grid.html
+++ b/erpnext/templates/includes/product_in_grid.html
@@ -1,6 +1,6 @@
 <div class="col-sm-3">
 	<div style="height: 120px; overflow: hidden;">
-		<a href="{{ page_name }}">
+		<a href="{{ route or page_name }}">
 		{%- if website_image -%}
 		<img class="product-image" style="width: 80%; margin: auto;" src="{{ website_image }}">
 		{%- else -%}
diff --git a/erpnext/templates/includes/product_in_list.html b/erpnext/templates/includes/product_in_list.html
index 836781e..f5ae4dc 100644
--- a/erpnext/templates/includes/product_in_list.html
+++ b/erpnext/templates/includes/product_in_list.html
@@ -1,7 +1,7 @@
 <!-- TODO product listing -->
 <div class="container content">
 	<div style="height: 120px; overflow: hidden;">
-		<a href="{{ page_name }}">
+		<a href="{{ route or page_name }}">
 		{%- if website_image -%}
 		<img class="product-image" style="width: 80%; margin: auto;" src="{{ website_image }}">
 		{%- else -%}
@@ -10,6 +10,6 @@
 		</a>
 	</div>
 	<div style="height: 100px; overflow: hidden; font-size: 80%;">
-		<div><a href="{{ page_name }}">{{ item_name }}</a></div>
+		<div><a href="{{ route or page_name }}">{{ item_name }}</a></div>
 	</div>
 </div>
diff --git a/test_sites/test_site/site_config.json b/test_sites/test_site/site_config.json
index ef88f5e..05bf562 100644
--- a/test_sites/test_site/site_config.json
+++ b/test_sites/test_site/site_config.json
@@ -1,5 +1,5 @@
 {
- "db_name": "travis",
- "db_password": "travis",
+ "db_name": "test_frappe",
+ "db_password": "test_frappe",
  "mute_emails": 1
 }