finish coding all - untested 16, 17, 18