Add command interfaces

Adding some interfaces for commands.

I am open to suggestions on this pull request.
This needs to be resolved before this PR can be pulled.