private async Task changeStateAsync(ListeningState state)
        {
            if (listeningState != state)
            {
                System.Diagnostics.Debug.WriteLine($"Changing CommandInterpreter listening state to {state}");

                if (state == ListeningState.Hypothesis)
                {
                    preHypothesisListeningState = listeningState;
                }

                listeningState = state;

                await listener.StopListeningAsync();

                switch (state)
                {
                case ListeningState.Move:
                    SpeechConstraints.EnableGrammar(recognizer.Constraints, GrammarMode.MoveCommands, true);
                    SpeechConstraints.EnableGrammar(recognizer.Constraints, GrammarMode.PieceConfirmation, false);
                    SpeechConstraints.EnableGrammar(recognizer.Constraints, GrammarMode.YesNoCommands, false);
                    SpeechConstraints.EnableGrammar(recognizer.Constraints, GrammarMode.CancelCommand, false);
                    break;

                case ListeningState.PieceConfirmation:
                    SpeechConstraints.EnableGrammar(recognizer.Constraints, GrammarMode.PieceConfirmation, true);
                    SpeechConstraints.EnableGrammar(recognizer.Constraints, GrammarMode.MoveCommands, false);
                    SpeechConstraints.EnableGrammar(recognizer.Constraints, GrammarMode.YesNoCommands, false);
                    SpeechConstraints.EnableGrammar(recognizer.Constraints, GrammarMode.CancelCommand, true);
                    break;

                case ListeningState.Hypothesis:
                    SpeechConstraints.EnableGrammar(recognizer.Constraints, GrammarMode.YesNoCommands, true);
                    SpeechConstraints.EnableGrammar(recognizer.Constraints, GrammarMode.MoveCommands, false);
                    SpeechConstraints.EnableGrammar(recognizer.Constraints, GrammarMode.PieceConfirmation, false);
                    SpeechConstraints.EnableGrammar(recognizer.Constraints, GrammarMode.CancelCommand, true);
                    break;

                default:
                    await listener.StartListeningAsync();

                    throw new Exception("Tried to change CommandInterpreter state to an unknown listening state");
                }

                await listener.StartListeningAsync();
            }
        }