use some namedtuples to make things clearer in core.py