redesign with mix-in
refactoring for composite specs and operators