why: generic implementation will be also be used elsewhere
why: handy to re-use, eg. for upcoming clique implementation