better command processing