refactored with generic attributes - DAAAAMN