use action pattern