don't rely on toString being a stable implementation, where possible