         tags.sort(by: isGoingOffscreen ? {$0 < $1} : {$0 < $1})
         
         for tag in tags {
-            if let view = self.viewWithTag(tag) as? T2GCell {
-                let frame = self.frameForCell(indexPath: self.indexPathForCell(view.tag))
+            if let view = viewWithTag(tag) as? T2GCell {
+                let frame = frameForCell(indexPath: indexPathForCell(view.tag))
                 
                 if isGoingOffscreen || view.frame.origin.x != frame.origin.x {
                     delayCount += 1.0

        var lowest = Int.max
        var highest = Int.min
        
        for view in self.subviews {
            if let cell = view as? T2GCell {
                lowest = lowest > cell.tag ? cell.tag : lowest
                highest = highest < cell.tag ? cell.tag : highest

    func contentSizeForMode(_ mode: T2GLayoutMode) -> CGSize {
        var height: CGFloat = 0.0
        
        if let dimensions = dataDelegate?.dimensionsForCell(mode) {
            let viewX = mode == .collection ? dimensions.padding : (frame.size.width - dimensions.width) / 2
            let divisor = itemCountPerLine(mode)
            
            var lineCount = 0
            for section in 0..<dataDelegate!.numberOfSections() {
                lineCount += (Int(ceil(Double((dataDelegate!.numberOfCellsInSection(section) - 1) / divisor))) + 1)
            }
            lineCount -= 1
            
            let ypsilon = viewX + (CGFloat(lineCount) * (dimensions.height + dimensions.padding))
            height = ypsilon + dimensions.height + dimensions.padding + (CGFloat(dataDelegate!.numberOfSections()) * dataDelegate!.dimensionsForSectionHeader().height)
            height = height < bounds.height ? (bounds.height - 31.0) : height
        }
        return CGSize(width: frame.size.width, height: height + 90)
    }
    
    /**
