diff --git a/CMake/UseOTB.cmake.in b/CMake/UseOTB.cmake.in
index e28429baa57d1d341c8e149d1e3668507d88b031..494d3811a3dc6f8febffe17f1ef0da3d9d2c23b3 100644
--- a/CMake/UseOTB.cmake.in
+++ b/CMake/UseOTB.cmake.in
@@ -23,6 +23,18 @@ INCLUDE_DIRECTORIES(${OTB_INCLUDE_DIRS})
 # Add link directories needed to use OTB.
 LINK_DIRECTORIES(${OTB_LIBRARY_DIRS})
 
+
+# Path to additional CMake modules
+#   save the current value
+SET(BACKUP_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH})
+#   add the OTB specific CMake modules dir BEFORE the current CMAKE_MODULE_PATH
+SET(CMAKE_MODULE_PATH
+    ${OTB_CMAKEMODULE_DIRS}
+    ${CMAKE_MODULE_PATH})
+#   at the end of this file, CMAKE_MODULE_PATH will be set back to its original value
+#   this way, the OTb specific FindXXX.cmake are only used in this file
+#   and do not pollute the user space
+
 # Load settings for the system VXL with which OTB was built, if any.
 IF(OTB_USE_SYSTEM_VXL)
   # If VXL has already been found, make sure it is the one used to
@@ -94,45 +106,30 @@ IF(USE_FFTWF OR USE_FFTWD)
 ENDIF(USE_FFTWF OR USE_FFTWD)
 
 IF(OTB_USE_EXTERNAL_EXPAT)
-    FIND_PACKAGE(EXPAT)
-    IF(EXPAT_FOUND)
-        # Control expat compatibility
-        INCLUDE_DIRECTORIES(${EXPAT_INCLUDE_DIR})
-    ELSE(EXPAT_FOUND)
-        MESSAGE(FATAL_ERROR
-                  "Cannot use OTB project without EXPAT library. Please set EXPAT_DIR or rebuild OTB and set OTB_USE_EXTERNAL_EXPAT OFF to use INTERNAL EXPAT set on OTB/Utilities repository.")
-    ENDIF(EXPAT_FOUND)
+    FIND_PACKAGE(EXPAT REQUIRED)
+    INCLUDE_DIRECTORIES(${EXPAT_INCLUDE_DIR})
 ELSE(OTB_USE_EXTERNAL_EXPAT)
     ADD_DEFINITIONS(-DOTB_USE_INTERNAL_EXPAT)
 ENDIF(OTB_USE_EXTERNAL_EXPAT)
 
 
 IF(OTB_USE_EXTERNAL_BOOST)
-  FIND_PACKAGE(Boost)
+  FIND_PACKAGE(Boost REQUIRED)
   INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
 
   # needed for automatic linking on msvc platform
   LINK_DIRECTORIES( ${Boost_LIBRARY_DIRS} )
 ENDIF(OTB_USE_EXTERNAL_BOOST)
 
-IF(OTB_USE_EXTERNAL_GDAL)
-  FIND_PACKAGE(GDAL)
 
-  IF (NOT GDAL_FOUND)
-    FIND_PATH(GDAL_INCLUDE_DIR gdal.h $ENV{GDAL_INCLUDE_DIR} /usr/include/gdal)
-    FIND_LIBRARY(GDAL_LIBRARY NAMES gdal PATHS /usr/lib/gdal)
-  ENDIF(NOT GDAL_FOUND)
-  INCLUDE_DIRECTORIES(${GDAL_INCLUDE_DIR})
+IF(OTB_USE_EXTERNAL_GDAL)
+  FIND_PACKAGE(GDAL REQUIRED)
+  INCLUDE_DIRECTORIES(${GDAL_INCLUDE_DIRS})
 ENDIF(OTB_USE_EXTERNAL_GDAL)
 
-
 if(OTB_USE_EXTERNAL_FLTK)
-	FIND_PACKAGE(FLTK)
-	IF(NOT FLTK_FOUND)
-	   MESSAGE(FATAL_ERROR
-             "OTB was built with an external FLTK library, but I could not find it. Please set FLTK_DIR to the path containing FLTKConfig.cmake.")
-	ENDIF(NOT FLTK_FOUND)
-
+	FIND_PACKAGE(FLTK REQUIRED)
+	INCLUDE_DIRECTORIES(${FLTK_INCLUDE_DIRS})
 	LINK_DIRECTORIES(${FLTK_LIBRARY_DIRS})
 else(OTB_USE_EXTERNAL_FLTK)
   FIND_PROGRAM(FLTK_FLUID_EXECUTABLE fluid PATHS
@@ -144,21 +141,30 @@ else(OTB_USE_EXTERNAL_FLTK)
                NO_SYSTEM_PATH)
 endif(OTB_USE_EXTERNAL_FLTK)
 
-IF(OTB_USE_LIBLAS)
-IF(OTB_USE_EXTERNAL_LIBLAS)
-    FIND_PATH(LIBLAS_INCLUDE_DIR liblas.hpp)
-    IF(LIBLAS_INCLUDE_DIR)
-      INCLUDE_DIRECTORIES(${LIBLAS_INCLUDE_DIR})
-    ENDIF(LIBLAS_INCLUDE_DIR)
+IF(OTB_USE_LIBLAS AND OTB_USE_EXTERNAL_LIBLAS)
+  FIND_PACKAGE(LibLAS REQUIRED)
+  INCLUDE_DIRECTORIES(${LIBLAS_INCLUDE_DIRS})
+ENDIF(OTB_USE_LIBLAS AND OTB_USE_EXTERNAL_LIBLAS)
+
+IF(OTB_USE_PQXX)
+  FIND_PACKAGE(Pqxx REQUIRED)
+  INCLUDE_DIRECTORIES(${PQXX_INCLUDE_DIRS})
+ENDIF(OTB_USE_PQXX)
+
+IF(OTB_USE_EXTERNAL_LIBKML)
+  FIND_PACKAGE(LibKML)
+  INCLUDE_DIRECTORIES(${LIBKML_INCLUDE_DIRS})
+ENDIF(OTB_USE_EXTERNAL_LIBKML)
 
-    FIND_LIBRARY(LIBLAS_LIBRARY NAMES liblas_c liblas)
+IF(OTB_USE_EXTERNAL_TINYXML)
+  FIND_PACKAGE(TinyXML)
+  INCLUDE_DIRECTORIES(${TINYXML_INCLUDE_DIRS})
+ENDIF(OTB_USE_EXTERNAL_TINYXML)
 
-    IF (NOT LIBLAS_LIBRARY)
-        MESSAGE(FATAL_ERROR
-                "Cannot find Liblas library. Please set LIBLAS_LIBRARY")
-    ENDIF (NOT LIBLAS_LIBRARY)
-ENDIF(OTB_USE_EXTERNAL_LIBLAS)
-ENDIF(OTB_USE_LIBLAS)
+IF(OTB_USE_EXTERNAL_MUPARSER)
+  FIND_PACKAGE(MuParser)
+  INCLUDE_DIRECTORIES(${MUPARSER_INCLUDE_DIR})
+ENDIF(OTB_USE_EXTERNAL_MUPARSER)
 
 IF(OTB_USE_MAPNIK)
         FIND_PATH(MAPNIK_INCLUDE_DIR mapnik/map.hpp PATHS)
@@ -225,30 +231,14 @@ IF(OTB_USE_MAPNIK)
         # Add compiler option
         ADD_DEFINITIONS(-DOTB_USE_MAPNIK)
 
-        INCLUDE_DIRECTORIES(${MAPNIK_INCLUDE_DIR} ${ICUUC_INCLUDE_DIR} ${LTDL_INCLUDE_DIR}  ${FREETYPE2_INCLUDE_DIR})
+        INCLUDE_DIRECTORIES(${MAPNIK_INCLUDE_DIR}
+                            ${ICUUC_INCLUDE_DIR}
+                            ${LTDL_INCLUDE_DIR}
+                            ${FREETYPE2_INCLUDE_DIR})
 
 ENDIF(OTB_USE_MAPNIK)
 
-IF(OTB_USE_PQXX)
-
-        FIND_PATH(PQXX_INCLUDE_DIR pqxx/pqxx PATHS)
-        MARK_AS_ADVANCED(PQXX_INCLUDE_DIR)
-        IF (NOT PQXX_INCLUDE_DIR)
-                MESSAGE(FATAL_ERROR
-                        "Cannot find PQXX include directory. Please set PQXX_INCLUDE_DIR or SET OTB_USE_PQXX OFF.")
-        ENDIF (NOT PQXX_INCLUDE_DIR)
-
-        FIND_LIBRARY(PQXX_LIBRARY pqxx )
-        MARK_AS_ADVANCED(PQXX_LIBRARY)
-        IF (NOT PQXX_LIBRARY)
-                MESSAGE(FATAL_ERROR
-                        "Cannot find PQXX library. Please set PQXX_LIBRARY or SET OTB_USE_PQXX OFF.")
-        ENDIF (NOT PQXX_LIBRARY)
-
-        INCLUDE_DIRECTORIES(${PQXX_INCLUDE_DIR})
-
-ENDIF(OTB_USE_PQXX)
-
 INCLUDE(${OTB_LIBRARY_DIRS}/OTBParseArguments.cmake)
 INCLUDE(${OTB_LIBRARY_DIRS}/OTBWrapperMacros.cmake)
 
+SET(CMAKE_MODULE_PATH ${BACKUP_CMAKE_MODULE_PATH})