I saw C code that does: PurpleBuddy *b = buddies->data; PurplePresence *p = purple_buddy_get_presence(b); It made me wonder you can't do: PurpleBuddy *b = buddies->data; PurplePresence *p = b->purple_buddy_get_presence(); It seems logical to me.