refactored like a muvvvvvvv