don't require mutable self