reduced code by composition