specified possible magic methods up top