add self referential struct