diff --git a/common/djangoapps/course_modes/views.py b/common/djangoapps/course_modes/views.py
index 84e6f657854b2a0195384c9029d2fe0f8cde6754..c4dd41b61eb386593fd9ae35ffcc762621c0ee20 100644
--- a/common/djangoapps/course_modes/views.py
+++ b/common/djangoapps/course_modes/views.py
@@ -34,12 +34,19 @@ class ChooseModeView(View):
     @method_decorator(login_required)
     def get(self, request, course_id, error=None):
         """ Displays the course mode choice page """
-        if CourseEnrollment.enrollment_mode_for_user(request.user, course_id) == 'verified':
+        
+        enrollment_mode = CourseEnrollment.enrollment_mode_for_user(request.user, course_id)
+        upgrade = request.GET.get('upgrade', False)
+
+        # verified users do not need to register or upgrade
+        if enrollment_mode == 'verified':
             return redirect(reverse('dashboard'))
-        modes = CourseMode.modes_for_course_dict(course_id)
 
-        upgrade = request.GET.get('upgrade', False)
+        # registered users who are not trying to upgrade do not need to re-register
+        if enrollment_mode != None and upgrade == False:
+            return redirect(reverse('dashboard'))
 
+        modes = CourseMode.modes_for_course_dict(course_id)
         donation_for_course = request.session.get("donation_for_course", {})
         chosen_price = donation_for_course.get(course_id, None)