refactoring weapon