Refactor Move to adhere to OCP and LSP

OCP is Open/Closed Principle
LSP is Liskov substitution principle