revert wrong previous commit
Refactor partly into little cooperating objects; warning: still a bit rough