simplify implementation