diff --git a/smash/web/api_views/subject.py b/smash/web/api_views/subject.py
index a30d4c198348f47bf26f6672e4c323ae352d83d3..f5eed511a6803c18a79d89643ae294ae40b30da8 100644
--- a/smash/web/api_views/subject.py
+++ b/smash/web/api_views/subject.py
@@ -199,11 +199,11 @@ def filter_by_visit(result, visit_number, visit_type):
     elif visit_type == "EXCEED":
         result = result.filter(**{datetime_begin_filter + "__lt": get_today_midnight_date()}). \
             filter(**{is_finished_filter: 0}). \
+            filter(**{scheduled_appointments_filter: 0}). \
             filter(**{datetime_end_filter + "__lt": get_today_midnight_date()})
     elif visit_type == "IN_PROGRESS":
         result = result.filter(**{datetime_begin_filter + "__lt": get_today_midnight_date()}). \
             filter(**{is_finished_filter: 0}). \
-            filter(**{datetime_end_filter + "__gt": get_today_midnight_date()}). \
             filter(**{scheduled_appointments_filter + "__gt": 0})
     elif visit_type == "SHOULD_BE_IN_PROGRESS":
         result = result.filter(**{datetime_begin_filter + "__lt": get_today_midnight_date()}). \
@@ -330,7 +330,12 @@ def serialize_subject(study_subject):
                 else:
                     status = "MISSED"
             elif visit.datetime_end < get_today_midnight_date():
-                status = "EXCEEDED"
+                scheduled_appointments_count = visit.appointment_set.filter(
+                    status=Appointment.APPOINTMENT_STATUS_SCHEDULED).count()
+                if scheduled_appointments_count > 0:
+                    status = "IN_PROGRESS"
+                else:
+                    status = "EXCEEDED"
             else:
                 scheduled_appointments_count = visit.appointment_set.filter(
                     status=Appointment.APPOINTMENT_STATUS_SCHEDULED).count()