all methods, except notify should be `private` (or `protected`)