use instancetype in initialization
update spec