observable method generation is now much more elegant