switched from Command struct to custom Command type, and Command funcs no longer need a *Command receiver