diff --git a/bob/io/image/cpp/image.cpp b/bob/io/image/cpp/image.cpp
index e56ccf432d58accf468fbe56841319a7620bfbb4..95b6328b968451d58b58d461e7046e7d3a356672 100644
--- a/bob/io/image/cpp/image.cpp
+++ b/bob/io/image/cpp/image.cpp
@@ -11,48 +11,50 @@
 
 namespace bob { namespace io { namespace image {
 
-const std::string& get_correct_image_extension(const std::string& image_name){
-  // global map of known magic numbers
+static std::map<std::string, std::vector<std::vector<std::uint8_t>>> _initialize_magic_numbers(){
   // these numbers are based on: http://stackoverflow.com/questions/26350342/determining-the-extension-type-of-an-image-file-using-binary/26350431#26350431
-  static std::map<std::string, std::vector<std::vector<std::uint8_t>>> known_magic_numbers;
-
-  // initialize list, if not done yet
-  if (known_magic_numbers.empty()){
-    // BMP
-    known_magic_numbers[".bmp"].push_back({ 0x42, 0x4D });
-    // NetPBM, see https://en.wikipedia.org/wiki/Netpbm_format
-    known_magic_numbers[".pbm"].push_back({ 0x50, 0x31 });// P1
-    known_magic_numbers[".pbm"].push_back({ 0x50, 0x34 });// P4
-    known_magic_numbers[".pgm"].push_back({ 0x50, 0x32 });// P2
-    known_magic_numbers[".pgm"].push_back({ 0x50, 0x35 });// P5
-    known_magic_numbers[".ppm"].push_back({ 0x50, 0x33 });// P3
-    known_magic_numbers[".ppm"].push_back({ 0x50, 0x36 });// P6
-    // TODO: what about P7?
+  std::map<std::string, std::vector<std::vector<std::uint8_t>>> magic_numbers;
+  // BMP
+  magic_numbers[".bmp"].push_back({ 0x42, 0x4D });
+  // NetPBM, see https://en.wikipedia.org/wiki/Netpbm_format
+  magic_numbers[".pbm"].push_back({ 0x50, 0x31 });// P1
+  magic_numbers[".pbm"].push_back({ 0x50, 0x34 });// P4
+  magic_numbers[".pgm"].push_back({ 0x50, 0x32 });// P2
+  magic_numbers[".pgm"].push_back({ 0x50, 0x35 });// P5
+  magic_numbers[".ppm"].push_back({ 0x50, 0x33 });// P3
+  magic_numbers[".ppm"].push_back({ 0x50, 0x36 });// P6
+  // TODO: what about P7?
 
 #ifdef HAVE_GIFLIB
-    // GIF
-    known_magic_numbers[".gif"].push_back({ 0x47, 0x49, 0x46, 0x38, 0x37, 0x61 });
-    known_magic_numbers[".gif"].push_back({ 0x47, 0x49, 0x46, 0x38, 0x39, 0x61 });
+  // GIF
+  magic_numbers[".gif"].push_back({ 0x47, 0x49, 0x46, 0x38, 0x37, 0x61 });
+  magic_numbers[".gif"].push_back({ 0x47, 0x49, 0x46, 0x38, 0x39, 0x61 });
 #endif // HAVE_GIFLIB
 #ifdef HAVE_LIBPNG
-    // PNG
-    known_magic_numbers[".png"].push_back({ 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A });
+  // PNG
+  magic_numbers[".png"].push_back({ 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A });
 #endif // HAVE_LIB_PNG
 #ifdef HAVE_LIBJPEG
-    // JPEG
-    known_magic_numbers[".jpg"].push_back({ 0xFF, 0xD8, 0xFF });
-    known_magic_numbers[".jpg"].push_back({ 0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20 });
+  // JPEG
+  magic_numbers[".jpg"].push_back({ 0xFF, 0xD8, 0xFF });
+  magic_numbers[".jpg"].push_back({ 0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20 });
 #endif // HAVE_LIBJPEG
 #ifdef HAVE_LIBTIFF
-    // TIFF
-    known_magic_numbers[".tiff"].push_back({ 0x0C, 0xED });
-    known_magic_numbers[".tiff"].push_back({ 0x49, 0x20, 0x49 });
-    known_magic_numbers[".tiff"].push_back({ 0x49, 0x49, 0x2A, 0x00 });
-    known_magic_numbers[".tiff"].push_back({ 0x4D, 0x4D, 0x00, 0x2A });
-    known_magic_numbers[".tiff"].push_back({ 0x4D, 0x4D, 0x00, 0x2B });
+  // TIFF
+  magic_numbers[".tiff"].push_back({ 0x0C, 0xED });
+  magic_numbers[".tiff"].push_back({ 0x49, 0x20, 0x49 });
+  magic_numbers[".tiff"].push_back({ 0x49, 0x49, 0x2A, 0x00 });
+  magic_numbers[".tiff"].push_back({ 0x4D, 0x4D, 0x00, 0x2A });
+  magic_numbers[".tiff"].push_back({ 0x4D, 0x4D, 0x00, 0x2B });
 #endif // HAVE_LIBTIFF
-  }
+  return magic_numbers;
+}
 
+// global static thread-safe map of known magic numbers
+static std::map<std::string, std::vector<std::vector<std::uint8_t>>> known_magic_numbers = _initialize_magic_numbers();
+
+
+const std::string& get_correct_image_extension(const std::string& image_name){
   // read first 8 bytes from file
   static uint8_t image_bytes[8];
   std::ifstream f(image_name);