diff --git a/CMakeModules/FindConex.cmake b/CMakeModules/FindConex.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..6eeedb5a7fba7465aa246e7d9c06b0c1a14a554b
--- /dev/null
+++ b/CMakeModules/FindConex.cmake
@@ -0,0 +1,100 @@
+# - find Conex
+#
+# This module defines
+# CONEX_FOUND
+# CONEX_ROOT_DIR
+# CONEX_INCLUDE_DIR
+
+FIND_PATH (CONEX_ROOT_DIR
+  NAMES lib/${CMAKE_SYSTEM_NAME}
+  PATHS $ENV{CONEXROOT}
+  DOC "The CONEX root directory"
+  NO_DEFAULT_PATH
+)
+
+FIND_PATH (CONEX_INCLUDE_DIR
+  NAMES ConexDynamicInterface.h
+  PATHS ${CONEX_ROOT_DIR}/src
+  DOC "The CONEX include directory"
+)
+
+IF (CONEX_INCLUDE_DIR)
+  SET (CONEX_FOUND TRUE)
+  ADD_DEFINITIONS (-D_CONEX_PREFIX=\"${CONEX_ROOT_DIR}\" -D_CONEX_SYSTEM=\"${CMAKE_SYSTEM_NAME}\")
+  IF (NOT Conex_FIND_QUIETLY)
+    MESSAGE (STATUS "Conex include directory is ${CONEX_INCLUDE_DIR}")
+  ENDIF ()
+  SET (CMAKE_REQUIRED_INCLUDES ${CONEX_INCLUDE_DIR})
+  CHECK_CXX_SOURCE_COMPILES (
+    "
+    #include <conexHEModels.h>
+    
+    int 
+    main() 
+    { 
+      EHEModel test = eSibyll23; 
+      if (test == eSibyll23) return 0;
+      return 0; 
+    }
+    " 
+    HAS_SIBYLL23
+  )  
+  CHECK_CXX_SOURCE_COMPILES (
+    "
+    #include <conexHEModels.h>
+    
+    int 
+    main() 
+    { 
+      EHEModel test = eEposLHC; 
+      if (test == eEposLHC) return 0;
+      return 0; 
+    }
+    " 
+    HAS_EPOS_LHC
+  )
+  CHECK_CXX_SOURCE_COMPILES (
+    "
+    #include <ConexDynamicInterface.h>
+    #include <ConexDynamicInterface.cc>
+    int 
+    main() 
+    {
+      ConexDynamicInterface cdi(eSibyll23);
+      cdi.GetLeadingInteractionsParticleData();
+      return 0; 
+    }
+    " 
+    HAS_LEADINGINTERACTION_INTERFACE
+  )
+  IF (HAS_LEADINGINTERACTION_INTERFACE)
+     # at least conex2r5.65
+     ADD_DEFINITIONS (-D_CONEX2R_VERSION=565)
+     IF (NOT Conex_FIND_QUIETLY)
+       MESSAGE (STATUS "Conex has interface to leading interactions. Set _CONEX2R_VERSION=565.")
+     ENDIF ()
+  ELSEIF (HAS_SIBYLL23)
+     # at least conex2r5.30
+     ADD_DEFINITIONS (-D_CONEX2R_VERSION=530)
+     IF (NOT Conex_FIND_QUIETLY)
+       MESSAGE (STATUS "Conex has SIBYLL2.3. Set _CONEX2R_VERSION=530.")
+     ENDIF ()
+  ELSEIF (HAS_EPOS_LHC)
+     # at least conex2r4.36
+     ADD_DEFINITIONS (-D_CONEX2R_VERSION=436)
+     IF (NOT Conex_FIND_QUIETLY)
+       MESSAGE (STATUS "Conex has EPOS-LHC. Set _CONEX2R_VERSION=436.")
+     ENDIF ()
+  ELSE ()
+     # pre LHC
+     ADD_DEFINITIONS (-D_CONEX2R_VERSION=300)     
+     IF (NOT Conex_FIND_QUIETLY)
+       MESSAGE (STATUS "Conex is pre-LHC. Set _CONEX2R_VERSION=300.")
+     ENDIF ()
+  ENDIF ()
+ELSE ()
+  SET (CONEX_FOUND FALSE)
+  IF (Conex_FIND_REQUIRED)
+    MESSAGE (FATAL_ERROR "Could not find Conex!")
+  ENDIF ()
+ENDIF ()