is the cast needed, or does `getStep` return something that has `validate` whatever the subclass? (same elsewhere)