eol.py: rework general design to use classes