how can this work? it has self in main?