             defaultFailureHandler(reason, errorMessage: errorMessage)
         }
 
-        let completion: [DiscoveredFeed] -> Void = { [weak self] feeds in
+        let completion: [DiscoveredFeed] -> Void = { feeds in
 
             feeds.forEach({ feed in
                 let newLayout = FeedCellLayout(feed: feed)
-                self?.updateFeedCellLayout(newLayout, forFeed: feed)
+                FeedsViewController.layoutPool.updateFeedCellLayout(newLayout, forFeed: feed)
             })
 
             dispatch_async(dispatch_get_main_queue()) { [weak self] in

        feedsTableView.tableFooterView = feeds.isEmpty ? noFeedsFooterView : UIView()
    }

    private var feedCellLayoutHash = [String: FeedCellLayout]()

    private func feedCellLayoutOfFeed(feed: DiscoveredFeed) -> FeedCellLayout? {
        let key = feed.id

        return feedCellLayoutHash[key]
    }

    private func updateFeedCellLayout(layout: FeedCellLayout, forFeed feed: DiscoveredFeed) {

        let key = feed.id

        if !key.isEmpty {
            feedCellLayoutHash[key] = layout
        }

        println("feedCellLayoutHash.count: \(feedCellLayoutHash.count)")
    }

    private func heightOfFeed(feed: DiscoveredFeed) -> CGFloat {

        if let layout = feedCellLayoutOfFeed(feed) {
            return layout.height

        } else {
            let layout = FeedCellLayout(feed: feed)
            updateFeedCellLayout(layout, forFeed: feed)
            return layout.height
        }
    }

    private var feedSortStyle: FeedSortStyle = .Match {
        didSet {


        case Section.Feed.rawValue:
            let feed = feeds[indexPath.row]
            return FeedsViewController.layoutPool.heightOfFeed(feed)

        case Section.LoadMore.rawValue:
            return 60
