diff --git a/CMakeLists.txt b/CMakeLists.txt
index 68d8d62fb1273fbad0212fe46c4d2f64366bd733..d4667108d83bfe34cec3cb23ccd830b84fa38709 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -145,8 +145,6 @@ if(HAVE_TIME_H AND HAVE_SYS_TIME_H)
   set(TIME_WITH_SYS_TIME True)
 endif()
 
-set(CMAKE_INSTALL_PKGINCLUDEDIR "${CMAKE_INSTALL_INCLUDEDIR}/ug")
-
 add_subdirectory(dune)
 add_subdirectory(cmake/modules)
 # set variable names for config.h
diff --git a/dune/uggrid/CMakeLists.txt b/dune/uggrid/CMakeLists.txt
index 117283b0ef80ed058080751052310c0f41ebcc0d..6f7faae7ce6a1d4957dd809193706e5b301d9d1f 100644
--- a/dune/uggrid/CMakeLists.txt
+++ b/dune/uggrid/CMakeLists.txt
@@ -7,7 +7,7 @@ add_subdirectory(parallel)
 
 install(
   FILES ugdevices.h commands.h initug.h
-  DESTINATION ${CMAKE_INSTALL_PKGINCLUDEDIR})
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/uggrid)
 
 add_library(devices OBJECT ugdevices.cc)
 ug_add_dim_libs(ugui OBJECT ugdevices.cc commands.cc)
diff --git a/dune/uggrid/domain/CMakeLists.txt b/dune/uggrid/domain/CMakeLists.txt
index b2a2bb9a5faf2013e26c014d28de743febdb3cdf..a8bcc749428e3866f0912ef659d5a3d717c56e19 100644
--- a/dune/uggrid/domain/CMakeLists.txt
+++ b/dune/uggrid/domain/CMakeLists.txt
@@ -6,4 +6,4 @@ ug_add_dim_libs(domS OBJECT
 install(FILES
   domain.h
   std_domain.h
-  DESTINATION ${CMAKE_INSTALL_PKGINCLUDEDIR})
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/uggrid/domain)
diff --git a/dune/uggrid/gm/CMakeLists.txt b/dune/uggrid/gm/CMakeLists.txt
index 98fdd95f56d1edc38c297e299a564dc71c882c92..67f47a6926fc1d71a75a77a136b3d393f66b0baa 100644
--- a/dune/uggrid/gm/CMakeLists.txt
+++ b/dune/uggrid/gm/CMakeLists.txt
@@ -4,8 +4,6 @@ set(SOURCES  algebra.cc enrol.cc evm.cc mgio.cc
   dlmgr.cc gmcheck.cc er.cc mgheapmgr.cc rm-write2file.cc )
 # put this "template" into distribution-tarball as well
 set(EXTRA_DIST  dlmgr.t)
-set(gminclude_HEADERS  cw.h elements.h gm.h pargm.h evm.h
-  shapes.h ugm.h dlmgr.h algebra.h rm.h refine.h rm-write2file.h)
 
 ug_add_dim_libs(ug_gm OBJECT SOURCES ${SOURCES})# OBJECT_DIM_LIBS gg)
 
@@ -27,4 +25,17 @@ add_executable(rm3-writeRefRules2file rm-writeRefRules2file.cc rm-write2file.h r
 target_compile_definitions(rm3-writeRefRules2file PRIVATE -DUG_DIM_3)
 target_link_libraries(rm3-writeRefRules2file PRIVATE ugL ugS3 ${DUNE_LIBS})
 
-install(FILES ${gminclude_HEADERS} DESTINATION ${CMAKE_INSTALL_PKGINCLUDEDIR})
+install(FILES
+  algebra.h
+  cw.h
+  dlmgr.h
+  elements.h
+  evm.h
+  gm.h
+  pargm.h
+  refine.h
+  rm.h
+  rm-write2file.h
+  shapes.h
+  ugm.h
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/uggrid/gm)
diff --git a/dune/uggrid/low/CMakeLists.txt b/dune/uggrid/low/CMakeLists.txt
index 0ec512e7d50615eaa6def010d81ace335f794059..8a8d8b611d61a8903d5bc9b07717eaa6d7b56406 100644
--- a/dune/uggrid/low/CMakeLists.txt
+++ b/dune/uggrid/low/CMakeLists.txt
@@ -1,10 +1,5 @@
 add_subdirectory(test)
 
-# normal headers
-set(lowinclude_HEADERS  heaps.h ugenv.h ugstruct.h misc.h debug.h ugtypes.h
-  general.h dimension.h ugtimer.h scan.h
-  defaults.h fileopen.h namespace.h)
-
 # dimension-independent lib
 add_library(low OBJECT ugenv.cc heaps.cc fifo.cc misc.cc defaults.cc initlow.cc
   fileopen.cc ugstruct.cc debug.cc bio.cc scan.cc ugtimer.cc)
@@ -14,4 +9,18 @@ if(DUNE_BUILD_BOTH_LIBS)
   set_property(TARGET low PROPERTY POSITION_INDEPENDENT_CODE TRUE)
 endif()
 
-install(FILES ${lowinclude_HEADERS} DESTINATION  ${CMAKE_INSTALL_PKGINCLUDEDIR})
+install(FILES
+  debug.h
+  defaults.h
+  dimension.h
+  fileopen.h
+  general.h
+  heaps.h
+  misc.h
+  namespace.h
+  scan.h
+  ugenv.h
+  ugstruct.h
+  ugtimer.h
+  ugtypes.h
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/uggrid/low)
diff --git a/dune/uggrid/numerics/CMakeLists.txt b/dune/uggrid/numerics/CMakeLists.txt
index 5dec31675cc1dc4c4cd8002b4bdab8d8fae7378e..cbcce48e666516f25b4239b4db956666c49e5d01 100644
--- a/dune/uggrid/numerics/CMakeLists.txt
+++ b/dune/uggrid/numerics/CMakeLists.txt
@@ -6,4 +6,4 @@ install(FILES
   np.h
   sm.h
   udm.h
-  DESTINATION ${CMAKE_INSTALL_PKGINCLUDEDIR})
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/uggrid/numerics)
diff --git a/dune/uggrid/parallel/ddd/CMakeLists.txt b/dune/uggrid/parallel/ddd/CMakeLists.txt
index 334e191b12c51dc91360f529c2616e9e7b3377f5..ea5cc323a091eb7221b67c7c988e8e9ee3ba86ee 100644
--- a/dune/uggrid/parallel/ddd/CMakeLists.txt
+++ b/dune/uggrid/parallel/ddd/CMakeLists.txt
@@ -3,6 +3,7 @@ install(FILES
   dddcontext.hh
   dddtypes.hh
   dddtypes_impl.hh
+  include/ddd.h
   DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/uggrid/parallel/ddd)
 
 if(UG_ENABLE_PARALLEL)
@@ -19,7 +20,4 @@ if(UG_ENABLE_PARALLEL)
   if(HAVE_MPI)
     ug_add_dim_libs(ddd OBJECT ddd.cc)
   endif()
-
-  # header files that are not explicitly used but need to be distributed
-  install(FILES include/ddd.h DESTINATION ${CMAKE_INSTALL_PKGINCLUDEDIR})
 endif()
diff --git a/dune/uggrid/parallel/ddd/basic/CMakeLists.txt b/dune/uggrid/parallel/ddd/basic/CMakeLists.txt
index 3073a40c5e7d701815e0d965e2fdefb287f1a5ff..bda6ee86ca9b31830ee25d6362af52f2f1f2a0e0 100644
--- a/dune/uggrid/parallel/ddd/basic/CMakeLists.txt
+++ b/dune/uggrid/parallel/ddd/basic/CMakeLists.txt
@@ -6,4 +6,4 @@ if(MPI_C_FOUND)
 endif()
 
 install(FILES notify.h lowcomm.h oopp.h ooppcc.h
-  DESTINATION ${CMAKE_INSTALL_PKGINCLUDEDIR})
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/uggrid/parallel/ddd/basic)
diff --git a/dune/uggrid/parallel/ddd/ctrl/CMakeLists.txt b/dune/uggrid/parallel/ddd/ctrl/CMakeLists.txt
index f0b9977a73d3e15250fa27056b03f480b6205a3a..ab5f4d3ae775ccbf042d970d53e06430bebcc56e 100644
--- a/dune/uggrid/parallel/ddd/ctrl/CMakeLists.txt
+++ b/dune/uggrid/parallel/ddd/ctrl/CMakeLists.txt
@@ -2,4 +2,6 @@ if(MPI_C_FOUND)
   ug_add_dim_libs(ctrl OBJECT SOURCES cons.cc debug.cc stat.cc)
 endif()
 
-install(FILES stat.h DESTINATION ${CMAKE_INSTALL_PKGINCLUDEDIR})
+install(FILES
+  stat.h
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/uggrid/parallel/ddd/ctrl)
diff --git a/dune/uggrid/parallel/ddd/if/CMakeLists.txt b/dune/uggrid/parallel/ddd/if/CMakeLists.txt
index 58964eff2d50d89544c381c6090a15f0f19f63e3..e5a79d2e80b263e25b1f309cf05ec305879947da 100644
--- a/dune/uggrid/parallel/ddd/if/CMakeLists.txt
+++ b/dune/uggrid/parallel/ddd/if/CMakeLists.txt
@@ -3,4 +3,6 @@ set(SOURCES  ifcreate.cc ifuse.cc ifcmds.cc ifcheck.cc ifobjsc.cc)
 if(MPI_C_FOUND)
   ug_add_dim_libs(if OBJECT SOURCES ${SOURCES})
 endif()
-install(FILES if.h DESTINATION ${CMAKE_INSTALL_PKGINCLUDEDIR})
+install(FILES
+  if.h
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/uggrid/parallel/ddd/if)
diff --git a/dune/uggrid/parallel/ddd/join/CMakeLists.txt b/dune/uggrid/parallel/ddd/join/CMakeLists.txt
index 058b07d43689bbf4b1dc8640afdf62f90b5422ce..a9d8b1da0c77523a86318ba1ac9af33cdec04a3d 100644
--- a/dune/uggrid/parallel/ddd/join/CMakeLists.txt
+++ b/dune/uggrid/parallel/ddd/join/CMakeLists.txt
@@ -1,6 +1,8 @@
 set(SOURCES  jcmds.cc join.cc)
 
-install(FILES join.h DESTINATION ${CMAKE_INSTALL_PKGINCLUDEDIR})
+install(FILES
+  join.h
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/uggrid/parallel/ddd/join)
 
 if(MPI_C_FOUND)
   ug_add_dim_libs(join OBJECT SOURCES ${SOURCES})
diff --git a/dune/uggrid/parallel/ddd/xfer/CMakeLists.txt b/dune/uggrid/parallel/ddd/xfer/CMakeLists.txt
index ea3fd1a066b26fedc4e1acaf7f10b0df1dfe0b96..ad3286cf014005cdf5bbd485b06187e07daa3a8a 100644
--- a/dune/uggrid/parallel/ddd/xfer/CMakeLists.txt
+++ b/dune/uggrid/parallel/ddd/xfer/CMakeLists.txt
@@ -10,4 +10,7 @@ set(SOURCES  cmds.cc
 if(MPI_C_FOUND)
   ug_add_dim_libs(xfer OBJECT SOURCES ${SOURCES})
 endif()
-install(FILES sll.h xfer.h  DESTINATION ${CMAKE_INSTALL_PKGINCLUDEDIR})
+
+install(FILES
+  sll.h xfer.h
+  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/uggrid/parallel/ddd/xfer)
diff --git a/dune/uggrid/parallel/dddif/CMakeLists.txt b/dune/uggrid/parallel/dddif/CMakeLists.txt
index c78735c5a96ca1ad05e78f584af52afd7ee0726d..609c8d9292cd40e94c27df6a210d97d7a931bc2a 100644
--- a/dune/uggrid/parallel/dddif/CMakeLists.txt
+++ b/dune/uggrid/parallel/dddif/CMakeLists.txt
@@ -1,4 +1,4 @@
-install(FILES parallel.h DESTINATION ${CMAKE_INSTALL_PKGINCLUDEDIR})
+install(FILES parallel.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/uggrid/parallel/dddif/)
 
 if(MPI_C_FOUND)
   include_directories(${PROJECT_SOURCE_DIR}/dune/uggrid/parallel/ddd/include)
diff --git a/dune/uggrid/parallel/ppif/CMakeLists.txt b/dune/uggrid/parallel/ppif/CMakeLists.txt
index fe0c64f5078270ae8e2efdf8375f714bd0fc84b7..25aaf91249013dd68c1995917b34d6bb895952da 100644
--- a/dune/uggrid/parallel/ppif/CMakeLists.txt
+++ b/dune/uggrid/parallel/ppif/CMakeLists.txt
@@ -1,11 +1,10 @@
 install(FILES
+  ppif.h
   ppifcontext.hh
   ppiftypes.hh
   DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/uggrid/parallel/ppif)
 
 if(UG_ENABLE_PARALLEL)
-  install(FILES ppif.h DESTINATION ${CMAKE_INSTALL_PKGINCLUDEDIR})
-
   if(MPI_C_FOUND)
     add_library(ppifmpi OBJECT ppif.cc)
     add_dune_mpi_flags(ppifmpi OBJECT)