diff --git a/erpnext/education/utils.py b/erpnext/education/utils.py
index 3abb840..a35cedc 100644
--- a/erpnext/education/utils.py
+++ b/erpnext/education/utils.py
@@ -249,14 +249,42 @@
 	course_enrollment = get_or_create_course_enrollment(course_name, program)
 	progress = student.get_topic_progress(course_enrollment.name, topic)
 	if not progress:
-		return {'label':'Open', 'indicator': 'blue'}
+		return None
 	count = sum([activity['is_complete'] for activity in progress])
 	if count == 0:
-		return {'label':'Open', 'indicator': 'blue'}
+		return {'completed': False, 'started': False}
 	elif count == len(progress):
-		return {'label':'Completed', 'indicator': 'green'}
+		return {'completed': True, 'started': True}
 	elif count < len(progress):
-		return {'label':'In Progress', 'indicator': 'orange'}
+		return {'completed': False, 'started': True}
+
+def get_student_course_details(course, program):
+	"""
+	Return the porgress of a course in a program as well as the content to continue from.
+		:param topic_name:
+		:param course_name:
+	"""
+	course_progress = []
+	for course_topic in course.topics:
+		topic = frappe.get_doc("Topic", course_topic.topic)
+		progress = get_student_topic_details(topic, course.name, program)
+		if progress:
+			course_progress.append(progress)
+
+	if course_progress:
+		number_of_completed_topics = sum([activity['completed'] for activity in course_progress])
+		total_topics = len(course_progress)
+		print("course_progress", course_progress)
+		print("number_of_completed_topics", number_of_completed_topics)
+		print("total_topics", total_topics)
+		if number_of_completed_topics == 0:
+			return {'completed': False, 'started': False}
+		if number_of_completed_topics == total_topics:
+			return {'completed': True, 'started': True}
+		if number_of_completed_topics < total_topics:
+			return {'completed': False, 'started': True}
+
+	return None
 
 def create_student_from_current_user():
 	user = frappe.get_doc("User", frappe.session.user)
diff --git a/erpnext/www/lms/course.html b/erpnext/www/lms/course.html
index 199fc16..34158c8 100644
--- a/erpnext/www/lms/course.html
+++ b/erpnext/www/lms/course.html
@@ -67,7 +67,13 @@
 			</div>
 		{% if has_access %}
 			<div class='card-footer'>
-				<span class="indicator {{ progress[topic.name].indicator }}"> {{ progress[topic.name].label }} </span>
+				{% if progress[topic.name].completed %}
+					<span class="indicator green">Completed</span>
+				{% elif progress[topic.name].started %}
+					<span class="indicator orange">In Progress</span>
+				{% else %}
+					<span class="indicator blue">Open</span>
+				{% endif %}
 			</div>
 			</a>
 		{% else %}
diff --git a/erpnext/www/lms/program.html b/erpnext/www/lms/program.html
index d364e5e..0ea2dbb 100644
--- a/erpnext/www/lms/program.html
+++ b/erpnext/www/lms/program.html
@@ -34,21 +34,32 @@
 
 {% macro card(course, index, length) %}
 <div class="col-sm-{{ 12 if length%3 == 1 and index == 1 else 6 if length%3 == 2 and index in [1,2] else 4}} mb-4 text-left">
+	<a href="/lms/course?name={{ course.name }}&program={{ program.name }}" class="no-decoration no-underline">
 	<div class="card h-100">
-		<a href="/lms/course?name={{ course.name }}&program={{ program.name }}" class="no-decoration no-underline">
-			{% if course.hero_image %}
-			<div class="card-hero-img" style="background-image: url({{ course.hero_image }})"></div>
+		{% if course.hero_image %}
+		<div class="card-hero-img" style="background-image: url({{ course.hero_image }})"></div>
+		{% else %}
+		<div class="card-image-wrapper text-center">
+			<div class="image-body"><i class="fa fa-picture-o" aria-hidden="true"></i></div>
+		</div>
+		{% endif %}
+		<div class='card-body'>
+			<h5 class='card-title'>{{ course.course_name }}</h5>
+			<div>{{ course.course_intro }}</div>
+		</div>
+		{% if has_access and progress[course.name] %}
+		<div class='card-footer'>
+			{% if progress[course.name].completed %}
+			<span class="indicator green">Completed</span>
+			{% elif progress[course.name].started %}
+			<span class="indicator orange">In Progress</span>
 			{% else %}
-			<div class="card-image-wrapper text-center">
-				<div class="image-body"><i class="fa fa-picture-o" aria-hidden="true"></i></div>
-			</div>
+			<span class="indicator blue">Open</span>
 			{% endif %}
-			<div class='card-body'>
-				<h5 class='card-title'>{{ course.course_name }}</h5>
-				<div>{{ course.course_intro }}</div>
-			</div>
-		</a>
+		</div>
+		{% endif %}
 	</div>
+	</a>
 </div>
 {% endmacro %}
 
@@ -57,8 +68,8 @@
 	{{ hero(program.program_name, program.description, has_access) }}
 	<div class='container'>
 		<div class="row mt-5">
-			{% for course in program.courses %}
-				{{ card(frappe.get_doc("Course", course.course), loop.index, program.courses|length) }}
+			{% for course in courses %}
+				{{ card(course, loop.index, courses|length) }}
 			{% endfor %}
 		</div>
 	</div>
diff --git a/erpnext/www/lms/program.py b/erpnext/www/lms/program.py
index 4c3a3fd..1242336 100644
--- a/erpnext/www/lms/program.py
+++ b/erpnext/www/lms/program.py
@@ -7,10 +7,16 @@
 def get_context(context):
 	context.education_settings = frappe.get_single("Education Settings")
 	context.program = get_program(frappe.form_dict['program'])
+	context.courses = [frappe.get_doc("Course", course.course) for course in context.program.courses]
 	context.has_access = utils.allowed_program_access(frappe.form_dict['program'])
+	context.progress = get_course_progress(context.courses, context.program)
 
 def get_program(program_name):
 	try:
 		return frappe.get_doc('Program', program_name)
 	except frappe.DoesNotExistError:
-		frappe.throw(_("Program {0} does not exist.".format(program_name)))
\ No newline at end of file
+		frappe.throw(_("Program {0} does not exist.".format(program_name)))
+
+def get_course_progress(courses, program):
+	progress = {course.name: utils.get_student_course_details(course, program) for course in courses}
+	return progress
\ No newline at end of file
