some improvements + repetitiveness