if (param_gethex(Cmd, 0, uid, 10)) {
                PrintAndLog("UID must include 10 HEX symbols");
                return 0;
        }
 
        if (param_gethex(Cmd, 0, uid, 10)) {
                PrintAndLog("UID must include 10 HEX symbols");
                return 0;
        }
-       PrintAndLog("Starting simulating UID %02X%02X%02X%02X%02X", uid[0],uid[1],uid[2],uid[3],uid[4]);
+       PrintAndLog("Starting simulating UID %02X%02X%02X%02X%02X  clock: %d", uid[0],uid[1],uid[2],uid[3],uid[4],clock);
 
        sscanf(Cmd, "%" PRIx64 " %d %d", &id, &card, &clock);
 
 
        sscanf(Cmd, "%" PRIx64 " %d %d", &id, &card, &clock);
 
-               // Allowed clock rates: 16, 32 and 64
-               if ((clock != 16) && (clock != 32) && (clock != 64)) {
-                       PrintAndLog("Error! Clock rate %d not valid. Supported clock rates are 16, 32 and 64.\n", clock);
-                       return 0;
-               }
-       }
-       else if (clock != 0)
-       {
-               PrintAndLog("Error! Clock rate is only supported on T55x7 tags.\n");
+       // Allowed clock rates: 16, 32, 40 and 64
+       if ((clock != 16) && (clock != 32) && (clock != 64) && (clock != 40)) {
+               PrintAndLog("Error! Clock rate %d not valid. Supported clock rates are 16, 32, 40 and 64.\n", clock);
                //   provide for backwards-compatibility for older firmware, and to avoid
                //   having to add another argument to CMD_EM410X_WRITE_TAG, we just store
                //   the clock rate in bits 8-15 of the card value
                //   provide for backwards-compatibility for older firmware, and to avoid
                //   having to add another argument to CMD_EM410X_WRITE_TAG, we just store
                //   the clock rate in bits 8-15 of the card value
                PrintAndLog("Writing %s tag with UID 0x%010" PRIx64, "T5555", id, clock);
                PrintAndLog("Writing %s tag with UID 0x%010" PRIx64, "T5555", id, clock);
                PrintAndLog("Error! Bad card type selected.\n");
                return 0;
        }
 
        UsbCommand c = {CMD_EM410X_WRITE_TAG, {card, (uint32_t)(id >> 32), (uint32_t)id}};
        SendCommand(&c);
                PrintAndLog("Error! Bad card type selected.\n");
                return 0;
        }
 
        UsbCommand c = {CMD_EM410X_WRITE_TAG, {card, (uint32_t)(id >> 32), (uint32_t)id}};
        SendCommand(&c);
        } else if (start < 0) return 0;
        start = skip;
        snprintf(tmp2, sizeof(tmp2),"%d %d 1000 %d", clk, invert, clk*47);
        } else if (start < 0) return 0;
        start = skip;
        snprintf(tmp2, sizeof(tmp2),"%d %d 1000 %d", clk, invert, clk*47);
                PrintAndLog("Found data at sample: %i - using clock: %i", start, clk);    
                end = block;
                for (block=0; block < end; block++){
                        PrintAndLog("Block %d: %08x",block,Code[block]);
                }
                PrintAndLog("Found data at sample: %i - using clock: %i", start, clk);    
                end = block;
                for (block=0; block < end; block++){
                        PrintAndLog("Block %d: %08x",block,Code[block]);
                }
 {
        {"help", CmdHelp, 1, "This help"},
        {"em410xdemod", CmdEMdemodASK, 0, "[findone] -- Extract ID from EM410x tag (option 0 for continuous loop, 1 for only 1 tag)"},  
 {
        {"help", CmdHelp, 1, "This help"},
        {"em410xdemod", CmdEMdemodASK, 0, "[findone] -- Extract ID from EM410x tag (option 0 for continuous loop, 1 for only 1 tag)"},  
-       {"em410xread", CmdEM410xRead, 1, "[clock rate] -- Extract ID from EM410x tag"},
+       {"em410xread", CmdEM410xRead, 1, "[clock rate] -- Extract ID from EM410x tag in GraphBuffer"},
        {"em410xsim", CmdEM410xSim, 0, "<UID> -- Simulate EM410x tag"},
        {"em410xwatch", CmdEM410xWatch, 0, "['h'] -- Watches for EM410x 125/134 kHz tags (option 'h' for 134)"},
        {"em410xspoof", CmdEM410xWatchnSpoof, 0, "['h'] --- Watches for EM410x 125/134 kHz tags, and replays them. (option 'h' for 134)" },
        {"em410xsim", CmdEM410xSim, 0, "<UID> -- Simulate EM410x tag"},
        {"em410xwatch", CmdEM410xWatch, 0, "['h'] -- Watches for EM410x 125/134 kHz tags (option 'h' for 134)"},
        {"em410xspoof", CmdEM410xWatchnSpoof, 0, "['h'] --- Watches for EM410x 125/134 kHz tags, and replays them. (option 'h' for 134)" },
-       {"em410xwrite", CmdEM410xWrite, 1, "<UID> <'0' T5555> <'1' T55x7> [clock rate] -- Write EM410x UID to T5555(Q5) or T55x7 tag, optionally setting clock rate"},
+       {"em410xwrite", CmdEM410xWrite, 0, "<UID> <'0' T5555> <'1' T55x7> [clock rate] -- Write EM410x UID to T5555(Q5) or T55x7 tag, optionally setting clock rate"},
        {"em4x50read", CmdEM4x50Read, 1, "Extract data from EM4x50 tag"},
        {"readword", CmdReadWord, 1, "<Word> -- Read EM4xxx word data"},
        {"readwordPWD", CmdReadWordPWD, 1, "<Word> <Password> -- Read EM4xxx word data in password mode"},
        {"em4x50read", CmdEM4x50Read, 1, "Extract data from EM4x50 tag"},
        {"readword", CmdReadWord, 1, "<Word> -- Read EM4xxx word data"},
        {"readwordPWD", CmdReadWordPWD, 1, "<Word> <Password> -- Read EM4xxx word data in password mode"},