better class names
less boilerplate
protected abstract methods in proxies