some changes inside impl. draft