     func userForIndexPath(indexPath: NSIndexPath) -> User? {
         if !isValidIndexPath(indexPath) { return nil }
 
-        if let user = streamCellItems[indexPath.item].jsonable as? User {
+        if let user = visibleCellItems[indexPath.item].jsonable as? User {
             return user
         }
-        else if let authorable = streamCellItems[indexPath.item].jsonable as? Authorable {
+        else if let authorable = visibleCellItems[indexPath.item].jsonable as? Authorable {
             return authorable.author
         }
         return nil

    func removeCommentsForPost(post: Post) -> [NSIndexPath] {
        let indexPaths = self.commentIndexPathsForPost(post)
        for path in indexPaths {
            self.streamCellItems.removeAtIndex(path.item)
        }
        return indexPaths
    }

    func updateHeightForIndexPath(indexPath:NSIndexPath?, height:CGFloat) {
        if let indexPath = indexPath {
            if indexPath.item < countElements(streamCellItems) {
                streamCellItems[indexPath.item].oneColumnCellHeight = height + imageBottomPadding
                streamCellItems[indexPath.item].multiColumnCellHeight = height + imageBottomPadding
            }
        }
    }

    var streamKind:StreamKind
    var currentUser: User?

    // these are the items assigned from the parent controller
    var streamCellItems:[StreamCellItem] = []
    // these are either the same as streamCellItems (no filter) or if a filter
    // is applied this stores the filtered items
    var visibleCellItems:[StreamCellItem] = []
    // if a filter is added or removed, we update the items
    var streamFilter: StreamFilter {
        didSet { updateFilteredItems() }
