     }
   }
   
-  final class Tier2Item {
+  final class NextTierItem {
     let item: Item
-    let next: Tier2Item?
-    init(item: Item, next: Tier2Item?) {
+    let next: NextTierItem?
+    init(item: Item, next: NextTierItem?) {
       self.item = item
       self.next = next
     }

final public class ReleasePool {
  private let _tier1Container = makeThreadSafeContainer()
  private let _tier2Container = makeThreadSafeContainer()
  static let numberOfItemsForTier2 = (1 << 10) - 1

  public init() { }
  

  }

  private func updateHead(_ block: (AnyObject?) -> AnyObject?) {
    guard let item = _tier1Container.updateHead(block).newHead as? Item
      else { return }
    
    if (item.index & ReleasePool.numberOfItemsForTier2) == ReleasePool.numberOfItemsForTier2 {
      _tier2Container.updateHead { NextTierItem(item: item, next: $0 as! NextTierItem?) }
    }

    if (item.index & ReleasePool.numberOfItemsForTier3) == ReleasePool.numberOfItemsForTier3 {
      _tier3Container.updateHead { NextTierItem(item: item, next: $0 as! NextTierItem?) }
    }
}
  
  public func insert(_ releasable: Releasable) {
    self.updateHead { ReleasableItem(object: releasable, next: $0 as! Item?) }
