             updateLayoutItemSize()
             if calendarViewLayout.itemSize != lastSize {
                 lastSize = calendarViewLayout.itemSize
-                if finalLoadable == nil, delegate != nil { // This will only be set once
-                    finalLoadable = true
+                if !calendarIsAlreadyLoaded, delegate != nil { // This will only be set once
+                    calendarIsAlreadyLoaded = true
                     self.reloadData() { self.executeDelayedTasks() }
                 }
             }

                newDateBoundary.generateOutDates != cachedConfiguration.generateOutDates ||
                newDateBoundary.firstDayOfWeek != cachedConfiguration.firstDayOfWeek ||
                newDateBoundary.hasStrictBoundaries != cachedConfiguration.hasStrictBoundaries {
                        setupMonthInfoAndMap()
                        layoutNeedsUpdating = true
            }
        }
    }

    func configureChangeOfRows() {
        let layout = calendarViewLayout
        layout.clearCache()
        layout.prepare()
        // the selected dates and paths will be retained. Ones that
        // are not available on the new layout will be removed.
        var indexPathsToReselect = [IndexPath]()
        var newDates = [Date]()
        for date in selectedDates {
            // add the index paths of the new layout
            let path = pathsFromDates([date])

        self.layoutIfNeeded()
        
        // Reload the datasource
        if shouldCheckDelegateDatasource {
            reloadDelegateDataSource()
        }
        
        if layoutNeedsUpdating {
            setupMonthInfoAndMap()
            calendarViewLayout.clearCache()
            calendarViewLayout.prepare()
            remapSelectedDatesWithCurrentLayout()
            layoutNeedsUpdating = false
        }
        
        // Restore the selected index paths
        let restoreSelectedPathsAfterReload = {
            if !self.selectedDates.isEmpty {
                let selectedDates = self.selectedDates
                self.theSelectedIndexPaths.removeAll()
