rebuilt with @instancetype added!