begin to refactor Cannon class