moved things around;
changed that events are sent directly to receiver;
changed every methods to be treated as events