diff --git a/CMakeLists.txt b/CMakeLists.txt
index 729755c606391c846a3c4d3c039861926e5e5225..d3d01f81a530f1f8bdde6966a13e29b73fc02334 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -53,6 +53,8 @@ project(ALL
     DESCRIPTION "A Loadbalacing Library"
     HOMEPAGE_URL "http://slms.pages.jsc.fz-juelich.de/websites/all-website/")
 
+include(GNUInstallDirs)
+
 # add custom find-scripts to module path
 set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
 
@@ -149,13 +151,13 @@ endif(CM_ALL_AUTO_DOC)
 install(EXPORT ALLTargets
     NAMESPACE ALL::
     FILE ALLTargets.cmake
-    DESTINATION lib/cmake/ALL
+    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ALL
     )
 
 include(CMakePackageConfigHelpers)
 configure_package_config_file(${CMAKE_CURRENT_BINARY_DIR}/Config.cmake.in
     "${CMAKE_CURRENT_BINARY_DIR}/ALLConfig.cmake"
-    INSTALL_DESTINATION lib/cmake/ALL
+    INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ALL
     )
 write_basic_package_version_file(
     "${CMAKE_CURRENT_BINARY_DIR}/ALLConfigVersion.cmake"
@@ -164,7 +166,7 @@ write_basic_package_version_file(
 install(FILES
     "${CMAKE_CURRENT_BINARY_DIR}/ALLConfig.cmake"
     "${CMAKE_CURRENT_BINARY_DIR}/ALLConfigVersion.cmake"
-    DESTINATION lib/cmake/ALL)
+    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ALL)
 
 # Create Makefile.libALL.in for inclusion in external Makefile projects
 # todo(s.schulz): The include directories and libraries should be auto
@@ -175,15 +177,15 @@ get_target_property(_liball_defines ALL INTERFACE_COMPILE_DEFINITIONS)
 list(TRANSFORM _liball_defines PREPEND " -D")
 list(JOIN _liball_defines " " _liball_defines_string)
 file(WRITE ${ALL_MAKEFILE_INC} "LIBALL_DEFINES := ${_liball_defines_string}\n")
-file(APPEND ${ALL_MAKEFILE_INC} "LIBALL_INCLUDE := -I\$(ALL_DIR)/include\n")
+file(APPEND ${ALL_MAKEFILE_INC} "LIBALL_INCLUDE := -I\$(ALL_DIR)/${CMAKE_INSTALL_INCLUDEDIR}\n")
 file(APPEND ${ALL_MAKEFILE_INC} "LIBALL_LIB :=\n")
 if(CM_ALL_FORTRAN)
-    file(APPEND ${ALL_MAKEFILE_INC} "LIBALL_LIB += \$(ALL_DIR)/lib/libALL_fortran.a \$(ALL_DIR)/lib/libALL.a -lstdc++\n")
-    file(APPEND ${ALL_MAKEFILE_INC} "LIBALL_INCLUDE += -I\$(ALL_DIR)/lib\n")
+    file(APPEND ${ALL_MAKEFILE_INC} "LIBALL_LIB += \$(ALL_DIR)/${CMAKE_INSTALL_LIBDIR}/libALL_fortran.a \$(ALL_DIR)/${CMAKE_INSTALL_LIBDIR}/libALL.a -lstdc++\n")
+    file(APPEND ${ALL_MAKEFILE_INC} "LIBALL_INCLUDE += -I\$(ALL_DIR)/${CMAKE_INSTALL_LIBDIR}\n")
 endif()
 if(CM_ALL_VORONOI)
-    file(APPEND ${ALL_MAKEFILE_INC} "LIBALL_LIB += \$(ALL_DIR)/lib/libvoro.a\n")
+    file(APPEND ${ALL_MAKEFILE_INC} "LIBALL_LIB += \$(ALL_DIR)/${CMAKE_INSTALL_LIBDIR}/libvoro.a\n")
 endif()
-install(FILES ${ALL_MAKEFILE_INC} DESTINATION lib/make)
+install(FILES ${ALL_MAKEFILE_INC} DESTINATION ${CMAKE_INSTALL_LIBDIR}/make)
 
 # vim: sw=4 ts=4 et
diff --git a/contrib/voro++/CMakeLists.txt b/contrib/voro++/CMakeLists.txt
index 5f1637d9d6e5ae0e51816900755afadd6750e857..1debf8159e32a8418e8c1fe38d1817ecda4801b7 100644
--- a/contrib/voro++/CMakeLists.txt
+++ b/contrib/voro++/CMakeLists.txt
@@ -1,7 +1,8 @@
 project(voro)
 cmake_minimum_required(VERSION 2.8)
+include(GNUInstallDirs)
 
 include_directories (include)
 add_subdirectory (src)
 
-install (DIRECTORY include/ DESTINATION include FILES_MATCHING PATTERN "*.hh")
\ No newline at end of file
+install (DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.hh")
diff --git a/contrib/voro++/src/CMakeLists.txt b/contrib/voro++/src/CMakeLists.txt
index daf286a6f5aab5321407093f67961bf5a521ab23..7fd194cff9d45431ecf695fbfd948d39b9cf689f 100644
--- a/contrib/voro++/src/CMakeLists.txt
+++ b/contrib/voro++/src/CMakeLists.txt
@@ -10,9 +10,9 @@ add_library (${MODULE_NAME} ${${MODULE_NAME}_SRCS})
 target_include_directories(${MODULE_NAME}
 	INTERFACE
 	"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include>"
-	"$<INSTALL_INTERFACE:include>")
+	"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
 
 install (TARGETS ${MODULE_NAME}
 	EXPORT ALLTargets
-		ARCHIVE DESTINATION lib
-		LIBRARY DESTINATION lib)
+		ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+		LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt
index ac05ee34cab74000dc230dc46066c3d26468ebdc..bdb14d05e72c188f2c3a26cb93e25b5427685bd1 100644
--- a/example/CMakeLists.txt
+++ b/example/CMakeLists.txt
@@ -12,9 +12,9 @@ endif(CM_ALL_VTK_OUTPUT)
 target_link_libraries (ALL_test LINK_PUBLIC ALL)
 
 install(TARGETS ALL_test 
-        RUNTIME DESTINATION bin
-        LIBRARY DESTINATION lib
-        INCLUDES DESTINATION include)
+	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+	INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 
 # helper program to convert ascii input to mpi binary input
 add_executable(ASCII2MPIBIN ascii2mpibin.cpp)
@@ -22,25 +22,25 @@ add_executable(ASCII2MPIBIN ascii2mpibin.cpp)
 target_link_libraries(ASCII2MPIBIN LINK_PUBLIC ALL)
 
 install(TARGETS ASCII2MPIBIN
-        RUNTIME DESTINATION bin
-        LIBRARY DESTINATION lib
-        INCLUDES DESTINATION include)
+	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+	INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 
 add_executable(create_logo create_logo.cpp)
 
 install(TARGETS create_logo
-        RUNTIME DESTINATION bin
-        LIBRARY DESTINATION lib
-        INCLUDES DESTINATION include)
+	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+	INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 
 add_executable(read_binary_output read_output.cpp)
 
 target_link_libraries(read_binary_output LINK_PUBLIC ALL)
 
 install(TARGETS read_binary_output
-        RUNTIME DESTINATION bin
-        LIBRARY DESTINATION lib
-        INCLUDES DESTINATION include)
+	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+	INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 
 add_executable(ALL_Staggered ALL_Staggered.cpp)
 if(CM_ALL_VTK_OUTPUT)
@@ -50,9 +50,9 @@ if(CM_ALL_VTK_OUTPUT)
 endif(CM_ALL_VTK_OUTPUT)
 target_link_libraries (ALL_Staggered LINK_PUBLIC ALL)
 install(TARGETS ALL_Staggered
-	RUNTIME DESTINATION bin
-	LIBRARY DESTINATION lib
-	INCLUDES DESTINATION include)
+	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+	INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 
 add_executable(ALL_Tensor ALL_Tensor.cpp)
 if(CM_ALL_VTK_OUTPUT)
@@ -62,9 +62,9 @@ if(CM_ALL_VTK_OUTPUT)
 endif(CM_ALL_VTK_OUTPUT)
 target_link_libraries (ALL_Tensor LINK_PUBLIC ALL)
 install(TARGETS ALL_Tensor
-	RUNTIME DESTINATION bin
-	LIBRARY DESTINATION lib
-	INCLUDES DESTINATION include)
+	RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+	LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+	INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 
 if(CM_ALL_VORONOI)
 	add_executable(ALL_Voronoi ALL_Voronoi.cpp)
@@ -74,9 +74,9 @@ if(CM_ALL_VORONOI)
 	endif(CM_ALL_VTK_OUTPUT)
 	target_link_libraries (ALL_Voronoi LINK_PUBLIC ALL)
 	install(TARGETS ALL_Voronoi
-		RUNTIME DESTINATION bin
-		LIBRARY DESTINATION lib
-		INCLUDES DESTINATION include)
+		RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+		LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+		INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 endif()
 
 if(CM_ALL_FORTRAN)
@@ -97,9 +97,9 @@ if(CM_ALL_FORTRAN)
     set_property(TARGET ALL_test_f PROPERTY LINKER_LANGUAGE Fortran)
 
     install(TARGETS ALL_test_f
-            RUNTIME DESTINATION bin
-            LIBRARY DESTINATION lib
-            INCLUDES DESTINATION include)
+	    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+	    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+	    INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 
     add_executable(ALL_test_f_obj ALL_test_f_obj.F90)
     if(CM_ALL_VTK_OUTPUT)
@@ -118,9 +118,9 @@ if(CM_ALL_FORTRAN)
     set_property(TARGET ALL_test_f_obj PROPERTY LINKER_LANGUAGE Fortran)
 
     install(TARGETS ALL_test_f_obj
-            RUNTIME DESTINATION bin
-            LIBRARY DESTINATION lib
-            INCLUDES DESTINATION include)
+	    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+	    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+	    INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 
     add_executable(ALL_Staggered_f ALL_Staggered_f.F90)
     if(CM_ALL_VTK_OUTPUT)
@@ -134,9 +134,9 @@ if(CM_ALL_FORTRAN)
     list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}/modules)
     set_property(TARGET ALL_Staggered_f PROPERTY LINKER_LANGUAGE Fortran)
     install(TARGETS ALL_Staggered_f
-            RUNTIME DESTINATION bin
-            LIBRARY DESTINATION lib
-            INCLUDES DESTINATION include)
+	    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+	    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+	    INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 
     add_executable(ALL_Tensor_f ALL_Tensor_f.F90)
     if(CM_ALL_VTK_OUTPUT)
@@ -150,7 +150,7 @@ if(CM_ALL_FORTRAN)
     list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}/modules)
     set_property(TARGET ALL_Tensor_f PROPERTY LINKER_LANGUAGE Fortran)
     install(TARGETS ALL_Tensor_f
-            RUNTIME DESTINATION bin
-            LIBRARY DESTINATION lib
-            INCLUDES DESTINATION include)
+	    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+	    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+	    INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 endif(CM_ALL_FORTRAN)    
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 676a105ae0302b16bd60c45f3d3ec05a6b884871..f467699f8ef123120a6ec0d4a20fc0fa3bb3cef8 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -29,7 +29,7 @@ target_link_libraries(ALL PUBLIC ${MPI_CXX_LINK_FLAGS} ${MPI_CXX_LIBRARIES})
 target_include_directories (ALL
     PUBLIC
     "$<BUILD_INTERFACE:${ALL_INCLUDE_DIR}>"
-    "$<INSTALL_INTERFACE:include>")
+    "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
 
 # For inclusion in Fortran code, explicit linking against the C++ standard
 # library is necessary.
@@ -37,13 +37,13 @@ target_link_libraries(ALL INTERFACE stdc++)
 
 install(TARGETS ALL
     EXPORT ALLTargets
-    RUNTIME DESTINATION bin
-    LIBRARY DESTINATION lib
-    ARCHIVE DESTINATION lib
-    INCLUDES DESTINATION include)
+    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 
 install(FILES ${ALL_HEADER_FILES}
-    DESTINATION include)
+    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 
 if (CM_ALL_FORTRAN)
     set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../modules)
@@ -54,18 +54,18 @@ if (CM_ALL_FORTRAN)
     target_include_directories(ALL_fortran
         INTERFACE
         "$<BUILD_INTERFACE:${CMAKE_Fortran_MODULE_DIRECTORY}>"
-        "$<INSTALL_INTERFACE:lib>")
+        "$<INSTALL_INTERFACE:${CMAKE_INSTALL_LIBDIR}>")
     target_link_libraries(ALL_fortran PUBLIC ${MPI_Fortran_LINK_FLAGS} ${MPI_Fortran_LIBRARIES})
     target_link_libraries(ALL_fortran PUBLIC ALL)
 
     install(TARGETS ALL_fortran
         EXPORT ALLTargets
-        RUNTIME DESTINATION bin
-        LIBRARY DESTINATION lib
-        ARCHIVE DESTINATION lib
-        INCLUDES DESTINATION include)
+        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+        INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
 
-    install(DIRECTORY ${CMAKE_BINARY_DIR}/modules/ DESTINATION lib)
+    install(DIRECTORY ${CMAKE_BINARY_DIR}/modules/ DESTINATION ${CMAKE_INSTALL_LIBDIR})
 endif(CM_ALL_FORTRAN)
 
 add_executable(Amalgamate Amalgamate.c)