switched from inheritance to mixin behaviour