diff --git a/.travis.yml b/.travis.yml
index 9cad59f..8f2febd 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -13,6 +13,7 @@
 
 install:
   - sudo apt-get purge -y mysql-common mysql-server mysql-client
+  - nvm install v7.10.0
   # - wget https://raw.githubusercontent.com/frappe/bench/master/install_scripts/setup_frappe.sh
   # - sudo bash setup_frappe.sh --skip-setup-bench --mysql-root-password travis --bench-branch develop
   - wget https://raw.githubusercontent.com/frappe/bench/master/playbooks/install.py
diff --git a/erpnext/__init__.py b/erpnext/__init__.py
index e6f65d0..915d97b 100644
--- a/erpnext/__init__.py
+++ b/erpnext/__init__.py
@@ -2,7 +2,7 @@
 from __future__ import unicode_literals
 import frappe
 
-__version__ = '8.0.42'
+__version__ = '8.0.43'
 
 
 def get_default_company(user=None):
diff --git a/erpnext/controllers/sales_and_purchase_return.py b/erpnext/controllers/sales_and_purchase_return.py
index d2f894a..45447d7 100644
--- a/erpnext/controllers/sales_and_purchase_return.py
+++ b/erpnext/controllers/sales_and_purchase_return.py
@@ -144,7 +144,8 @@
 	}))
 	item_dict = valid_items[ref_item_row.item_code]
 	item_dict["qty"] += ref_item_row.qty
-	item_dict["rate"] = ref_item_row.get("rate", 0)
+	if ref_item_row.get("rate", 0) > item_dict["rate"]:
+		item_dict["rate"] = ref_item_row.get("rate", 0)
 
 	if ref_item_row.parenttype in ['Purchase Invoice', 'Purchase Receipt']:
 		item_dict["received_qty"] += ref_item_row.received_qty
diff --git a/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.py b/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.py
index 60bb02c..59f56d7 100644
--- a/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.py
+++ b/erpnext/hr/report/employees_working_on_a_holiday/employees_working_on_a_holiday.py
@@ -25,11 +25,10 @@
 	]
 
 def get_employees(filters):
-	holiday_filter = {"holiday_date": (">=", filters.from_date),
-				"holiday_date": ("<=", filters.to_date)}
+	holiday_filter = [["holiday_date", ">=", filters.from_date], ["holiday_date", "<=", filters.to_date]]
 	if filters.holiday_list:
-		holiday_filter["parent"] = filters.holiday_list
-		
+		holiday_filter.append(["parent", "=", filters.holiday_list])
+
 	holidays = frappe.get_all("Holiday", fields=["holiday_date", "description"],
 				filters=holiday_filter)
 
diff --git a/erpnext/patches/v8_0/merge_student_batch_and_student_group.py b/erpnext/patches/v8_0/merge_student_batch_and_student_group.py
index 3eb8e80..7cfdf60 100644
--- a/erpnext/patches/v8_0/merge_student_batch_and_student_group.py
+++ b/erpnext/patches/v8_0/merge_student_batch_and_student_group.py
@@ -8,9 +8,9 @@
 
 
 def execute():
-
 	# for converting student batch into student group
-	frappe.reload_doctype("Student Group")
+	for doctype in ["Student Group", "Student Group Student", "Student Group Instructor", "Student Attendance"]:
+		frappe.reload_doc("schools", "doctype", doctype)
 
 	if frappe.db.table_exists("Student Batch"):
 		student_batches = frappe.db.sql('''select name as student_group_name, student_batch_name as batch,
@@ -32,7 +32,7 @@
 			else:
 				cond = " "
 			student_list = frappe.db.sql('''select student, student_name {cond} from `tabStudent Batch Student`
-				where parent=%s'''.format(cond=cond), (doc.name), as_dict=1)
+				where parent=%s'''.format(cond=cond), (doc.student_group_name), as_dict=1)
 
 			if student_list:
 				for i, student in enumerate(student_list):
@@ -40,7 +40,7 @@
 				doc.extend("students", student_list)
 
 			instructor_list = frappe.db.sql('''select instructor, instructor_name from `tabStudent Batch Instructor`
-				where parent=%s''', (doc.name), as_dict=1)
+				where parent=%s''', (doc.student_group_name), as_dict=1)
 			if instructor_list:
 				doc.extend("instructors", instructor_list)
 			doc.save()
@@ -62,8 +62,6 @@
 		frappe.delete_doc("DocType", "Attendance Tool Student", force=1)
 
 	# change the student batch to student group in the student attendance
-	frappe.reload_doctype("Student Attendance")
-
 	table_columns = frappe.db.get_table_columns("Student Attendance")
 	if "student_batch" in table_columns:
 		rename_field("Student Attendance", "student_batch", "student_group")
diff --git a/erpnext/patches/v8_0/update_student_groups_from_student_batches.py b/erpnext/patches/v8_0/update_student_groups_from_student_batches.py
new file mode 100644
index 0000000..ae24fe4
--- /dev/null
+++ b/erpnext/patches/v8_0/update_student_groups_from_student_batches.py
@@ -0,0 +1,38 @@
+# Copyright (c) 2017, Frappe and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe.model.utils.rename_field import *
+from frappe.model.mapper import get_mapped_doc
+
+
+def execute():
+	if frappe.db.table_exists("Student Batch"):
+		student_batches = frappe.db.sql('''select name from `tabStudent Batch`''', as_dict=1)
+
+		for student_batch in student_batches:
+			if frappe.db.exists("Student Group", student_batch.get("name")):
+				student_group = frappe.get_doc("Student Group", student_batch.get("name"))
+
+				if frappe.db.table_exists("Student Batch Student"):
+					current_student_list = frappe.db.sql_list('''select student from `tabStudent Group Student`
+						where parent=%s''', (student_group.name))
+					batch_student_list = frappe.db.sql_list('''select student from `tabStudent Batch Student`
+						where parent=%s''', (student_group.name))
+
+					student_list = list(set(batch_student_list)-set(current_student_list))
+					if student_list:
+						student_group.extend("students", [{"student":d} for d in student_list])
+
+				if frappe.db.table_exists("Student Batch Instructor"):
+					current_instructor_list = frappe.db.sql_list('''select instructor from `tabStudent Group Instructor`
+						where parent=%s''', (student_group.name))
+					batch_instructor_list = frappe.db.sql_list('''select instructor from `tabStudent Batch Instructor`
+						where parent=%s''', (student_group.name))
+
+					instructor_list = list(set(batch_instructor_list)-set(current_instructor_list))
+					if instructor_list:
+						student_group.extend("instructors", [{"instructor":d} for d in instructor_list])
+
+				student_group.save()
diff --git a/erpnext/stock/doctype/material_request/material_request_list.js b/erpnext/stock/doctype/material_request/material_request_list.js
index b6ceeac..6611a20 100644
--- a/erpnext/stock/doctype/material_request/material_request_list.js
+++ b/erpnext/stock/doctype/material_request/material_request_list.js
@@ -6,7 +6,7 @@
 		} else if(doc.docstatus==1 && flt(doc.per_ordered, 2) == 0) {
 			return [__("Pending"), "orange", "per_ordered,=,0"];
 		}  else if(doc.docstatus==1 && flt(doc.per_ordered, 2) < 100) {
-			return [__("Partially ordred"), "yellow", "per_ordered,<,100"];
+			return [__("Partially ordered"), "yellow", "per_ordered,<,100"];
 		} else if(doc.docstatus==1 && flt(doc.per_ordered, 2) == 100) {
 			if (doc.material_request_type == "Purchase") {
 				return [__("Ordered"), "green", "per_ordered,=,100"];
