refactoring out commands to separate classes (first pass)