refactored weapon