diff --git a/CMake/FindTinyXML.cmake b/CMake/FindTinyXML.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..e9bf94856237dc2e0ddea378335295fefeda6265
--- /dev/null
+++ b/CMake/FindTinyXML.cmake
@@ -0,0 +1,26 @@
+# - Find TinyXML
+# Find the native TinyXML includes and library
+#
+#   TINYXML_FOUND       - True if TinyXML found.
+#   TINYXML_INCLUDE_DIR - where to find tinyxml.h, etc.
+#   TINYXML_LIBRARIES   - List of libraries when using TinyXML.
+#
+
+IF( TINYXML_INCLUDE_DIR )
+    # Already in cache, be silent
+    SET( TinyXML_FIND_QUIETLY TRUE )
+ENDIF( TINYXML_INCLUDE_DIR )
+
+FIND_PATH( TINYXML_INCLUDE_DIR tinyxml.h
+           PATH_SUFFIXES tinyxml )
+
+FIND_LIBRARY( TINYXML_LIBRARIES
+              NAMES tinyxml
+              PATH_SUFFIXES tinyxml )
+
+# handle the QUIETLY and REQUIRED arguments and set TINYXML_FOUND to TRUE if
+# all listed variables are TRUE
+INCLUDE( FindPackageHandleStandardArgs )
+FIND_PACKAGE_HANDLE_STANDARD_ARGS( TinyXML DEFAULT_MSG TINYXML_INCLUDE_DIR TINYXML_LIBRARIES )
+
+MARK_AS_ADVANCED( TINYXML_INCLUDE_DIR TINYXML_LIBRARIES )
diff --git a/CMake/ImportTinyXML.cmake b/CMake/ImportTinyXML.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..8cdae4a9b4da0caf52fd57c2eaee82b602254fcf
--- /dev/null
+++ b/CMake/ImportTinyXML.cmake
@@ -0,0 +1,10 @@
+MESSAGE(STATUS "Importing TinyXML...")
+FIND_PACKAGE(TinyXML)
+
+IF(TINYXML_FOUND)
+  OPTION(OTB_USE_EXTERNAL_TINYXML "Use external TinyXML library." ON)
+ELSE(TINYXML_FOUND)
+  OPTION(OTB_USE_EXTERNAL_TINYXML "Use external TinyXML library." OFF)
+  SET(TINYXML_LIBRARIES otbtinyXML)
+ENDIF(TINYXML_FOUND)
+MARK_AS_ADVANCED(OTB_USE_EXTERNAL_TINYXML)
diff --git a/CMake/otbIncludeDirectories.cmake b/CMake/otbIncludeDirectories.cmake
index 0961d6a7b56a336dddbee44e42baa72ba1af263a..bcc9aa813f0db1502a34fe5b81c86eb846331949 100644
--- a/CMake/otbIncludeDirectories.cmake
+++ b/CMake/otbIncludeDirectories.cmake
@@ -64,7 +64,6 @@ SET(OTB_INCLUDE_DIRS_BUILD_TREE ${OTB_INCLUDE_DIRS_BUILD_TREE}
   ${OTB_SOURCE_DIR}/Utilities/otbossimplugins/ossim
   ${OTB_SOURCE_DIR}/Utilities/InsightJournal
   ${OTB_SOURCE_DIR}/Utilities/otb6S
-  ${OTB_SOURCE_DIR}/Utilities/tinyXMLlib
 #  ${OTB_SOURCE_DIR}/Utilities/otbgalib
   ${OTB_SOURCE_DIR}/Utilities/otbkml/src
   ${OTB_SOURCE_DIR}/Utilities/otbkml/third_party
@@ -110,6 +109,14 @@ IF(OTB_USE_SIFTFAST)
       ${OTB_SOURCE_DIR}/Utilities/otbsiftfast)
 ENDIF(OTB_USE_SIFTFAST)
 
+IF(OTB_USE_EXTERNAL_TINYXML)
+  SET(OTB_INCLUDE_DIRS_BUILD_TREE ${OTB_INCLUDE_DIRS_BUILD_TREE}
+      ${TINYXML_INCLUDE_DIRS})
+ELSEIF(OTB_USE_EXTERNAL_TINYXML)
+  SET(OTB_INCLUDE_DIRS_BUILD_TREE ${OTB_INCLUDE_DIRS_BUILD_TREE}
+      ${OTB_SOURCE_DIR}/Utilities/tinyXMLlib)
+ENDIF(OTB_USE_EXTERNAL_TINYXML)
+
 #-----------------------------------------------------------------------------
 # Include directories from the ossim build tree
 SET(OTB_INCLUDE_DIRS_BUILD_TREE ${OTB_INCLUDE_DIRS_BUILD_TREE}
@@ -320,7 +327,6 @@ SET(OTB_INCLUDE_RELATIVE_DIRS ${OTB_INCLUDE_RELATIVE_DIRS}
   Utilities/otbsvm
   Utilities/InsightJournal
   Utilities/otb6S
-  Utilities/tinyXMLlib
 #  Utilities/otbgalib
   Utilities/otbkml
   Utilities/otbkml/src
@@ -384,6 +390,15 @@ ELSE(OTB_USE_EXTERNAL_FLTK)
   		        Utilities/FLTK)
 ENDIF(OTB_USE_EXTERNAL_FLTK)
 
+#For TinyXML header file
+IF(OTB_USE_EXTERNAL_TINYXML)
+        SET(OTB_INCLUDE_ABSOLUE_DIRS ${OTB_INCLUDE_ABSOLUE_DIRS}
+                ${TINYXML_INCLUDE_DIRS})
+ELSE(OTB_USE_EXTERNAL_TINYXML)
+        SET(OTB_INCLUDE_RELATIVE_DIRS ${OTB_INCLUDE_RELATIVE_DIRS}
+                Utilities/tinyXMLlib)
+ENDIF(OTB_USE_EXTERNAL_TINYXML)
+
 #For GLU header file
 SET(OTB_INCLUDE_ABSOLUE_DIRS ${OTB_INCLUDE_ABSOLUE_DIRS}
   		${OTB_GLU_INCLUDE_PATH} )
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7ed9f55bd6863308540831cfd607f14453c1a395..94c12f66d8ded8c03ed5581c3e98a2479e40ef7c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -230,6 +230,7 @@ INCLUDE(ImportOssim)
 INCLUDE(ImportQt4)
 INCLUDE(ImportGetText)
 INCLUDE(ImportSiftFast)
+INCLUDE(ImportTinyXML)
 
 
 INCLUDE_DIRECTORIES (
diff --git a/Code/Fuzzy/CMakeLists.txt b/Code/Fuzzy/CMakeLists.txt
index 800a234a4c21c9b44f0788cc46629b2da2f807f6..9d7c197986071ce47f5f1005f6bdfc7212097b82 100644
--- a/Code/Fuzzy/CMakeLists.txt
+++ b/Code/Fuzzy/CMakeLists.txt
@@ -3,7 +3,7 @@
 FILE(GLOB OTBFuzzy_SRCS "*.cxx" )
 
 ADD_LIBRARY(OTBFuzzy ${OTBFuzzy_SRCS})
-TARGET_LINK_LIBRARIES (OTBFuzzy OTBCommon tinyXML)
+TARGET_LINK_LIBRARIES (OTBFuzzy OTBCommon ${TINYXML_LIBRARIES})
 IF(OTB_LIBRARY_PROPERTIES)
   SET_TARGET_PROPERTIES(OTBFuzzy PROPERTIES ${OTB_LIBRARY_PROPERTIES})
 ENDIF(OTB_LIBRARY_PROPERTIES)
diff --git a/Code/IO/CMakeLists.txt b/Code/IO/CMakeLists.txt
index 9b5f0f1e6a19e172fa9bbf6a0f7c6311c08b2b86..6b215aeaf70accf797fdc4397948dbc544fc5db6 100644
--- a/Code/IO/CMakeLists.txt
+++ b/Code/IO/CMakeLists.txt
@@ -39,7 +39,7 @@ ADD_LIBRARY(OTBIO ${OTBIO_SRCS})
 #    LINK_INTERFACE_LIBRARIES ""
 #  )
 TARGET_LINK_LIBRARIES (OTBIO  ${TIFF_LIBRARY} ${GEOTIFF_LIBRARY}  ${GDAL_LIBRARY} ${OGR_LIBRARY} ${JPEG_LIBRARY} ${OPENTHREADS_LIBRARY} OTBCommon OTBBasicFilters OTBCurlAdapters)
-TARGET_LINK_LIBRARIES (OTBIO ITKIO ITKCommon otbkml tinyXML)
+TARGET_LINK_LIBRARIES (OTBIO ITKIO ITKCommon otbkml ${TINYXML_LIBRARIES})
 
 IF (OTB_USE_LIBLAS)
 IF(OTB_USE_EXTERNAL_LIBLAS)
diff --git a/Code/ObjectDetection/CMakeLists.txt b/Code/ObjectDetection/CMakeLists.txt
index 0ec0fb425272dc905eb1e8e01ab97128cf14e1ce..0103a2f06d4cbb0a671c4f069d88a3550b806dae 100644
--- a/Code/ObjectDetection/CMakeLists.txt
+++ b/Code/ObjectDetection/CMakeLists.txt
@@ -2,7 +2,7 @@
 FILE(GLOB OTBObjectDetection_SRCS "*.cxx" )
 
 ADD_LIBRARY(OTBObjectDetection ${OTBObjectDetection_SRCS})
-TARGET_LINK_LIBRARIES (OTBObjectDetection OTBCommon)
+TARGET_LINK_LIBRARIES (OTBObjectDetection OTBCommon ${TINYXML_LIBRARIES})
 
 IF(OTB_LIBRARY_PROPERTIES)
   SET_TARGET_PROPERTIES(OTBObjectDetection PROPERTIES ${OTB_LIBRARY_PROPERTIES})
diff --git a/Testing/Utilities/CMakeLists.txt b/Testing/Utilities/CMakeLists.txt
index d94d025ab4073bbb81def1740688c9ac7ac6a4e3..444db639f848c91a42199006ac12ecea51bf0367 100644
--- a/Testing/Utilities/CMakeLists.txt
+++ b/Testing/Utilities/CMakeLists.txt
@@ -399,7 +399,7 @@ IF(NOT BUILD_SHARED_LIBS)
 ENDIF(NOT BUILD_SHARED_LIBS)
 
 ADD_EXECUTABLE(otbUtilitiesTests otbUtilitiesTests.cxx ${UtilitiesTests_SRCS})
-TARGET_LINK_LIBRARIES(otbUtilitiesTests OTBIO OTBCommon OTBTesting otbsvm otb6S tinyXML otbkml)
+TARGET_LINK_LIBRARIES(otbUtilitiesTests OTBIO OTBCommon OTBTesting otbsvm otb6S ${TINYXML_LIBRARIES} otbkml)
 
 IF(OTB_USE_SIFTFAST)
   TARGET_LINK_LIBRARIES(otbUtilitiesTests otbsiftfast)
diff --git a/Utilities/CMakeLists.txt b/Utilities/CMakeLists.txt
index 3e025b98f4d5c910358172a0d211075379846218..00b40cd496ee63811e7e80c5845498447b6f1e57 100644
--- a/Utilities/CMakeLists.txt
+++ b/Utilities/CMakeLists.txt
@@ -68,8 +68,12 @@ MESSAGE(STATUS "Configuring otbossimplugins...")
 ADD_SUBDIRECTORY(otbossimplugins)
 MESSAGE(STATUS "Configuring otb6S...")
 ADD_SUBDIRECTORY(otb6S)
-MESSAGE(STATUS "Configuring tinyXMLlib...")
-ADD_SUBDIRECTORY(tinyXMLlib)
+
+IF(NOT OTB_USE_EXTERNAL_TINYXML)
+  MESSAGE(STATUS "Configuring tinyXMLlib...")
+  ADD_SUBDIRECTORY(tinyXMLlib)
+ENDIF(NOT OTB_USE_EXTERNAL_TINYXML)
+
 MESSAGE(STATUS "Configuring otbkml...")
 ADD_SUBDIRECTORY(otbkml)
 MESSAGE(STATUS "Configuring otbedison...")
diff --git a/Utilities/tinyXMLlib/CMakeLists.txt b/Utilities/tinyXMLlib/CMakeLists.txt
index e1de4a684d6041192dfa040fb62446123cf0b835..93a4988a068b1387bd675bd959e0f05d6e08be05 100644
--- a/Utilities/tinyXMLlib/CMakeLists.txt
+++ b/Utilities/tinyXMLlib/CMakeLists.txt
@@ -2,14 +2,13 @@ PROJECT(tinyXMLlib)
 
 FILE(GLOB tinyXMLlib_SRCS "*.cpp")
 FILE(GLOB tinyXMLlib_HDRS "*.h")
-ADD_LIBRARY(tinyXML ${tinyXMLlib_SRCS})
-TARGET_LINK_LIBRARIES(tinyXML)
+ADD_LIBRARY(otbtinyXML ${tinyXMLlib_SRCS})
 IF(OTB_LIBRARY_PROPERTIES)
-  SET_TARGET_PROPERTIES(tinyXML PROPERTIES ${OTB_LIBRARY_PROPERTIES})
+  SET_TARGET_PROPERTIES(otbtinyXML PROPERTIES ${OTB_LIBRARY_PROPERTIES})
 ENDIF(OTB_LIBRARY_PROPERTIES)
 
 IF(NOT OTB_INSTALL_NO_LIBRARIES)
-  INSTALL(TARGETS tinyXML
+  INSTALL(TARGETS otbtinyXML
     RUNTIME DESTINATION ${OTB_INSTALL_BIN_DIR_CM24} COMPONENT RuntimeLibraries
     LIBRARY DESTINATION ${OTB_INSTALL_LIB_DIR_CM24} COMPONENT RuntimeLibraries
     ARCHIVE DESTINATION ${OTB_INSTALL_LIB_DIR_CM24} COMPONENT Development)
@@ -17,6 +16,9 @@ ENDIF(NOT OTB_INSTALL_NO_LIBRARIES)
 
 IF(NOT OTB_INSTALL_NO_DEVELOPMENT)
   INSTALL(FILES ${tinyXMLlib_HDRS}
-    DESTINATION ${OTB_INSTALL_INCLUDE_DIR_CM24}/Utilities/tinyXMLlib
-    COMPONENT Development)
+          DESTINATION ${OTB_INSTALL_INCLUDE_DIR_CM24}/Utilities/tinyXMLlib
+          COMPONENT Development)
 ENDIF(NOT OTB_INSTALL_NO_DEVELOPMENT)
+
+SET(TINYXML_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+SET(TINYXML_LIBRARIES otbtinyXML)