}
        // R-block (ack)
        else if ( ((cmd[0] & 0xD0) == 0x80) && ( cmdsize > 2) ) {
-               snprintf(exp, size, "R-block");
+               if ( (cmd[0] & 0x10) == 0 ) 
+                       snprintf(exp, size, "R-block ACK");
+               else
+                       snprintf(exp, size, "R-block NACK");
        }
        // I-block
        else {
 
 static int CmdHelp(const char *Cmd);
 static int CmdQuit(const char *Cmd);
 static int CmdRev(const char *Cmd);
+static int CmdLS(const char *Cmd);
 
 //For storing command that are received from the device
 static UsbCommand cmdBuffer[CMD_BUFFER_SIZE];
 static command_t CommandTable[] = 
 {
        {"help",        CmdHelp,        1, "This help. Use '<command> help' for details of a particular command."},
+       {"ls",          CmdLS,          1, "list commands"},
        {"data",        CmdData,        1, "{ Plot window / data buffer manipulation... }"},
        {"hf",          CmdHF,          1, "{ High Frequency commands... }"},
        {"hw",          CmdHW,          1, "{ Hardware commands... }"},
        {"lf",          CmdLF,          1, "{ Low Frequency commands... }"},
-  {"reveng",CmdRev,   1, "Crc calculations from the software reveng1-30"},
+       {"reveng",      CmdRev,         1, "Crc calculations from the software reveng 1.30"},
        {"script",      CmdScript,      1, "{ Scripting commands }"},
        {"quit",        CmdQuit,        1, "Exit program"},
        {"exit",        CmdQuit,        1, "Exit program"},
   CmdsHelp(CommandTable);
   return 0;
 }
+int CmdLS(const char *Cmd){
+       CmdsLS(CommandTable);
+       return 0;
+}
 
 int CmdQuit(const char *Cmd)
 {
 
   }
 }
 
+void CmdsLS(const command_t Commands[])
+{
+  if (Commands[0].Name == NULL) return;
+  int i = 0;
+  while (Commands[i].Name)
+  {
+    if (!offline || Commands[i].Offline)
+       PrintAndLog("%-16s", Commands[i].Name);
+    ++i;
+  }
+}
+
 void CmdsParse(const command_t Commands[], const char *Cmd)
 {
   if(strcmp( Cmd, "XX_internal_command_dump_XX") == 0)
 
 
 // Print help for each command in the command array
 void CmdsHelp(const command_t Commands[]);
+// Print each command in the command array without help
+void CmdsLS(const command_t Commands[]);
 // Parse a command line
 void CmdsParse(const command_t Commands[], const char *Cmd);
 void dumpCommandsRecursive(const command_t cmds[], int markdown);