initial implementation of Command pattern