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()
diff --git a/smash/web/tests/view/test_notifications.py b/smash/web/tests/view/test_notifications.py
index de8c59457b9d5a26106e4dafccf4c99fc899725f..93864779089f07f88ee827fecc0cba60126843e8 100644
--- a/smash/web/tests/view/test_notifications.py
+++ b/smash/web/tests/view/test_notifications.py
@@ -183,6 +183,45 @@ class NotificationViewTests(LoggedInTestCase):
         self.assertTrue(visits[0].datetime_begin < visits[1].datetime_begin)
         self.assertTrue(visits[1].datetime_begin < visits[2].datetime_begin)
 
+    def test_get_exceeded_visits(self):
+        subject = create_study_subject()
+
+        visit = create_visit(subject)
+        visit.datetime_begin = get_today_midnight_date() + datetime.timedelta(days=-12)
+        visit.datetime_end = get_today_midnight_date() + datetime.timedelta(days=-10)
+        visit.visit_number = 1
+        visit.is_finished = True
+        visit.save()
+
+        visit = create_visit(subject)
+        visit.datetime_begin = get_today_midnight_date() + datetime.timedelta(days=-10)
+        visit.datetime_end = get_today_midnight_date() + datetime.timedelta(days=-8)
+        visit.visit_number = 2
+        visit.save()
+
+        visits = get_exceeded_visits(self.user)
+        self.assertEquals(1, visits.count())
+
+    def test_get_exceeded_visits_with_scheduled_appointment(self):
+        subject = create_study_subject()
+
+        visit = create_visit(subject)
+        visit.datetime_begin = get_today_midnight_date() + datetime.timedelta(days=-12)
+        visit.datetime_end = get_today_midnight_date() + datetime.timedelta(days=-10)
+        visit.visit_number = 1
+        visit.is_finished = True
+        visit.save()
+
+        visit = create_visit(subject)
+        visit.datetime_begin = get_today_midnight_date() + datetime.timedelta(days=-10)
+        visit.datetime_end = get_today_midnight_date() + datetime.timedelta(days=-8)
+        visit.visit_number = 2
+        visit.save()
+        create_appointment(visit)
+
+        visits = get_exceeded_visits(self.user)
+        self.assertEquals(0, visits.count())
+
     def test_get_approaching_visits_without_appointments_count(self):
         original_notification = get_approaching_visits_without_appointments_count(self.user)
         subject = create_study_subject()
diff --git a/smash/web/views/notifications.py b/smash/web/views/notifications.py
index aa56fe879701094a32241315203628b61305e01b..b54ca23303a37c3ed4aba60cf4c275119a577845 100644
--- a/smash/web/views/notifications.py
+++ b/smash/web/views/notifications.py
@@ -244,7 +244,9 @@ def get_exceeded_visits(user):
                                 ).filter(
         # by default any visit where visit number is bigger than 1
         # or in case of first visit - visits that had some successful appointment
-        Q(visit_number__gt=1) | Q(appointment__status=Appointment.APPOINTMENT_STATUS_FINISHED)).order_by(
+        Q(visit_number__gt=1) | Q(appointment__status=Appointment.APPOINTMENT_STATUS_FINISHED)).filter(
+        # visits that have scheduled appointments should be excluded
+        ~Q(appointment__status=Appointment.APPOINTMENT_STATUS_SCHEDULED)).order_by(
         'datetime_begin')