 // MARK: UIPageViewControllerDataSource
 extension CalendarVC: UIPageViewControllerDataSource {
     public func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
-        return self._daysVC(.before, (viewController as! _CalendarDaysVC))
+        return self._daysVC(for: (viewController as! _CalendarDaysVC).month - 1.month)
     }
     
     public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
-        return self._daysVC(.after, (viewController as! _CalendarDaysVC))
+        return self._daysVC(for: (viewController as! _CalendarDaysVC).month + 1.month)
     }
 }
 

    // Private Variables
    fileprivate var _currentDaysVC: _CalendarDaysVC?
    fileprivate var _isPaging: Bool = false
    
    // Lifecycle Overrides
    public override func loadView() {


// MARK: PageViewController Helpers
private extension CalendarVC {
    func _showPreviousMonth() {
        guard !self._isPaging else { return }
        guard let currentVC: _CalendarDaysVC = self._currentDaysVC else { return }
        let previousMonth: Date = currentVC.month - 1.month
        let vc: _CalendarDaysVC = self._daysVC(for: previousMonth)
        self._switchTo(daysVC: vc, direction: .reverse)
    }
    
    func _showNextMonth() {
        guard !self._isPaging else { return }
        guard let currentVC: _CalendarDaysVC = self._currentDaysVC else { return }
        let nextMonth: Date = currentVC.month - 1.month
        let vc: _CalendarDaysVC = self._daysVC(for: nextMonth)
        self._switchTo(daysVC: vc, direction: .forward)
    }
    
    func _switchTo(daysVC: _CalendarDaysVC, direction: UIPageViewControllerNavigationDirection, animated: Bool = true) {
        self._isPaging = true
        self._pageVC.setViewControllers(
            [daysVC],
            direction: direction,
            animated: animated,
            completion: { _ in
                self._isPaging = false
            }
        )
    }
    
    func _daysVC(for month: Date) -> _CalendarDaysVC {
        let daysVC: _CalendarDaysVC = _CalendarDaysVC(month: month)
        daysVC.calendarDaysView.delegate = self
        return daysVC
    }
}


// MARK: Set Displayed Month
private extension CalendarVC {
    func _setDisplayedMonthAndYear(from date: Date, animated: Bool = true) {
        guard !date.isIn(date: self._displayedMonthAndYear, granularity: .month) else { return }
        let roundedDate: Date = date.startOf(component: .month)
        let vc: _CalendarDaysVC = self._daysVC(for: roundedDate)
        
        let isLaterMonth: Bool = date.isAfter(date: date, granularity: .month)
        let direction: UIPageViewControllerNavigationDirection = isLaterMonth ? .forward : .reverse
        
        self._displayedMonthAndYear = roundedDate
        self._switchTo(daysVC: vc, direction: direction, animated: animated)
    }
}


// MARK: - _CalendarDaysVC
private class _CalendarDaysVC: UIViewController {
    // Required Init
    required init?(coder aDecoder: NSCoder) {
        self.month = Date()
        super.init(coder: aDecoder)
    }
    
    // Init
    init(month: Date) {
        self.month = month
        super.init(nibName: nil, bundle: nil)
    }
    
    // Constants
    let calendarDaysView: CalendarDaysView = CalendarDaysView()
    
    // Variables
    private(set) var month: Date
    
    // Lifecycle Override
    override func loadView() {
