diff --git a/VendServer/MIFAREDriver.py b/VendServer/MIFAREDriver.py
index b28c5915dab9ba082e42c2f44fab2a3341ae4c02..a52a89115883b8d18f6574f805625ee3d8515995 100644
--- a/VendServer/MIFAREDriver.py
+++ b/VendServer/MIFAREDriver.py
@@ -101,8 +101,14 @@ class MIFAREReader:
         card_type = card_type_response[3:5]
 
         if card_type == '\x44\x00': # MIFARE UltraLight
-            raise NotImplementedError, "UltraLight card selected - no functions available"
-
+            #raise NotImplementedError, "UltraLight card selected - no functions available"
+            # HACK by JAH: The response format isn't fully known yet (official driver reads 7 bytes from offset +9 in the raw response)
+            # - This code effectively reads all bytes after +9 (AA, BB, len, and three skilled by `send_packet`, then three skipped here)
+            # - Official driver has `AA` bytes followed by `00` (encoded/decoded)
+            command = '\x12\x02'
+            serial = self.send_packet(command)[3:]
+            capacity = 0
+            return (serial, capacity)
         else:
         # Otherwise, must be a standard MIFARE card.
             # Anticollision
@@ -112,11 +118,11 @@ class MIFAREReader:
 
             # Select the card for use
             try:
-	        select_response = self.send_packet('\x03\x02' + serial)
-	        capacity = ord(select_response[3])
+                select_response = self.send_packet('\x03\x02' + serial)
+                capacity = ord(select_response[3])
             except IndexError:
-	        logging.warning('Tried to select card but failed: card_type %s, serial %s, select_response %s' % (card_type.__repr__(), serial.__repr__(), select_response.__repr__()))
-		capacity = 0
+                logging.warning('Tried to select card but failed: card_type %s, serial %s, select_response %s' % (card_type.__repr__(), serial.__repr__(), select_response.__repr__()))
+                capacity = 0
             return (serial, capacity)
 
     def sector_login(self, blockvect, key, keytype=0):