diff --git a/CMakeLists.txt b/CMakeLists.txt
index e19b6266d..a792de800 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -22,22 +22,23 @@ option(STORM_DEBUG "Sets whether the DEBUG mode is used" ON)
 option(STORM_USE_POPCNT "Sets whether the popcnt instruction is going to be used." ON)
 option(USE_BOOST_STATIC_LIBRARIES "Sets whether the Boost libraries should be linked statically." ON)
 option(STORM_USE_INTELTBB "Sets whether the Intel TBB libraries should be used." OFF)
+option(STORM_USE_GUROBI "Sets whether Gurobi should be used." OFF)
 option(STORM_USE_COTIRE "Sets whether Cotire should be used (for building precompiled headers)." OFF)
 option(LINK_LIBCXXABI "Sets whether libc++abi should be linked." OFF)
 option(USE_LIBCXX "Sets whether the standard library is libc++." OFF)
 option(USE_CARL "Sets whether carl should be included." ON)
+option(USE_XERCES "Sets whether xerces should be used." OFF)
 option(FORCE_COLOR "Force color output" OFF)
 option(STORM_COMPILE_WITH_CCACHE "Compile using CCache" ON)
 option(STORM_LOGGING_FRAMEWORK "Use a framework for logging" OFF)
 option(STORM_LOG_DISABLE_DEBUG "Disable log and trace message support" OFF)
+set(BOOST_ROOT "" CACHE STRING "A hint to the root directory of Boost (optional).")
 set(GUROBI_ROOT "" CACHE STRING "A hint to the root directory of Gurobi (optional).")
 set(Z3_ROOT "" CACHE STRING "A hint to the root directory of Z3 (optional).")
-set(CUDA_ROOT "" CACHE STRING "The root directory of CUDA.")
-set(MSAT_ROOT "" CACHE STRING "The root directory of MathSAT (if available).")
+set(CUDA_ROOT "" CACHE STRING "The hint to the root directory of CUDA (optional).")
+set(MSAT_ROOT "" CACHE STRING "The hint to the root directory of MathSAT (optional).")
 set(ADDITIONAL_INCLUDE_DIRS "" CACHE STRING "Additional directories added to the include directories.")
 set(ADDITIONAL_LINK_DIRS "" CACHE STRING "Additional directories added to the link directories.")
-set(CUSTOM_BOOST_ROOT "" CACHE STRING "A custom path to the Boost root directory.")
-set(STORM_SUPPORT_XML_INPUT_FORMATS 0)
 
 # If the DEBUG option was turned on, we will target a debug version and a release version otherwise.
 if (STORM_DEBUG)
@@ -177,20 +178,42 @@ endif()
 
 message(STATUS "StoRM - Using Compiler Configuration: ${STORM_COMPILED_BY}")
 
+#############################################################
 #############################################################
 ##
 ##	Inclusion of required libraries
 ##
 #############################################################
+#############################################################
 
+#############################################################
+##
+##	Include the targets for non-system resources
+##
+#############################################################
 
+# In 3rdparty, targets are being defined that can be used
+# in the the system does not have a library
 add_subdirectory(resources/3rdparty)
-# Add the version of GMM in the repository to the include pathes
+
+#############################################################
+##
+##	gmm
+##
+#############################################################
+
+# Add the shipped version of GMM to the include pathes
 set(GMMXX_INCLUDE_DIR "${PROJECT_SOURCE_DIR}/resources/3rdparty/gmm-5.0/include")
 include_directories(${GMMXX_INCLUDE_DIR})
 
-find_package(GMP)
+#############################################################
+##
+##	gmp
+##
+#############################################################
 
+# GMP is optional (unless MathSAT is used, see below)
+find_package(GMP QUIET)
 
 #############################################################
 ##
@@ -203,32 +226,26 @@ set(Boost_USE_STATIC_LIBS        ON)
 set(Boost_USE_MULTITHREADED      ON)
 set(Boost_USE_STATIC_RUNTIME    OFF)
 
-# If a custom boost root directory was specified, we set the corresponding hint for the script to find it.
-if(CUSTOM_BOOST_ROOT)
-	message(STATUS "StoRM - Using Boost from CUSTOM_BOOST_ROOT located at ${CUSTOM_BOOST_ROOT}")
-	set(BOOST_ROOT "${CUSTOM_BOOST_ROOT}")
-endif(CUSTOM_BOOST_ROOT)
-
-find_package(Boost 1.56.0 REQUIRED)
+find_package(Boost 1.56.0 REQUIRED QUIET)
 
 if ((NOT Boost_LIBRARY_DIRS) OR ("${Boost_LIBRARY_DIRS}" STREQUAL ""))
     set(Boost_LIBRARY_DIRS "${Boost_INCLUDE_DIRS}/stage/lib")
 endif ()
 link_directories(${Boost_LIBRARY_DIRS})
 
-
 include_directories(${Boost_INCLUDE_DIRS})
 list(APPEND STORM_LINK_LIBRARIES ${Boost_LIBRARIES})
-#message(STATUS "BOOST_INCLUDE_DIRS is ${Boost_INCLUDE_DIRS}")
-#message(STATUS "BOOST_LIBRARY_DIRS is ${Boost_LIBRARY_DIRS}")
-
-
+message(STATUS "StoRM - Using Boost ${Boost_VERSION} (lib ${Boost_LIB_VERSION})")
+#message(STATUS "StoRM - BOOST_INCLUDE_DIRS is ${Boost_INCLUDE_DIRS}")
+#message(STATUS "StoRM - BOOST_LIBRARY_DIRS is ${Boost_LIBRARY_DIRS}")
 
 #############################################################
 ##
 ##	ExprTk
 ##
 #############################################################
+
+# Use the shipped version of ExprTK
 message (STATUS "StoRM - Including ExprTk")
 include_directories("${PROJECT_SOURCE_DIR}/resources/3rdparty/exprtk")
 
@@ -243,14 +260,11 @@ find_package(Z3 QUIET)
 # Z3 Defines
 set(STORM_HAVE_Z3 ${Z3_FOUND})
 
-if(STORM_HAVE_Z3)
+if(Z3_FOUND)
     message (STATUS "StoRM - Linking with Z3")
     include_directories(${Z3_INCLUDE_DIRS})
     list(APPEND STORM_LINK_LIBRARIES ${Z3_LIBRARIES})
-endif(STORM_HAVE_Z3)
-
-
-
+endif(Z3_FOUND)
 
 #############################################################
 ##
@@ -258,40 +272,241 @@ endif(STORM_HAVE_Z3)
 ##
 #############################################################
 
-set(STORM_HAVE_GLPK 1)
-message (STATUS "StoRM - Linking with glpk")
+find_package(GLPK QUIET)
+if(GLPK_FOUND)
+	message (STATUS "StoRM - Using system version of GLPK")
+else()
+	message (STATUS "StoRM - Using shipped version of GLPK")
+	set(GLPK_LIBRARIES  ${CMAKE_BINARY_DIR}/resources/3rdparty/glpk-4.57/lib/libglpk${DYNAMIC_EXT})
+	set(GLPK_INCLUDE_DIR ${CMAKE_BINARY_DIR}/resources/3rdparty/glpk-4.57/include)
+
+	add_dependencies(resources glpk)
+endif()
 
+# Since there is a shipped version, always use GLPK
+set(STORM_HAVE_GLPK ON)
+message (STATUS "StoRM - Linking with glpk")
 include_directories(${GLPK_INCLUDE_DIR})
 list(APPEND STORM_LINK_LIBRARIES ${GLPK_LIBRARIES})
 
+#############################################################
+##
+##	Gurobi (optional)
+##
+#############################################################
+
+if (STORM_USE_GUROBI)
+	find_package(Gurobi REQUIRED QUIET)
+	set(STORM_HAVE_GUROBI ${GUROBI_FOUND})
+	if (GUROBI_FOUND)
+		message (STATUS "StoRM - Linking with Gurobi")
+		include_directories(${GUROBI_INCLUDE_DIRS})
+		list(APPEND STORM_LINK_LIBRARIES ${GUROBI_LIBRARY})
+		#link_directories("${GUROBI_ROOT}/lib")
+	else()
+		#message(FATAL_ERROR "StoRM - Gurobi was requested, but not found!")
+	endif()
+else()
+	set(STORM_HAVE_GUROBI OFF)
+endif()
+
 
 
 #############################################################
 ##
-##	Gurobi (optional)
+##	CUDD
+##
+#############################################################
+
+# Do not use system CUDD, StoRM has a modified version
+#find_package(CUDD QUIET)
+#set(CUDD_FOUND OFF)
+if(CUDD_FOUND)
+	list(APPEND STORM_LINK_LIBRARIES ${CUDD_LIBRARY})
+else()
+	set(CUDD_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/cudd-3.0.0/include)
+	set(CUDD_SHARED_LIBRARY ${CMAKE_CURRENT_BINARY_DIR}/cudd-3.0.0/lib/libcudd${DYNAMIC_EXT})
+	set(CUDD_STATIC_LIBRARY ${CMAKE_CURRENT_BINARY_DIR}/cudd-3.0.0/liblibcudd${STATIC_EXT})
+	list(APPEND STORM_LINK_LIBRARIES ${CUDD_SHARED_LIBRARY})
+	add_dependencies(resources cudd3)
+endif()
+
+message(STATUS "StoRM - Linking with CUDD")
+#message("StoRM - CUDD include dir: ${CUDD_INCLUDE_DIR}")
+include_directories(${CUDD_INCLUDE_DIR})
+
+#############################################################
+##
+##      carl
+##
+#############################################################
+
+set(STORM_HAVE_CARL OFF)
+if(USE_CARL)
+	find_package(carl QUIET REQUIRED)
+	if(carl_FOUND)
+		set(STORM_HAVE_CARL ON)
+		message(STATUS "StoRM - Linking with carl.")
+		include_directories("${carl_INCLUDE_DIR}")
+		list(APPEND STORM_LINK_LIBRARIES ${carl_LIBRARIES})
+	else()
+		#message(FATAL_ERROR "StoRM - CARL was requested but not found"
+	endif()
+
+	#find_package(smtrat QUIET)
+	if(smtrat_FOUND)
+		
+	endif()
+endif()
+
+#############################################################
+##
+##      SMT-RAT
+##
+#############################################################
+
+# No find routine yet
+#find_package(smtrat QUIET)
+# Not yet supported
+set(smtrat_FOUND OFF)
+set(STORM_HAVE_SMTRAT OFF)
+if(smtrat_FOUND)
+	set(STORM_HAVE_SMTRAT ON)
+	message(STATUS "StoRM - Linking with smtrat.")
+    include_directories("${smtrat_INCLUDE_DIR}")
+    list(APPEND STORM_LINK_LIBRARIES ${smtrat_LIBRARIES})
+endif()
+
+#############################################################
+##
+##	MathSAT (optional)
 ##
 #############################################################
 
-find_package(Gurobi)
-if ("${GUROBI_ROOT}" STREQUAL "" AND NOT GUROBI_FOUND)
-    set(ENABLE_GUROBI OFF)
+if ("${MSAT_ROOT}" STREQUAL "")
+    set(ENABLE_MSAT OFF)
 else()
-    set(ENABLE_GUROBI ON)
+    set(ENABLE_MSAT ON)
 endif()
 
-# Gurobi Defines
-set(STORM_HAVE_GUROBI ${ENABLE_GUROBI})
-
-if (ENABLE_GUROBI)
-	if (NOT GUROBI_FOUND)
-		message(FATAL_ERROR "Gurobi was requested, but not found!")
-        endif()
-        message (STATUS "StoRM - Linking with Gurobi (include: ${GUROBI_INCLUDE_DIRS})")
-        include_directories(${GUROBI_INCLUDE_DIRS})
-        list(APPEND STORM_LINK_LIBRARIES ${GUROBI_LIBRARY})
-	#link_directories("${GUROBI_ROOT}/lib")
+# MathSAT Defines
+set(STORM_HAVE_MSAT ${ENABLE_MSAT})
+if (ENABLE_MSAT)
+    message (STATUS "StoRM - Linking with MathSAT")
+    link_directories("${MSAT_ROOT}/lib")
+    include_directories("${MSAT_ROOT}/include")
+    list(APPEND STORM_LINK_LIBRARIES "mathsat")
+    if(GMP_FOUND)
+        include_directories("${GMP_INCLUDE_DIR}")
+        list(APPEND STORM_LINK_LIBRARIES "gmp")
+    elseif(MPIR_FOUND)
+        include_directories("${GMP_INCLUDE_DIR}")
+        list(APPEND STORM_LINK_LIBRARIES "mpir" "mpirxx")
+    else(GMP_FOUND)
+        message(FATAL_ERROR "GMP is required for MathSAT, but was not found!")
+    endif(GMP_FOUND)
+endif(ENABLE_MSAT)
+
+#############################################################
+##
+##	Xerces
+##
+#############################################################
+
+if(USE_XERCES)
+	find_package(Xerces QUIET)
+	if(XERCES_FOUND)
+		message(STATUS "StoRM - Use system version of xerces")
+    else()
+		message(STATUS "StoRM - Use shipped version of xerces")
+		set(XERCES_ROOT ${CMAKE_BINARY_DIR}/resources/3rdparty/xercesc-3.1.2)
+		set(XERCESC_INCLUDE ${XERCES_ROOT}/include)
+		set(XERCES_LIBRARY_PATH ${XERCES_ROOT}/lib)
+		set(XERCESC_LIBRARIES ${XERCES_LIBRARY_PATH}/libxerces-c.a)
+
+		add_dependencies(resources xercesc)
+    endif()
+
+	message (STATUS "StoRM - Linking with xercesc")
+    set(STORM_HAVE_XERCES ON)
+	include_directories(${XERCESC_INCLUDE})
+	list(APPEND STORM_LINK_LIBRARIES ${XERCESC_LIBRARIES})
+endif(USE_XERCES)
+
+#############################################################
+##
+##	Sylvan
+##
+#############################################################
+
+message(STATUS "StoRM - Using shipped version of sylvan")
+message(STATUS "StoRM - Linking with sylvan")
+include_directories("${Sylvan_INCLUDE_DIR}")
+list(APPEND STORM_LINK_LIBRARIES ${Sylvan_LIBRARY})
+add_dependencies(resources sylvan)
+
+if(${OPERATING_SYSTEM} MATCHES "Linux")
+	find_package(Hwloc QUIET REQUIRED)
+	if(Hwloc_FOUND)
+		message(STATUS "StoRM - Linking with hwloc")
+		list(APPEND STORM_LINK_LIBRARIES ${Hwloc_LIBRARIES})
+	else()
+		message(FATAL_ERROR "HWLOC is required but was not found.")
+	endif()
 endif()
 
+#############################################################
+##
+##	Google Test gtest
+##
+#############################################################
+
+add_dependencies(test-resources googletest)
+list(APPEND STORM_TEST_LINK_LIBRARIES ${GTEST_LIBRARIES})
+
+#############################################################
+##
+##	Intel Threading Building Blocks (optional)
+##
+#############################################################
+
+set(STORM_HAVE_INTELTBB OFF)
+if (STORM_USE_INTELTBB)
+	# Point to shipped TBB directory
+	set(TBB_INSTALL_DIR "${PROJECT_SOURCE_DIR}/resources/3rdparty/tbb42_20140122_merged-win-lin-mac")
+	find_package(TBB REQUIRED QUIET)
+
+	if (TBB_FOUND)
+		message(STATUS "StoRM - Found Intel TBB with interface version ${TBB_INTERFACE_VERSION}.")
+		message(STATUS "StoRM - Linking with Intel TBB in ${TBB_LIBRARY_DIRS}.")
+		set(STORM_HAVE_INTELTBB ON)
+		link_directories(${TBB_LIBRARY_DIRS})
+		include_directories(${TBB_INCLUDE_DIRS})
+		list(APPEND STORM_LINK_LIBRARIES tbb tbbmalloc)	
+	else(TBB_FOUND)
+		message(FATAL_ERROR "StoRM - TBB was requested, but not found!")
+	endif(TBB_FOUND)
+endif(STORM_USE_INTELTBB)
+
+#############################################################
+##
+##	Threads
+##
+#############################################################
+
+find_package(Threads REQUIRED QUIET)
+include_directories(${THREADS_INCLUDE_DIRS})
+list(APPEND STORM_LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
+if (STORM_USE_COTIRE)
+	target_link_libraries(storm_unity ${CMAKE_THREAD_LIBS_INIT})
+endif(STORM_USE_COTIRE)
+
+if (MSVC)
+	# Add the DebugHelper DLL
+	set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} Dbghelp.lib")
+	target_link_libraries(storm "Dbghelp.lib")
+endif(MSVC)
+
 #############################################################
 ##
 ##	CUDA Library generation
@@ -429,195 +644,6 @@ if(ENABLE_CUDA)
         include_directories("${PROJECT_SOURCE_DIR}/cuda/kernels/")
 endif()
 
-
-#############################################################
-##
-##	CUDD
-##
-#############################################################
-
-message("${CUDD3_INCLUDE_DIR}")
-include_directories(${CUDD3_INCLUDE_DIR})
-list(APPEND STORM_LINK_LIBRARIES ${CUDD3_SHARED_LIBRARIES})
-
-#############################################################
-##
-##      carl
-##
-#############################################################
-
-if(USE_CARL)
-    find_package(carl QUIET)
-    if(carl_FOUND)
-     set(STORM_HAVE_CARL ON)
-    endif()
-
-    #find_package(smtrat QUIET)
-    if(smtrat_FOUND)
-        set(STORM_HAVE_SMTRAT ON)
-    endif()
-endif()
-
-if(STORM_HAVE_CARL)
-    message(STATUS "StoRM - Linking with carl.")
-    include_directories("${carl_INCLUDE_DIR}")
-    list(APPEND STORM_LINK_LIBRARIES ${carl_LIBRARIES})
-endif()
-
-#############################################################
-##
-##      SMT-RAT
-##
-#############################################################
-
-if(STORM_HAVE_SMTRAT)
-message(STATUS "StoRM - Linking with smtrat.")
-    include_directories("${smtrat_INCLUDE_DIR}")
-    list(APPEND STORM_LINK_LIBRARIES ${smtrat_LIBRARIES})
-endif()
-
-#############################################################
-##
-##	MathSAT (optional)
-##
-#############################################################
-
-
-
-if ("${MSAT_ROOT}" STREQUAL "")
-    set(ENABLE_MSAT OFF)
-else()
-    set(ENABLE_MSAT ON)
-endif()
-
-# MathSAT Defines
-set(STORM_HAVE_MSAT ${ENABLE_MSAT})
-if (ENABLE_MSAT)
-    link_directories("${MSAT_ROOT}/lib")
-    message (STATUS "StoRM - Linking with MathSAT")
-    include_directories("${MSAT_ROOT}/include")
-    list(APPEND STORM_LINK_LIBRARIES "mathsat")
-    if(GMP_FOUND)
-        include_directories("${GMP_INCLUDE_DIR}")
-        list(APPEND STORM_LINK_LIBRARIES "gmp")
-    elseif(MPIR_FOUND)
-        include_directories("${GMP_INCLUDE_DIR}")
-        list(APPEND STORM_LINK_LIBRARIES "mpir" "mpirxx")
-    else(GMP_FOUND)
-        message(FATAL_ERROR "GMP is required for MathSAT, but was not found!")
-    endif(GMP_FOUND)
-endif(ENABLE_MSAT)
-
-#############################################################
-##
-##	Xerces
-##
-#############################################################
-
-if(STORM_SUPPORT_XML_INPUT_FORMATS)
-    find_package(Xerces)
-    if(NOT XERCES_FOUND)
-            message(STATUS "Use shipped version of xerces")
-            set(XERCES_ROOT ${CMAKE_BINARY_DIR}/resources/3rdparty/xercesc-3.1.2)
-            set(XERCESC_INCLUDE ${XERCES_ROOT}/include)
-            set(XERCES_LIBRARY_PATH ${XERCES_ROOT}/lib)
-            set(XERCESC_LIBRARIES ${XERCES_LIBRARY_PATH}/libxerces-c.a)
-    endif()
-
-    set(STORM_HAVE_XERCES TRUE)
-    if(STORM_HAVE_XERCES)
-            include_directories(${XERCESC_INCLUDE})
-            list(APPEND STORM_LINK_LIBRARIES ${XERCESC_LIBRARIES})
-    endif()
-endif()
-
-#############################################################
-##
-##	Sylvan
-##
-#############################################################
-
-message(STATUS "Linking with shipped version of sylvan (in directory ${STORM_SYLVAN_ROOT}).")
-include_directories("${Sylvan_INCLUDE_DIR}")
-list(APPEND STORM_LINK_LIBRARIES ${Sylvan_LIBRARY})
-if(${OPERATING_SYSTEM} MATCHES "Linux")
-	find_package(Hwloc QUIET)
-	if(NOT Hwloc_FOUND)
-            message(SEND_ERROR "HWLOC is required but was not found.")
-	else()
-            list(APPEND STORM_LINK_LIBRARIES ${Hwloc_LIBRARIES})	
-	endif()
-endif()
-
-#############################################################
-##
-##	Google Test gtest
-##
-#############################################################
-
-#############################################################
-##
-##	Log4CPlus
-##
-#############################################################
-if(STORM_LOGGING_FRAMEWORK) 
-    set(BUILD_SHARED_LIBS OFF CACHE BOOL "If TRUE, log4cplus is built as a shared library, otherwise as a static library")
-    set(LOG4CPLUS_BUILD_LOGGINGSERVER OFF)
-    set(LOG4CPLUS_BUILD_TESTING OFF)
-    set(LOG4CPLUS_USE_UNICODE OFF)
-    set(LOG4CPLUS_DEFINE_INSTALL_TARGET OFF)
-    add_subdirectory("${PROJECT_SOURCE_DIR}/resources/3rdparty/log4cplus-1.1.3-rc1")
-    include_directories("${PROJECT_SOURCE_DIR}/resources/3rdparty/log4cplus-1.1.3-rc1/include")
-    include_directories("${PROJECT_BINARY_DIR}/resources/3rdparty/log4cplus-1.1.3-rc1/include") # This adds the defines.hxx file
-
-    list(APPEND STORM_LINK_LIBRARIES log4cplusS)
-    if (UNIX AND NOT APPLE)
-        list(APPEND STORM_LINK_LIBRARIES rt)
-    endif(UNIX AND NOT APPLE)
-endif()
-#############################################################
-##
-##	Intel Threading Building Blocks (optional)
-##
-#############################################################
-
-set(TBB_INSTALL_DIR "${PROJECT_SOURCE_DIR}/resources/3rdparty/tbb42_20140122_merged-win-lin-mac")
-
-
-find_package(TBB)
-
-set(STORM_HAVE_INTELTBB 0)
-if (TBB_FOUND)
-        message(STATUS "StoRM - Found Intel TBB with interface version ${TBB_INTERFACE_VERSION}.")
-	if (STORM_USE_INTELTBB)
-                set(STORM_HAVE_INTELTBB 1)
-		message(STATUS "StoRM - Linking with Intel TBB in ${TBB_LIBRARY_DIRS}.")
-                link_directories(${TBB_LIBRARY_DIRS})
-                include_directories(${TBB_INCLUDE_DIRS})
-                list(APPEND STORM_LINK_LIBRARIES tbb tbbmalloc)	
-	endif(STORM_USE_INTELTBB)
-endif(TBB_FOUND)
-
-#############################################################
-##
-##	Threads
-##
-#############################################################
-
-find_package(Threads REQUIRED)
-include_directories(${THREADS_INCLUDE_DIRS})
-list(APPEND STORM_LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
-if (STORM_USE_COTIRE)
-	target_link_libraries(storm_unity ${CMAKE_THREAD_LIBS_INIT})
-endif(STORM_USE_COTIRE)
-
-if (MSVC)
-	# Add the DebugHelper DLL
-	set(CMAKE_CXX_STANDARD_LIBRARIES "${CMAKE_CXX_STANDARD_LIBRARIES} Dbghelp.lib")
-	target_link_libraries(storm "Dbghelp.lib")
-endif(MSVC)
-
-
 #############################################################
 ##
 ##	Cotire
@@ -665,7 +691,6 @@ if(DOXYGEN_FOUND)
     add_custom_target(doc ${DOXYGEN_EXECUTABLE} "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile" DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile" COMMENT "Generating API documentation with Doxygen" VERBATIM)
 endif(DOXYGEN_FOUND)
 
-
 #############################################################
 ##
 ##	CMake-generated Config File for StoRM
diff --git a/resources/3rdparty/CMakeLists.txt b/resources/3rdparty/CMakeLists.txt
index 19a64fa06..4bd155a0d 100644
--- a/resources/3rdparty/CMakeLists.txt
+++ b/resources/3rdparty/CMakeLists.txt
@@ -1,21 +1,17 @@
-add_custom_target(resources) 
+add_custom_target(resources)
 add_custom_target(test-resources)
 
-
-if(STORM_SUPPORT_XML_INPUT_FORMATS)
-    ExternalProject_Add(
-            xercesc
-            SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/xercesc-3.1.2
-            CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/xercesc-3.1.2/configure --prefix=${CMAKE_CURRENT_BINARY_DIR}/xercesc-3.1.2 --libdir=${CMAKE_CURRENT_BINARY_DIR}/xercesc-3.1.2/lib CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} CFLAGS=-O3 CXXFLAGS=-O3
-            PREFIX ${CMAKE_CURRENT_BINARY_DIR}/xercesc-3.1.2
-            BUILD_COMMAND make
-            BUILD_IN_SOURCE 0
-            LOG_CONFIGURE ON
-            LOG_BUILD ON
-            LOG_INSTALL ON
-    )
-    add_dependencies(resources xercesc)
-endif()
+ExternalProject_Add(
+    xercesc
+    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/xercesc-3.1.2
+    CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/xercesc-3.1.2/configure --prefix=${CMAKE_CURRENT_BINARY_DIR}/xercesc-3.1.2 --libdir=${CMAKE_CURRENT_BINARY_DIR}/xercesc-3.1.2/lib CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} CFLAGS=-O3 CXXFLAGS=-O3
+    PREFIX ${CMAKE_CURRENT_BINARY_DIR}/xercesc-3.1.2
+    BUILD_COMMAND make
+    BUILD_IN_SOURCE 0
+    LOG_CONFIGURE ON
+    LOG_BUILD ON
+    LOG_INSTALL ON
+)
 
 ExternalProject_Add(
     glpk
@@ -30,10 +26,6 @@ ExternalProject_Add(
     LOG_BUILD ON
     LOG_INSTALL ON
 )
-add_dependencies(resources glpk)
-
-set(GLPK_LIBRARIES  ${CMAKE_BINARY_DIR}/resources/3rdparty/glpk-4.57/lib/libglpk${DYNAMIC_EXT} PARENT_SCOPE)
-set(GLPK_INCLUDE_DIR ${CMAKE_BINARY_DIR}/resources/3rdparty/glpk-4.57/include PARENT_SCOPE)
 
 ExternalProject_Add(
     cudd3
@@ -48,31 +40,22 @@ ExternalProject_Add(
     LOG_BUILD ON
     LOG_INSTALL ON
 )
-add_dependencies(resources cudd3)
-
-ExternalProject_Get_Property(cudd3 binary_dir)
-set(CUDD3_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/cudd-3.0.0/include PARENT_SCOPE)
-
-set(CUDD3_SHARED_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/cudd-3.0.0/lib/libcudd${DYNAMIC_EXT} PARENT_SCOPE)
-set(CUDD3_STATIC_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/cudd-3.0.0/liblibcudd${STATIC_EXT} PARENT_SCOPE)
 
-set(STORM_SYLVAN_ROOT "${PROJECT_SOURCE_DIR}/resources/3rdparty/sylvan")
 ExternalProject_Add(
     sylvan
     DOWNLOAD_COMMAND ""
     PREFIX "sylvan"
-    SOURCE_DIR "${STORM_SYLVAN_ROOT}"
+    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/sylvan
     CMAKE_ARGS -DSYLVAN_BUILD_TEST=Off -DSYLVAN_BUILD_EXAMPLES=Off -DCMAKE_BUILD_TYPE=Release
     BINARY_DIR "${PROJECT_BINARY_DIR}/sylvan"
     INSTALL_COMMAND ""
     INSTALL_DIR "${PROJECT_BINARY_DIR}/sylvan"
 )
+ExternalProject_Get_Property(sylvan source_dir)
 ExternalProject_Get_Property(sylvan binary_dir)
-set(Sylvan_INCLUDE_DIR "${STORM_SYLVAN_ROOT}/src" PARENT_SCOPE)
+set(Sylvan_INCLUDE_DIR "${source_dir}/src" PARENT_SCOPE)
 set(Sylvan_LIBRARY "${binary_dir}/src/libsylvan.a" PARENT_SCOPE)
 
-add_dependencies(resources sylvan)
-
 ExternalProject_Add(
         googletest
         #For downloads (may be useful later!)
@@ -97,6 +80,3 @@ set(GTEST_INCLUDE_DIR ${source_dir}/include PARENT_SCOPE)
 # Specify MainTest's link libraries
 ExternalProject_Get_Property(googletest binary_dir)
 set(GTEST_LIBRARIES ${binary_dir}/libgtest.a ${binary_dir}/libgtest_main.a PARENT_SCOPE)
-
-add_dependencies(test-resources googletest)
-
diff --git a/resources/cmake/FindCUDD.cmake b/resources/cmake/FindCUDD.cmake
new file mode 100644
index 000000000..ab3efa92a
--- /dev/null
+++ b/resources/cmake/FindCUDD.cmake
@@ -0,0 +1,43 @@
+# - Try to find libglpk
+# Once done this will define
+#  CUDD_FOUND - System has cudd
+#  CUDD_INCLUDE_DIR - The cudd include directory
+#  CUDD_LIBRARIES - The libraries needed to use cudd
+#  CUDD_VERSION_STRING - The version of cudd ("major.minor.release")
+
+# use pkg-config to get the directories and then use these values
+# in the find_path() and find_library() calls
+find_package(PkgConfig QUIET)
+PKG_CHECK_MODULES(PC_CUDD QUIET cudd)
+
+find_path(CUDD_INCLUDE_DIR NAMES cudd.h
+   HINTS
+   ${PC_CUDD_INCLUDEDIR}
+   ${PC_CUDD_INCLUDE_DIRS}
+   PATH_SUFFIXES cudd
+   )
+
+find_library(CUDD_LIBRARIES NAMES cudd
+   HINTS
+   ${PC_CUDD_LIBDIR}
+   ${PC_CUDD_LIBRARY_DIRS}
+   )
+
+if(PC_CUDD_VERSION)
+    set(CUDD_VERSION_STRING ${PC_CUDD_VERSION})
+elseif(CUDD_INCLUDE_DIR AND EXISTS "${CUDD_INCLUDE_DIR}/cudd.h")
+    file(STRINGS "${CUDD_INCLUDE_DIR}/cudd.h" cudd_version
+         REGEX "^#define[\t ]+CUDD_VERSION[\t ]+\".+\"")
+    string(REGEX REPLACE "^#define[\t ]+CUDD_VERSION[\t ]+\"(.+)\"" "\\1"
+           CUDD_VERSION_STRING "${cudd_version}")
+    unset(cudd_version)
+endif()
+
+# handle the QUIETLY and REQUIRED arguments and set LIBXML2_FOUND to TRUE if
+# all listed variables are TRUE
+include(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(cudd
+                                  REQUIRED_VARS CUDD_LIBRARIES CUDD_INCLUDE_DIR
+                                  VERSION_VAR CUDD_VERSION_STRING)
+
+mark_as_advanced(CUDD_INCLUDE_DIR CUDD_LIBRARIES)
diff --git a/resources/cmake/FindGLPK.cmake b/resources/cmake/FindGLPK.cmake
new file mode 100644
index 000000000..02e58295b
--- /dev/null
+++ b/resources/cmake/FindGLPK.cmake
@@ -0,0 +1,49 @@
+# - Try to find libglpk
+# Once done this will define
+#  GLPK_FOUND - System has glpk
+#  GLPK_INCLUDE_DIR - The glpk include directory
+#  GLPK_LIBRARIES - The libraries needed to use glpk
+#  GLPK_VERSION_STRING - The version of glpk ("major.minor")
+
+# use pkg-config to get the directories and then use these values
+# in the find_path() and find_library() calls
+find_package(PkgConfig QUIET)
+PKG_CHECK_MODULES(PC_GLPK QUIET glpk)
+
+find_path(GLPK_INCLUDE_DIR NAMES glpk.h
+   HINTS
+   ${PC_GLPK_INCLUDEDIR}
+   ${PC_GLPK_INCLUDE_DIRS}
+   PATH_SUFFIXES glpk
+   )
+
+find_library(GLPK_LIBRARIES NAMES glpk
+   HINTS
+   ${PC_GLPK_LIBDIR}
+   ${PC_GLPK_LIBRARY_DIRS}
+   )
+
+if(PC_GLPK_VERSION)
+    set(GLPK_VERSION_STRING ${PC_GLPK_VERSION})
+elseif(GLPK_INCLUDE_DIR AND EXISTS "${GLPK_INCLUDE_DIR}/glpk.h")
+    file(STRINGS "${GLPK_INCLUDE_DIR}/glpk.h" glpk_major_version
+         REGEX "^#define[\t ]+GLP_MAJOR_VERSION[\t ]+.+")
+    file(STRINGS "${GLPK_INCLUDE_DIR}/glpk.h" glpk_minor_version
+         REGEX "^#define[\t ]+GLP_MINOR_VERSION[\t ]+.+")
+    string(REGEX REPLACE "^#define[\t ]+GLP_MAJOR_VERSION[\t ]+(.+)" "\\1"
+           glpk_major_version "${glpk_major_version}")
+    string(REGEX REPLACE "^#define[\t ]+GLP_MINOR_VERSION[\t ]+(.+)" "\\1"
+           glpk_minor_version "${glpk_minor_version}")
+	set(GLPK_VERSION_STRING "${glpk_major_version}.${glpk_minor_version}")
+    unset(glpk_major_version)
+    unset(glpk_minor_version)
+endif()
+
+# handle the QUIETLY and REQUIRED arguments and set LIBXML2_FOUND to TRUE if
+# all listed variables are TRUE
+include(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(glpk
+                                  REQUIRED_VARS GLPK_LIBRARIES GLPK_INCLUDE_DIR
+                                  VERSION_VAR GLPK_VERSION_STRING)
+
+mark_as_advanced(GLPK_INCLUDE_DIR GLPK_LIBRARIES)
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 1d60c395b..a2f77a882 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -17,8 +17,8 @@ add_dependencies(storm-performance-tests test-resources)
 
 include_directories(${GTEST_INCLUDE_DIR})
 enable_testing()
-target_link_libraries(storm-functional-tests ${GTEST_LIBRARIES})
-target_link_libraries(storm-performance-tests ${GTEST_LIBRARIES})
+target_link_libraries(storm-functional-tests ${STORM_TEST_LINK_LIBRARIES})
+target_link_libraries(storm-performance-tests ${STORM_TEST_LINK_LIBRARIES})
 add_test(NAME storm-functional-tests COMMAND storm-functional-tests)
 add_test(NAME storm-performance-tests COMMAND storm-performance-tests)
 
@@ -26,4 +26,4 @@ INSTALL(TARGETS storm-functional-tests storm-performance-tests
 	RUNTIME DESTINATION bin
 	LIBRARY DESTINATION lib
 	ARCHIVE DESTINATION lib
-)
\ No newline at end of file
+)