Uses mixin to reduce duplication