 
 
     //    private property and method above.
-    weak var delegate: CHTCollectionViewDelegateWaterfallLayout? {
+    public weak var delegate: CHTCollectionViewDelegateWaterfallLayout? {
         get {
             return self.collectionView!.delegate as? CHTCollectionViewDelegateWaterfallLayout
         }
     }
-    var columnHeights: [[CGFloat]]
-    var sectionItemAttributes: [[UICollectionViewLayoutAttributes]]
-    var allItemAttributes: [UICollectionViewLayoutAttributes]
-    var headersAttributes: [Int: UICollectionViewLayoutAttributes]
-    var footersAttributes: [Int: UICollectionViewLayoutAttributes]
-    var unionRects: [NSValue]
-    let unionSize = 20
-
-    override init() {
+    public var columnHeights: [[CGFloat]]
+    public var sectionItemAttributes: [[UICollectionViewLayoutAttributes]]
+    public var allItemAttributes: [UICollectionViewLayoutAttributes]
+    public var headersAttributes: [Int: UICollectionViewLayoutAttributes]
+    public var footersAttributes: [Int: UICollectionViewLayoutAttributes]
+    public var unionRects: [NSValue]
+    public let unionSize = 20
+
+    override public init() {
         self.headerHeight = 0.0
         self.footerHeight = 0.0
         self.columnCount = 2

        }
    }

    override var collectionViewContentSize: CGSize {
        let numberOfSections = self.collectionView!.numberOfSections
        if numberOfSections == 0 {
            return CGSize.zero

        return attrs
    }

    override public func shouldInvalidateLayout (forBoundsChange newBounds: CGRect) -> Bool {
        let oldBounds = self.collectionView!.bounds
        if newBounds.width != oldBounds.width {
            return true
