`Type` and `Command` should be readonly, also need a way to protect state.