diff --git a/client/src/cmdhf.c b/client/src/cmdhf.c
index 6fd9faaac..714847623 100644
--- a/client/src/cmdhf.c
+++ b/client/src/cmdhf.c
@@ -90,6 +90,8 @@ int CmdHFSearch(const char *Cmd) {
         if (infoHF14A(false, false, false) > 0) {
             PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("ISO 14443-A tag") " found\n");
             res = PM3_SUCCESS;
+            
+            infoHF14A4Applications();
         }
     }
 
@@ -129,15 +131,6 @@ int CmdHFSearch(const char *Cmd) {
         }
     }
 
-    PROMPT_CLEARLINE;
-    PrintAndLogEx(INPLACE, " Searching for Cipurse tag...");
-    if (IfPm3Iso14443a()) {
-        if (CheckCardCipurse()) {
-            PrintAndLogEx(SUCCESS, "\nValid " _GREEN_("Cipurse tag") " found\n");
-            res = PM3_SUCCESS;
-        }
-    }
-
     // 14b is the longest test
     PROMPT_CLEARLINE;
     PrintAndLogEx(INPLACE, " Searching for ISO14443-B tag...");
diff --git a/client/src/cmdhf14a.c b/client/src/cmdhf14a.c
index 6396323ca..5f971abe2 100644
--- a/client/src/cmdhf14a.c
+++ b/client/src/cmdhf14a.c
@@ -169,6 +169,17 @@ const char *getTagInfo(uint8_t uid) {
     return manufactureMapping[ARRAYLEN(manufactureMapping) - 1].desc;
 }
 
+static const hintAIDListT hintAIDList[] = {
+    // AID, AID len, name, hint - how to use
+    { "\xA0\x00\x00\x06\x47\x2F\x00\x01", 8, "FIDO", "try hf fido commands" },
+    { "\xA0\x00\x00\x03\x08\x00\x00\x10\x00\x01\x00", 11, "PIV", "" },
+    { "\xD2\x76\x00\x01\x24\x01", 8, "OpenPGP", "" },
+    { "\x31\x50\x41\x59\x2E\x53\x59\x53\x2E\x44\x44\x46\x30\x31 (pse)", 14, "EMV", "try hf emv commands" },
+    { "\x32\x50\x41\x59\x2E\x53\x59\x53\x2E\x44\x44\x46\x30\x31 (ppse)", 14, "EMV", "try hf emv commands" },
+    { "\x41\x44\x20\x46\x31", 5, "CIPURSE", "try hf cipurse commands" },
+    { "\xd2\x76\x00\x00\x85\x01\x00", 7, "desfire", "try hf mfdes commands" },
+};
+
 // iso14a apdu input frame length
 static uint16_t frameLength = 0;
 uint16_t atsFSC[] = {16, 24, 32, 40, 48, 64, 96, 128, 256};
@@ -865,7 +876,7 @@ int SelectCard14443A_4(bool disconnect, iso14a_card_select_t *card) {
 
     // check result
     if (resp.oldarg[0] == 0) {
-        PrintAndLogEx(ERR, "No card in field");
+        PrintAndLogEx(ERR, "No card in fieldxx");
         return PM3_ECARDEXCHANGE;
     }
 
@@ -2131,6 +2142,41 @@ int infoHF14A(bool verbose, bool do_nack_test, bool do_aid_search) {
     return select_status;
 }
 
+int infoHF14A4Applications(void) {
+    bool ActivateField = true;
+    bool found = false;
+    for (int i = 0; i < ARRAYLEN(hintAIDList); i++) {
+        uint16_t sw = 0;
+        uint8_t result[1024] = {0};
+        size_t resultlen = 0;
+        int res = Iso7816Select(CC_CONTACTLESS, ActivateField, true, (uint8_t *)hintAIDList[i].aid, hintAIDList[i].aid_length, result, sizeof(result), &resultlen, &sw);
+        ActivateField = false;
+        if (res)
+            continue;
+
+        if (sw == 0x9000 || sw == 0x6283 || sw == 0x6285) {
+            if (!found) {
+                PrintAndLogEx(INFO, "----------------- " _CYAN_("Short AID search") " -----------------");
+                found = true;
+            }
+            
+            if (sw == 0x9000) {
+                PrintAndLogEx(SUCCESS, "Application " _CYAN_("%s") " ( " _GREEN_("ok") " )", hintAIDList[i].desc);
+                if (strlen(hintAIDList[i].hint))
+                    PrintAndLogEx(INFO, "%s", hintAIDList[i].hint);
+            } else {
+                PrintAndLogEx(WARNING, "Application " _CYAN_("%s") " ( " _RED_("blocked") " )", hintAIDList[i].desc);
+            }
+        }
+    }
+
+    if (found)
+        PrintAndLogEx(INFO, "---------------------------------------------------");
+
+    DropField();
+    return found;
+}
+
 static uint16_t get_sw(uint8_t *d, uint8_t n) {
     if (n < 2) {
         return 0;
diff --git a/client/src/cmdhf14a.h b/client/src/cmdhf14a.h
index 874a073c5..c9d98cff1 100644
--- a/client/src/cmdhf14a.h
+++ b/client/src/cmdhf14a.h
@@ -22,6 +22,13 @@ typedef struct {
     const char *desc;
 } manufactureName;
 
+typedef struct {
+    const char *aid;
+    const uint8_t aid_length;
+    const char *desc;
+    const char *hint;
+} hintAIDListT;
+
 int CmdHF14A(const char *Cmd);
 int CmdHF14ASniff(const char *Cmd); // used by hf topaz sniff
 int CmdHF14ASim(const char *Cmd);   // used by hf mfu sim
@@ -30,6 +37,7 @@ int CmdHF14ANdefRead(const char *Cmd);
 int hf14a_getconfig(hf14a_config *config);
 int hf14a_setconfig(hf14a_config *config, bool verbose);
 int infoHF14A(bool verbose, bool do_nack_test, bool do_aid_search);
+int infoHF14A4Applications(void);
 const char *getTagInfo(uint8_t uid);
 int Hf14443_4aGetCardData(iso14a_card_select_t *card);
 int ExchangeAPDU14a(uint8_t *datain, int datainlen, bool activateField, bool leaveSignalON, uint8_t *dataout, int maxdataoutlen, int *dataoutlen);