   }
 
   internal func prepareForReload() {
-    currentSections = sections
     sectionBeginIndex = []
-    sectionForIndex = []
-    sectionBeginIndex.reserveCapacity(currentSections.count)
-    for (sectionIndex, section) in currentSections.enumerated() {
-      let itemCount = section.numberOfItems
-      sectionBeginIndex.append(sectionForIndex.count)
-      for _ in 0..<itemCount {
-        sectionForIndex.append(sectionIndex)
-      }
+    sectionBeginIndex.reserveCapacity(sections.count)
+    var count = 0
+    for section in sections {
+      sectionBeginIndex.append(count)
+      count += section.numberOfItems
     }
   }
 
   open override func didReload() {
     super.didReload()
-    for section in currentSections {
+    for section in sections {
       section.didReload()
     }
   }
 
   open override func didTap(view: UIView, at: Int) {
     let (sectionIndex, item) = indexPath(at)
-    currentSections[sectionIndex].didTap(view: view, at: item)
+    sections[sectionIndex].didTap(view: view, at: item)
   }
 
   open override func hasReloadable(_ reloadable: CollectionReloadable) -> Bool {
-    if reloadable === self { return true }
-    for section in currentSections {
-      if section.hasReloadable(reloadable) {
-        return true
-      }
-    }
-    return false
+    return reloadable === self || reloadable === dataProvider ||
+      sections.contains(where: { $0.hasReloadable(reloadable) })
   }
-
 }

    }
  }

  public init(identifier: String? = nil,
              layout: CollectionLayout<AnyCollectionProvider> = FlowLayout(),
              presenter: CollectionPresenter? = nil,
              sections: [AnyCollectionProvider]) {
    self.sections = sections
    self.presenter = presenter
    self.layout = layout
    super.init(identifier: identifier)
  }


open class CollectionComposer: BaseCollectionProvider {

  public var sections: [AnyCollectionProvider] {
    get { return dataProvider.data }
    set { dataProvider.data = newValue }
  }

  public var presenter: CollectionPresenter? {
    didSet {
      setNeedsReload()
    }
  }

  public var layout: CollectionLayout<AnyCollectionProvider> {
    didSet {
