         }
     }
 
-    private func onResultsState(newItems: [C.Element], inCursor cursor: C, afterState: PaginationViewModel<C>.State) {
+    private func onResultsState(newItems: [Cursor.Element], inCursor cursor: Cursor, afterState: PaginationViewModel<Cursor>.State) {
         tableView.isUserInteractionEnabled = true
 
         if case .loading = afterState {
             delegate?.paginationWrapper(wrapper: self, didReload: newItems, usingCursor: cursor)
 
-            currentPlaceholderView?.removeFromSuperview()
+            removeCurrentPlaceholderView()
 
             tableView.support.refreshControl?.endRefreshing()
 


            let loadingIndicatorView = loadingIndicator.view

            loadingIndicatorView.translatesAutoresizingMaskIntoConstraints = false

            placeholdersContainerView.insertSubview(loadingIndicatorView, aboveSubview: tableView)

            loadingIndicatorView.centerXAnchor.constraint(equalTo: placeholdersContainerView.centerXAnchor).isActive = true
            loadingIndicatorView.centerYAnchor.constraint(equalTo: placeholdersContainerView.centerYAnchor).isActive = true

            loadingIndicator.startAnimating()


        tableView.support.refreshControl?.endRefreshing()
        tableView.isUserInteractionEnabled = true

        removeCurrentPlaceholderView()
    }

    private func preparePlaceholderView(_ placeholderView: UIView) {
        placeholderView.translatesAutoresizingMaskIntoConstraints = false
        placeholderView.isHidden = false

        // I was unable to add pull-to-refresh placeholder scroll behaviour without this trick
        let wrapperView = UIView()
        wrapperView.addSubview(placeholderView)

        let leadingConstraint = placeholderView.leadingAnchor.constraint(equalTo: wrapperView.leadingAnchor)
        let trailingConstraint = placeholderView.trailingAnchor.constraint(equalTo: wrapperView.trailingAnchor)
        let topConstraint = placeholderView.topAnchor.constraint(equalTo: wrapperView.topAnchor)
        let bottomConstraint = placeholderView.bottomAnchor.constraint(equalTo: wrapperView.bottomAnchor)

        wrapperView.addConstraints([leadingConstraint, trailingConstraint, topConstraint, bottomConstraint])

        currentPlaceholderViewTopConstraint = topConstraint

        tableView.backgroundView = wrapperView
    }

    private func removeCurrentPlaceholderView() {
        tableView.backgroundView = nil
    }

    private func bindAppStateNotifications() {
