Use overloads instead of default arguments to make type inference easier