refactored ! methods