new class-based structure