diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8455bb8..c8e0d88 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -211,6 +211,26 @@ IF ( ASSIMP_NO_EXPORT )
   MESSAGE( STATUS "Build an import-only version of Assimp." )
 ENDIF( ASSIMP_NO_EXPORT )
 
+# Search for poly2tri
+FIND_LIBRARY(POLY2TRI_LIB poly2tri HINTS ${POLY2TRI_LIB_PATH})
+FIND_FILE(POLY2TRI_H poly2tri.h PATHS ${POLY2TRI_INCLUDE_PATH})
+IF (POLY2TRI_LIB AND POLY2TRI_H)
+  message(status "Found External poly2tri")
+  SET(HAVE_POLY2TRI true)
+ELSE(POLY2TRI_LIB AND POLY2TRI_H)
+  SET(HAVE_POLY2TRI false)
+ENDIF(POLY2TRI_LIB AND POLY2TRI_H)
+
+# Search for clipper
+FIND_LIBRARY(CLIPPER_LIB polyclipping HINTS ${CLIPPER_LIB_PATH})
+FIND_FILE(CLIPPER_H clipper.hpp PATHS ${CLIPPER_INCLUDE_PATH})
+IF (CLIPPER_LIB AND CLIPPER_H)
+  message(status "Found External clipper")
+  SET(HAVE_CLIPPER true)
+ELSE(CLIPPER_LIB AND CLIPPER_H)
+  SET(HAVE_CLIPPER false)
+ENDIF(CLIPPER_LIB AND CLIPPER_H)
+
 SET ( ASSIMP_BUILD_ARCHITECTURE "" CACHE STRING
   "describe the current architecture."
 )
diff --git a/code/BlenderTessellator.h b/code/BlenderTessellator.h
index 530bd2c..a6c9d9e 100644
--- a/code/BlenderTessellator.h
+++ b/code/BlenderTessellator.h
@@ -142,7 +142,7 @@ namespace Assimp
 
 #if ASSIMP_BLEND_WITH_POLY_2_TRI
 
-#include "../contrib/poly2tri/poly2tri/poly2tri.h"
+#include "poly2tri/poly2tri.h"
 
 namespace Assimp
 {
diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt
index 35ecf50..d549c89 100644
--- a/code/CMakeLists.txt
+++ b/code/CMakeLists.txt
@@ -655,12 +655,15 @@ SET( ConvertUTF_SRCS
 )
 SOURCE_GROUP( ConvertUTF FILES ${ConvertUTF_SRCS})
 
+if (NOT HAVE_CLIPPER)
 SET( Clipper_SRCS
   ../contrib/clipper/clipper.hpp
   ../contrib/clipper/clipper.cpp
 )
 SOURCE_GROUP( Clipper FILES ${Clipper_SRCS})
-
+else (NOT HAVE_CLIPPER)
+SET( Clipper_SRCS "")
+endif(NOT HAVE_CLIPPER)
 
 SET( Poly2Tri_SRCS
   ../contrib/poly2tri/poly2tri/common/shapes.cc
@@ -743,8 +746,6 @@ SET( assimp_src
   # Third-party libraries
   ${IrrXML_SRCS}
   ${ConvertUTF_SRCS}
-  ${unzip_compile_SRCS}
-  ${Poly2Tri_SRCS}
   ${Clipper_SRCS}
   ${openddl_parser_SRCS}
   # Necessary to show the headers in the project when using the VC++ generator:
@@ -753,6 +754,8 @@ SET( assimp_src
   ${COMPILER_HEADERS}
 
 )
+
+
 ADD_DEFINITIONS( -DOPENDDLPARSER_BUILD )
 
 INCLUDE_DIRECTORIES(
@@ -821,6 +824,19 @@ else (UNZIP_FOUND)
   INCLUDE_DIRECTORIES("../")
 endif (UNZIP_FOUND)
 
+if (HAVE_POLY2TRI)
+  INCLUDE_DIRECTORIES(${POLY2TRI_INCLUDE_PATH})
+  TARGET_LINK_LIBRARIES(assimp ${POLY2TRI_LIB})
+endif(HAVE_POLY2TRI)
+
+if (HAVE_CLIPPER)
+  INCLUDE_DIRECTORIES(${CLIPPER_INCLUDE_PATH})
+  TARGET_LINK_LIBRARIES(assimp ${CLIPPER_LIB})
+else (HAVE_CLIPPER)
+  INCLUDE_DIRECTORIES(../contrib/clipper)
+endif(HAVE_CLIPPER)
+
+
 INSTALL( TARGETS assimp
   LIBRARY DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
   ARCHIVE DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
diff --git a/code/D3MFImporter.cpp b/code/D3MFImporter.cpp
index 1a97168..7377eb4 100644
--- a/code/D3MFImporter.cpp
+++ b/code/D3MFImporter.cpp
@@ -44,7 +44,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include <assimp/IOStream.hpp>
 #include <assimp/IOSystem.hpp>
 #include <assimp/DefaultLogger.hpp>
-#include <contrib/unzip/unzip.h>
+#include <minizip/unzip.h>
 #include "irrXMLWrapper.h"
 #include "StringComparison.h"
 #include "StringUtils.h"
diff --git a/code/D3MFOpcPackage.cpp b/code/D3MFOpcPackage.cpp
index 7cc1dd5..2b007db 100644
--- a/code/D3MFOpcPackage.cpp
+++ b/code/D3MFOpcPackage.cpp
@@ -42,7 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include "D3MFOpcPackage.h"
 #include "Exceptional.h"
 
-#include <contrib/unzip/unzip.h>
+#include <minizip/unzip.h>
 #include <assimp/IOStream.hpp>
 #include <assimp/IOSystem.hpp>
 #include <assimp/DefaultLogger.hpp>
diff --git a/code/IFCGeometry.cpp b/code/IFCGeometry.cpp
index 5a2e4a0..0926498 100644
--- a/code/IFCGeometry.cpp
+++ b/code/IFCGeometry.cpp
@@ -49,8 +49,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include "PolyTools.h"
 #include "ProcessHelper.h"
 
-#include "../contrib/poly2tri/poly2tri/poly2tri.h"
-#include "../contrib/clipper/clipper.hpp"
+#include "poly2tri/poly2tri.h"
+#include "clipper.hpp"
 #include <memory>
 
 #include <iterator>
diff --git a/code/IFCLoader.cpp b/code/IFCLoader.cpp
index 34977f5..bc655c0 100644
--- a/code/IFCLoader.cpp
+++ b/code/IFCLoader.cpp
@@ -50,7 +50,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include <tuple>
 
 #ifndef ASSIMP_BUILD_NO_COMPRESSED_IFC
-#   include <contrib/unzip/unzip.h>
+#   include <minizip/unzip.h>
 #endif
 
 #include "IFCLoader.h"
diff --git a/code/IFCOpenings.cpp b/code/IFCOpenings.cpp
index 51ea143..f0915fb 100644
--- a/code/IFCOpenings.cpp
+++ b/code/IFCOpenings.cpp
@@ -49,8 +49,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include "PolyTools.h"
 #include "ProcessHelper.h"
 
-#include "../contrib/poly2tri/poly2tri/poly2tri.h"
-#include "../contrib/clipper/clipper.hpp"
+#include "poly2tri/poly2tri.h"
+#include "clipper.hpp"
 
 #include <iterator>
 
diff --git a/code/Q3BSPZipArchive.h b/code/Q3BSPZipArchive.h
index e46a11b..da93e5c 100644
--- a/code/Q3BSPZipArchive.h
+++ b/code/Q3BSPZipArchive.h
@@ -40,7 +40,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #ifndef AI_Q3BSP_ZIPARCHIVE_H_INC
 #define AI_Q3BSP_ZIPARCHIVE_H_INC
 
-#include <contrib/unzip/unzip.h>
+#include <minizip/unzip.h>
 #include <assimp/IOStream.hpp>
 #include <assimp/IOSystem.hpp>
 #include <string>
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index df0139d..8b26f22 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -37,7 +37,8 @@
 #----------------------------------------------------------------------
 cmake_minimum_required( VERSION 2.6 )
 
-INCLUDE( AddGTest )
+# Search for Google Test
+FIND_PACKAGE(GTest)
 
 INCLUDE_DIRECTORIES(
   ${Assimp_SOURCE_DIR}/include
diff --git a/tools/assimp_cmd/CMakeLists.txt b/tools/assimp_cmd/CMakeLists.txt
index f8af93a..3f9a902 100644
