* Refactored a bit further