protocol mostly done except method calls