diff --git a/erpnext/schools/doctype/student_group/student_group.py b/erpnext/schools/doctype/student_group/student_group.py
index e861421..9cdf9c7 100644
--- a/erpnext/schools/doctype/student_group/student_group.py
+++ b/erpnext/schools/doctype/student_group/student_group.py
@@ -14,7 +14,7 @@
 		self.validate_strength()
 		if frappe.defaults.get_defaults().student_validation_setting: 
 			self.validate_students()
-		self.validate_roll_no()
+		self.validate_and_set_child_table_fields()
 		validate_duplicate_student(self.students)
 
 	def validate_mandatory_fields(self):
@@ -38,9 +38,16 @@
 			if not frappe.db.get_value("Student", d.student, "enabled") and d.active:
 				frappe.throw(_("{0} - {1} is inactive student".format(d.group_roll_number, d.student_name)))
 
-	def validate_roll_no(self):
+	def validate_and_set_child_table_fields(self):
+		roll_numbers = [d.group_roll_number for d in self.students if d.group_roll_number]
+		max_roll_no = max(roll_numbers) if roll_numbers else 0
 		roll_no_list = []
 		for d in self.students:
+			if not d.student_name:
+				d.student_name = frappe.db.get_value("Student", d.student, "title")
+			if not d.group_roll_number:
+				max_roll_no += 1
+				d.group_roll_number = max_roll_no
 			if d.group_roll_number in roll_no_list:
 				frappe.throw(_("Duplicate roll number for student {0}".format(d.student_name)))
 			else:
diff --git a/erpnext/schools/doctype/student_group/test_student_group.py b/erpnext/schools/doctype/student_group/test_student_group.py
index 6b599aa..18a6b14 100644
--- a/erpnext/schools/doctype/student_group/test_student_group.py
+++ b/erpnext/schools/doctype/student_group/test_student_group.py
@@ -5,8 +5,23 @@
 
 import frappe
 import unittest
-
-# test_records = frappe.get_test_records('Student Group')
+from frappe.utils.make_random import get_random
 
 class TestStudentGroup(unittest.TestCase):
-	pass
+	 def test_student_roll_no(self):
+	 	doc = frappe.get_doc({
+	 		"doctype": "Student Group",
+	 		"student_group_name": "_Test Student Group R",
+			"group_based_on": "Activity"
+	 		}).insert()
+
+	 	student_list = []
+	 	while len(student_list) < 3:
+	 		s = get_random("Student")
+	 		if s not in student_list:
+	 			student_list.append(s)
+
+	 	doc.extend("students", [{"student":d} for d in student_list])
+	 	doc.save()
+	 	self.assertEquals(max([d.group_roll_number for d in doc.students]), 3)
+
