diff --git a/CMake/FindShark.cmake b/CMake/FindShark.cmake
index faa16a352270c170af4234413c379d5c2ba42574..6ecdec4aa585944f719222de0c044117a20bc06d 100644
--- a/CMake/FindShark.cmake
+++ b/CMake/FindShark.cmake
@@ -97,11 +97,24 @@ if(SHARK_CONFIG_FILE)
   "${SHARK_VERSION_MAJOR}.${SHARK_VERSION_MINOR}.${SHARK_VERSION_PATCH}")
 endif()
 
+# reset required flags
+set(SHARK_REQUIRED_C_FLAGS "")
+set(SHARK_REQUIRED_CXX_FLAGS "")
+set(SHARK_REQUIRED_LINK_FLAGS "")
+
 # Check if Shark was built with OpenMP, CBLAS, DYNLIB, ...
 file(STRINGS "${SHARK_INCLUDE_DIR}/shark/Core/Shark.h" SHARK_H_CONTENTS)
 
 if(SHARK_H_CONTENTS MATCHES "#define.SHARK_USE_OPENMP")
   set(SHARK_USE_OPENMP 1)
+  find_package(OpenMP QUIET)
+  if(OPENMP_FOUND)
+    set(SHARK_REQUIRED_C_FLAGS "${SHARK_REQUIRED_C_FLAGS} ${OpenMP_C_FLAGS}")
+    set(SHARK_REQUIRED_CXX_FLAGS "${SHARK_REQUIRED_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+    if(OpenMP_EXE_LINKER_FLAGS)
+      set(SHARK_REQUIRED_LINK_FLAGS "${SHARK_REQUIRED_LINK_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
+    endif()
+  endif()
 else()
   set(SHARK_USE_OPENMP 0)
 endif()
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0cd6bd3281880893e061f33a5ed66b7c9dd6ff5b..51a796d3321286ffffe70f455b66982f06fd2222 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -233,7 +233,14 @@ endif()
 option(OTB_USE_DEPRECATED "Turn on the use and test of deprecated classes" OFF)
 mark_as_advanced(OTB_USE_DEPRECATED)
 
+# Although the OpenMP option looks like a 3rd party module, it is NOT. This option
+# is handled with other compilation flags in file OTBSetStandardCompilerFlags.cmake
+# before any module is parsed or enabled (see OTBModuleEnablement.cmake later on
+# during configure). Trying to modify this option from any module is
+# useless. Any 3rd party module dragging OpenMP should append
+# the corresponding flags to CMAKE_CXX_FLAGS, CMAKE_EXE_LINKER_FLAGS, and so on.
 option(OTB_USE_OPENMP "Add openmp compiler and linker flags" OFF)
+
 option(OTB_USE_SSE_FLAGS "Enable SIMD optimizations (hardware dependent)." ON)
 
 include(OTBSetStandardCompilerFlags)
diff --git a/Modules/ThirdParty/Shark/otb-module-init.cmake b/Modules/ThirdParty/Shark/otb-module-init.cmake
index d8b45e1eab7bffee1d8f65618e7d54ae9ac80709..21a8b2f1030f81b2043d0d1eea2fb419682f55b0 100644
--- a/Modules/ThirdParty/Shark/otb-module-init.cmake
+++ b/Modules/ThirdParty/Shark/otb-module-init.cmake
@@ -22,8 +22,13 @@ find_package ( Shark REQUIRED )
 
 if ( SHARK_USE_OPENMP AND NOT OTB_USE_OPENMP )
   message(WARNING "Shark library is built with OpenMP and you have OTB_USE_OPENMP set to OFF.\
-   It will be turned to ON to allow compilation.")
-  set( OTB_USE_OPENMP "ON" CACHE BOOL "Add openmp compiler and linker flags" FORCE )
+   It will be enabled anyway to allow compilation.")
 endif()
 
+#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${SHARK_REQUIRED_C_FLAGS}")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SHARK_REQUIRED_CXX_FLAGS}")
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${SHARK_REQUIRED_LINK_FLAGS}")
+set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${SHARK_REQUIRED_LINK_FLAGS}")
+set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${SHARK_REQUIRED_LINK_FLAGS}")
+
 mark_as_advanced( Shark_DIR )