diff --git a/CHANGELOG.md b/CHANGELOG.md
index 62db344f0eb92af7ab3372a0b8d26d6a375cbddf..ef0e0431e1b4c6967407317b0beb1205459a4e1f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,7 @@
 # Master
 
+- All implementations of functions have been move to a `functions` subdirectory.
+
 - The `LocalDensity` class now has a template parameter `ElementOrIntersection`,
   which replaces the parameter `Position`.  As the name says, this parameter
   has to be a grid element, or a grid intersection.  As it turned out,
diff --git a/dune/gfe/CMakeLists.txt b/dune/gfe/CMakeLists.txt
index 5af12f1e165dabd8ec1a7daa25bc83eada378afd..b92328ab9107e50a2c98ddef966438c465b2530b 100644
--- a/dune/gfe/CMakeLists.txt
+++ b/dune/gfe/CMakeLists.txt
@@ -4,19 +4,13 @@ install(FILES
         cosseratstrain.hh
         cosseratvtkreader.hh
         cosseratvtkwriter.hh
-        embeddedglobalgfefunction.hh
         filereader.hh
         geodesicdifference.hh
         geodesicfefunctionadaptor.hh
         gfedifferencenormsquared.hh
-        globalgfefunction.hh
         gramschmidtsolver.hh
-        interpolationderivatives.hh
         linearalgebra.hh
-        localgeodesicfefunction.hh
         localgfetestfunctionbasis.hh
-        localprojectedfefunction.hh
-        localquickanddirtyfefunction.hh
         localtangentfefunction.hh
         maxnormtrustregion.hh
         mixedriemanniantrsolver.cc
@@ -42,3 +36,4 @@ install(FILES
 add_subdirectory("spaces")
 add_subdirectory("assemblers")
 add_subdirectory("densities")
+add_subdirectory("functions")
diff --git a/dune/gfe/functions/CMakeLists.txt b/dune/gfe/functions/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9003ea1405c1093e4d8b56c83920054f31140f9f
--- /dev/null
+++ b/dune/gfe/functions/CMakeLists.txt
@@ -0,0 +1,8 @@
+install(FILES
+        embeddedglobalgfefunction.hh
+        globalgfefunction.hh
+        interpolationderivatives.hh
+        localgeodesicfefunction.hh
+        localprojectedfefunction.hh
+        localquickanddirtyfefunction.hh
+        DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dune/gfe/functions)
diff --git a/dune/gfe/embeddedglobalgfefunction.hh b/dune/gfe/functions/embeddedglobalgfefunction.hh
similarity index 100%
rename from dune/gfe/embeddedglobalgfefunction.hh
rename to dune/gfe/functions/embeddedglobalgfefunction.hh
diff --git a/dune/gfe/globalgfefunction.hh b/dune/gfe/functions/globalgfefunction.hh
similarity index 100%
rename from dune/gfe/globalgfefunction.hh
rename to dune/gfe/functions/globalgfefunction.hh
diff --git a/dune/gfe/interpolationderivatives.hh b/dune/gfe/functions/interpolationderivatives.hh
similarity index 100%
rename from dune/gfe/interpolationderivatives.hh
rename to dune/gfe/functions/interpolationderivatives.hh
diff --git a/dune/gfe/localgeodesicfefunction.hh b/dune/gfe/functions/localgeodesicfefunction.hh
similarity index 100%
rename from dune/gfe/localgeodesicfefunction.hh
rename to dune/gfe/functions/localgeodesicfefunction.hh
diff --git a/dune/gfe/localprojectedfefunction.hh b/dune/gfe/functions/localprojectedfefunction.hh
similarity index 100%
rename from dune/gfe/localprojectedfefunction.hh
rename to dune/gfe/functions/localprojectedfefunction.hh
diff --git a/dune/gfe/localquickanddirtyfefunction.hh b/dune/gfe/functions/localquickanddirtyfefunction.hh
similarity index 100%
rename from dune/gfe/localquickanddirtyfefunction.hh
rename to dune/gfe/functions/localquickanddirtyfefunction.hh