use instancetype instead of id for initializers