stricter and more precise with default vals