 				return CGRect(origin: CGPoint(x: edgeInsets.left, y: edgeInsets.top), size: CGSize(width: size.width + edgeInsets.right, height: size.height + edgeInsets.bottom))
 			}
 		}
-
+		
 		let layout: MosaicCollectionViewLayout
 		
 		var collectionView: UICollectionView {

		func computeFrames() {
			// TODO: support horizontal scroll direction
			/*let contentSize = layout.scrollDirection == .Vertical ?
				CGSize(width: collectionView.bounds.width - collectionView.contentInset.left - collectionView.contentInset.right, height: 0) :
				CGSize(width: 0, height: collectionView.bounds.size.height - collectionView.contentInset.top - collectionView.contentInset.bottom)
			*/
			
			var contentSize = CGSize(width: collectionView.bounds.width - collectionView.contentInset.left - collectionView.contentInset.right, height: 0)
			
			let contentInset = collectionView.contentInset
			
			// reset frame tree
			var sectionFrames: [MosaicLayoutFrameTree.SectionFrameNode] = []
			// reset origin Ys 
			itemFrameForIndexPath = []
			//TODO: content offset for header
			

				for (rowIndex, gridFrame) in section.cellGridPositions.enumerate() {
					
					//TODO: support horizontal scroll direction in these calculations
					// calculate x and y positions
					// using grid frame and scale factor plus grad frame calculated interitem and line spacing
					let indexPath = NSIndexPath(forItem: rowIndex, inSection: sectionIndex)
					
					let xPos = gridFrame.origin.x * unitPixelScaleFactor + interitemSpacing * CGFloat(Int(gridFrame.origin.x) % section.constrainedSideGridLength)
					let yPos = gridFrame.origin.y * unitPixelScaleFactor + lineSpacing * CGFloat(gridFrame.origin.y)
					// origin should offset using the section origin which was computed including the section and content inset + height of header
					let origin = CGPoint(x: xPos + sectionOrigin.x, y: yPos + sectionOrigin.y + headerSize.height)
					let size: CGSize
					// ask for an overriden item size
					if let overrideSize = sizeForItemAtIndexPath(indexPath) {
						//TODO: This will invalidate the expectations of the frametree
						// incorporate this into the build sections routine
						size = overrideSize
					} else {
						// calculate size using grid frame * scale factor
						size = CGSize(
							width: gridFrame.size.width * unitPixelScaleFactor + interitemSpacing * (gridFrame.size.width - 1),
							height: gridFrame.size.height * unitPixelScaleFactor + lineSpacing * (gridFrame.size.height - 1)
						)
					}
					let cellFrame = CGRect(origin: origin, size: size)
					cellFrames.append(MosaicLayoutFrameTree.SectionFrameNode.CellFrameNode(frame: cellFrame))
					// used for fast lookup of items in rect
					itemFrameForIndexPath.append((indexPath: indexPath, frame: cellFrame))
					if cellFrame.origin.y + cellFrame.size.height > sectionVerticalExtent {
						sectionVerticalExtent = cellFrame.origin.y + cellFrame.size.height
					}
