         self.environment.router?.showContainerForBlockWithID(block.blockID, type:block.displayType, parentID: parent, courseID: courseQuerier.courseID, fromController:self)
     }
     
-    private func expandAccessStream(stream : Stream<CourseLastAccessed>) -> Stream<(CourseBlock, CourseLastAccessed)> {
-        return stream.transform {[weak self] lastAccessed in
-            return joinStreams(self?.courseQuerier.blockWithID(lastAccessed.moduleId) ?? Stream<CourseBlock>(), Stream(value: lastAccessed))
-        }
-
-    }
-    
     //MARK: PullRefreshControllerDelegate
     public func refreshControllerActivated(controller: PullRefreshController) {
         courseQuerier.needsRefresh = true

        fixedSpace.width = barButtonFixedSpaceWidth
        navigationItem.rightBarButtonItems = [webController.barButtonItem,fixedSpace,modeController.barItem]
        navigationItem.backBarButtonItem = UIBarButtonItem(title: " ", style: .Plain, target: nil, action: nil)
        
        self.blockIDStream.backWithStream(Stream(value: rootID))
    }

    public required init?(coder aDecoder: NSCoder) {

        }
    }
    
    private func addListeners() {
        headersLoader.backWithStream(blockIDStream.transform {[weak self] blockID in
            if let owner = self {
                return owner.courseQuerier.childrenOfBlockWithID(blockID, forMode: owner.modeController.currentMode)
            }
            else {
                return Stream<CourseOutlineQuerier.BlockGroup>(error: NSError.oex_courseContentLoadError())
            }}
        )
        rowsLoader.backWithStream(headersLoader.transform {[weak self] headers in
            if let owner = self {
                let children = headers.children.map {header in
                    return owner.courseQuerier.childrenOfBlockWithID(header.blockID, forMode: owner.modeController.currentMode)
                }
                return joinStreams(children)
            }
            else {
                return Stream(error: NSError.oex_courseContentLoadError())
            }}
        )
        
        self.blockIDStream.backWithStream(Stream(value: rootID))
        
        headersLoader.listen(self,
            success: {[weak self] headers in
                self?.setupNavigationItem(headers.block)
            },
            failure: {[weak self] error in
                self?.showErrorIfNecessary(error)
            }
        )
