             throw CoordinatorError.pageOutOfRange
         }
         
-        _currentPage = p
+        currentPage = p
     }
     
     /// Base on current page, scroll carousel (without animation) to subview that should be visible to user

    }
    
    public var delegate: KSICCoordinatorDelegate?
    
    public let model: [KSImageCarouselDisplayable]
    
    public private(set) var placeholderImage: UIImage?
    
    public var shouldShowActivityIndicator = true
    
    public var activityIndicatorStyle: UIActivityIndicatorViewStyle = .gray
    
    private var _carousel: KSICScrollerViewController?
    public var carousel: KSICScrollerViewController? {
        return _carousel
    }
    
    private var _currentPage: Int {
        didSet {
            
            // Note: Everytime current page being set, we will update carousel's viewModel (which will update images in carousel) and scroll carousel to subview that user should see
            
            // Update view model of carousel
            _carousel?.viewModel = carouselViewModel
            
            // Scroll carousel (without animation) to subview that user should see
            swapCarouselSubview()
        }
    }
    public var currentPage: Int {
        return _currentPage
    }
    
    public var carouselViewModel: [KSImageCarouselDisplayable] {

    
    // MARK: KSICCoordinator conformation
    public func showCarousel(inside container: UIView, of parentViewController: UIViewController) {
        carousel = KSICScrollerViewController(withViewModel: carouselViewModel, placeholderImage: placeholderImage, delegate: self)
        add(carousel!, to: container, of: parentViewController)
    }
    
    public func scrollToNextPage() {
