diff --git a/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c b/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c
index d5bac5f7f4..8698e4a02c 100644
--- a/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c
+++ b/src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c
@@ -3155,15 +3155,19 @@ static switch_status_t recog_asr_disable_all_grammars(switch_asr_handle_t *ah)
 static switch_status_t recog_asr_close(switch_asr_handle_t *ah, switch_asr_flag_t *flags)
 {
 	speech_channel_t *schannel = (speech_channel_t *) ah->private_info;
-	recognizer_data_t *r = (recognizer_data_t *) schannel->data;
-	speech_channel_stop(schannel);
-	speech_channel_destroy(schannel);
-	switch_core_hash_destroy(&r->grammars);
-	switch_core_hash_destroy(&r->enabled_grammars);
-	if (r->dtmf_generator) {
-		mpf_dtmf_generator_destroy(r->dtmf_generator);
-	}
+	recognizer_data_t *r = NULL;
 
+	/* close if not already closed */
+	if (schannel != NULL && !switch_test_flag(ah, SWITCH_ASR_FLAG_CLOSED)) {
+		r = (recognizer_data_t *) schannel->data;
+		speech_channel_stop(schannel);
+		speech_channel_destroy(schannel);
+		switch_core_hash_destroy(&r->grammars);
+		switch_core_hash_destroy(&r->enabled_grammars);
+		if (r->dtmf_generator) {
+			mpf_dtmf_generator_destroy(r->dtmf_generator);
+		}
+	}
 	/* this lets FreeSWITCH's speech_thread know the handle is closed */
 	switch_set_flag(ah, SWITCH_ASR_FLAG_CLOSED);