separated commands from implementation