using instancetype instead of id