add initial work, non of this is functional yet