issue#21 optimize