pseudo delegates via interfaces