I wonder if a full object is necessary here.  Could we do this just with a function?