simplify the implementation