       }, completion: { _ in
          self._animatingIndexPaths = nil
       })
+      _layoutState.reset()
    }
 }
 

      _refreshControl.endRefreshing()
   }
   
   public func configure(with elements: [Elemental], transitionType: ElementalTransitionType? = nil, scrollToTop: Bool = true) {
      elements.forEach { $0.register(collectionView: collectionView) }
      self._elements = elements
      
      if let transitionType = transitionType {
         collectionView.reloadData()
         guard let screenshot = view.snapshotView(afterScreenUpdates: false) else { return }
         view.addSubview(screenshot)
         
         switch transitionType {
         case .forwards: _cvLeadingSpaceConstraint.constant = collectionView.bounds.width
         case .backwards: _cvLeadingSpaceConstraint.constant = -collectionView.bounds.width
         }
         view.layoutIfNeeded()
         collectionView.scrollToItem(at: IndexPath(row: 0, section: 0), at: .top, animated: false)
         
         collectionView.alpha = 0
         UIView.animate(withDuration: 0.25, animations: {
            self._cvLeadingSpaceConstraint.constant = 0
            switch transitionType {
            case .forwards: screenshot.frame.origin.x -= self.view.bounds.width
            case .backwards: screenshot.frame.origin.x += self.view.bounds.width
            }
            self.view.layoutIfNeeded()
            self.collectionView.alpha = 1
            screenshot.alpha = 0
         }, completion: { finished in
            screenshot.removeFromSuperview()
         })
      } else {
         collectionView.reloadData()
         if !elements.isEmpty, scrollToTop {
            collectionView.scrollToItem(at: IndexPath(row: 0, section: 0), at: .top, animated: false)
         }
      }
   }
   

   
   fileprivate var _cvLeadingSpaceConstraint: NSLayoutConstraint = NSLayoutConstraint()
   fileprivate var _animatingIndexPaths: [IndexPath]?
   fileprivate var _elements: [Elemental] = []
   
   struct ReloadState {
      var needsReload = false
      var transition: ElementalTransition = .none
      
      mutating func reset() {
         self = ReloadState()
      }
   }
   fileprivate var _reloadState = ReloadState()
   
   struct LayoutState {
      var needsLayout = false
      var animated = false
      
      mutating func reset() {
         self = LayoutState()
      }
   }
   fileprivate var _layoutState = LayoutState()
   
   // MARK: - Public Properties
   public var footerViewTopPadding: CGFloat = 0 {
