finished most of required features