             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])


    var delayedExecutionClosure: [(() -> Void)] = []
    var lastSize = CGSize.zero
    var calendarIsAlreadyLoaded: Bool = false

    var startDateCache: Date {
        get { return cachedConfiguration.startDate }
    }

    var endDateCache: Date {
        get { return cachedConfiguration.endDate }
    }

    var calendar: Calendar {
        get { return cachedConfiguration.calendar }
    }
    // Configuration parameters from the dataSource
    var cachedConfiguration: ConfigurationParameters!
