work in progress, but basic read functionality is there