don't use sprintf()