diff --git a/bootloader/crc_patch.py b/bootloader/crc_patch.py
index 59ec6befb14a5dc625139e8042363ce2ac86f3ed..4ba61e8e93c2360a82ca4990a807f21bf19b44df 100755
--- a/bootloader/crc_patch.py
+++ b/bootloader/crc_patch.py
@@ -1,16 +1,29 @@
 #!/usr/bin/env python3
 import sys
-import crc16
+
+try:
+    import crc16
+    crcfun = crc16.crc16xmodem
+except ImportError:
+    try:
+        import crcmod
+        crcfun = crcmod.predefined.mkCrcFun('xmodem')
+    except ImportError:
+        try:
+            import crcelk
+            crcfun = crcelk.CRC_XMODEM.calc_bytes
+        except ImportError:
+            raise Exception('Could not find a CRC implementation. Tried: crc16, crcmod, crcelk.')
 
 
 def main():
     data = open(sys.argv[1], 'rb').read()
-    crc = crc16.crc16xmodem(data)
+    crc = crcfun(data)
     # print(crc)
 
     padded = data + bytes([crc >> 8, crc & 0xFF])
 
-    crc = crc16.crc16xmodem(padded)
+    crc = crcfun(padded)
     # print(crc)
 
     open(sys.argv[1], 'wb').write(padded)