Fill in more Command logic

split some pieces up into separate api and impl