         if let presentedMonthView = monthViews[presented],
             let followingMonthView = monthViews[following] ,
             presentedWeekView.monthView == presentedMonthView {
-                for weekView in presentedMonthView.weekViews {
-                    if weekView.index == presentedWeekView.index + 1 {
-                        return weekView
-                    }
-                }
-
-                for weekView in followingMonthView.weekViews {
-                    if weekView.index == 0 {
-                        return weekView
-                    }
-                }
+                if presentedMonthView.weekViews.count > presentedWeekView.index + 1 {
+                    return presentedMonthView.weekViews[presentedWeekView.index + 1]
+                }
+                var expectedWeekIndex = 0
+                let weekView = followingMonthView.weekViews[expectedWeekIndex]
+                //Check if the first week has weekdaysOut, otherwise, take next week to avoid showing duplicates
+                if weekView.weekdaysOut != nil {
+                  expectedWeekIndex += 1
+                  return followingMonthView.weekViews[expectedWeekIndex]
+                }
+                return weekView
         } else if let followingMonthView = monthViews[following] {
             monthViews[previous] = monthViews[presented]
             monthViews[presented] = monthViews[following]

        if let presentedMonthView = monthViews[presented],
            let previousMonthView = monthViews[previous] ,
            presentedWeekView.monthView == presentedMonthView {
                for weekView in presentedMonthView.weekViews {
                    if weekView.index == presentedWeekView.index - 1 {
                        return weekView
                    }
                }

                for weekView in previousMonthView.weekViews {
                    if weekView.index == previousMonthView.weekViews.count - 1 {
                        return weekView
                    }
                }
        } else if let previousMonthView = monthViews[previous] {
            monthViews[following] = monthViews[presented]
            monthViews[presented] = monthViews[previous]

    }

    public override func performedDayViewSelection(_ dayView: DayView) {
        //In a week view mode we don't need to scroll for a next week when dayOut selected
    }

    public override func presentPreviousView(_ view: UIView?) {
