initial version, some to do still