diff --git a/stack/smp/smp_api.cc b/stack/smp/smp_api.cc
index ff8cdf5..f2c7ed8 100644
--- a/stack/smp/smp_api.cc
+++ b/stack/smp/smp_api.cc
@@ -249,37 +249,42 @@
 void SMP_SecurityGrant(const RawAddress& bd_addr, uint8_t res) {
   SMP_TRACE_EVENT("SMP_SecurityGrant ");
 
-  // If JUSTWORKS, this is used to display the consent dialog
-  if (smp_cb.selected_association_model == SMP_MODEL_SEC_CONN_JUSTWORKS) {
-    if (res == SMP_SUCCESS) {
-      smp_sm_event(&smp_cb, SMP_SC_NC_OK_EVT, NULL);
-    } else {
-      SMP_TRACE_WARNING("%s() - Consent dialog fails for JUSTWORKS", __func__);
-      /* send pairing failure */
-      tSMP_INT_DATA smp_int_data;
-      smp_int_data.status = SMP_NUMERIC_COMPAR_FAIL;
-      smp_sm_event(&smp_cb, SMP_AUTH_CMPL_EVT, &smp_int_data);
-    }
-  } else if (smp_cb.selected_association_model == SMP_MODEL_ENCRYPTION_ONLY) {
-    if (res == SMP_SUCCESS) {
-      smp_cb.sec_level = SMP_SEC_UNAUTHENTICATE;
+  // If just showing consent dialog, send response
+  if (smp_cb.cb_evt == SMP_CONSENT_REQ_EVT) {
+    // If JUSTWORKS, this is used to display the consent dialog
+    if (smp_cb.selected_association_model == SMP_MODEL_SEC_CONN_JUSTWORKS) {
+      if (res == SMP_SUCCESS) {
+        smp_sm_event(&smp_cb, SMP_SC_NC_OK_EVT, NULL);
+      } else {
+        SMP_TRACE_WARNING("%s() - Consent dialog fails for JUSTWORKS",
+                          __func__);
+        /* send pairing failure */
+        tSMP_INT_DATA smp_int_data;
+        smp_int_data.status = SMP_NUMERIC_COMPAR_FAIL;
+        smp_sm_event(&smp_cb, SMP_AUTH_CMPL_EVT, &smp_int_data);
+      }
+    } else if (smp_cb.selected_association_model == SMP_MODEL_ENCRYPTION_ONLY) {
+      if (res == SMP_SUCCESS) {
+        smp_cb.sec_level = SMP_SEC_UNAUTHENTICATE;
 
-      tSMP_KEY key;
-      tSMP_INT_DATA smp_int_data;
-      key.key_type = SMP_KEY_TYPE_TK;
-      key.p_data = smp_cb.tk.data();
-      smp_int_data.key = key;
+        tSMP_KEY key;
+        tSMP_INT_DATA smp_int_data;
+        key.key_type = SMP_KEY_TYPE_TK;
+        key.p_data = smp_cb.tk.data();
+        smp_int_data.key = key;
 
-      smp_cb.tk = {0};
-      smp_sm_event(&smp_cb, SMP_KEY_READY_EVT, &smp_int_data);
-    } else {
-      SMP_TRACE_WARNING("%s() - Consent dialog fails for ENCRYPTION_ONLY",
-                        __func__);
-      /* send pairing failure */
-      tSMP_INT_DATA smp_int_data;
-      smp_int_data.status = SMP_NUMERIC_COMPAR_FAIL;
-      smp_sm_event(&smp_cb, SMP_AUTH_CMPL_EVT, &smp_int_data);
+        smp_cb.tk = {0};
+        smp_sm_event(&smp_cb, SMP_KEY_READY_EVT, &smp_int_data);
+      } else {
+        SMP_TRACE_WARNING("%s() - Consent dialog fails for ENCRYPTION_ONLY",
+                          __func__);
+        /* send pairing failure */
+        tSMP_INT_DATA smp_int_data;
+        smp_int_data.status = SMP_NUMERIC_COMPAR_FAIL;
+        smp_sm_event(&smp_cb, SMP_AUTH_CMPL_EVT, &smp_int_data);
+      }
     }
+    return;
   }
 
   if (smp_cb.smp_over_br) {
