Refactored model heirarchy, use Node/Stream pairs + supporting events