+       uint8_t csn_crc[] = { 0x03, 0x1f, 0xec, 0x8a, 0xf7, 0xff, 0x12, 0xe0, 0x00, 0x00 };
+
+       if(simType == 0) {
+               // Use the CSN from commandline
+               memcpy(csn_crc, datain, 8);
+               doIClassSimulation(csn_crc,0);
+       }else if(simType == 1)
+       {
+               doIClassSimulation(csn_crc,0);
+       }
+       else if(simType == 2)
+       {
+               // In this mode, a number of csns are within datain. We'll simulate each one, one at a time
+               // in order to collect MAC's from the reader. This can later be used in an offlne-attack
+               // in order to obtain the keys, as in the "dismantling iclass"-paper.
+               for(int i = 0 ; i < numberOfCSNS && i*8+8 < USB_CMD_DATA_SIZE; i++)
+               {
+                       // The usb data is 512 bytes, fitting 65 8-byte CSNs in there.
+
+                       memcpy(csn_crc, datain+(i*8), 8);
+                       doIClassSimulation(csn_crc,1);
+               }
+       }else{
+               // We may want a mode here where we hardcode the csns to use (from proxclone).
+               // That will speed things up a little, but not required just yet.
+               Dbprintf("The mode is not implemented, reserved for future use");
+       }
+
+}
+/**
+ * @brief Does the actual simulation
+ * @param csn - csn to use
+ * @param breakAfterMacReceived if true, returns after reader MAC has been received.
+ */
+void doIClassSimulation(uint8_t csn[], int breakAfterMacReceived)
+{