diff --git a/dune/functions/functionspacebases/lagrangedgbasis.hh b/dune/functions/functionspacebases/lagrangedgbasis.hh
index 81689c7186292e3aa042794ba57d18c4fffd45ac..e0816f19cc67d2c0cf35a07269a8e26d6da146e9 100644
--- a/dune/functions/functionspacebases/lagrangedgbasis.hh
+++ b/dune/functions/functionspacebases/lagrangedgbasis.hh
@@ -291,6 +291,46 @@ protected:
 
 
 
+
+namespace BasisBuilder {
+
+namespace Imp {
+
+template<std::size_t k>
+class LagrangeDGPreBasisFactory
+{
+public:
+  static const std::size_t requiredMultiIndexSize = 1;
+
+  template<class MultiIndex, class GridView>
+  auto makePreBasis(const GridView& gridView) const
+  {
+    return LagrangeDGPreBasis<GridView, k, MultiIndex>(gridView);
+  }
+
+};
+
+} // end namespace BasisBuilder::Imp
+
+
+
+/**
+ * \brief Create a pre-basis factory that can create a LagrangeDG pre-basis
+ *
+ * \ingroup FunctionSpaceBasesImplementations
+ *
+ * \tparam k   The polynomial order of the ansatz functions
+ */
+template<std::size_t k>
+auto lagrangeDG()
+{
+  return Imp::LagrangeDGPreBasisFactory<k>();
+}
+
+} // end namespace BasisBuilder
+
+
+
 // *****************************************************************************
 // This is the actual global basis implementation based on the reusable parts.
 // *****************************************************************************
diff --git a/dune/functions/functionspacebases/pq1nodalbasis.hh b/dune/functions/functionspacebases/pq1nodalbasis.hh
index 3949ad726293fdc0211a21d6dbccc35831c3da21..b05f0de7ec37ee6fc753eeaea0df65f175ed84d4 100644
--- a/dune/functions/functionspacebases/pq1nodalbasis.hh
+++ b/dune/functions/functionspacebases/pq1nodalbasis.hh
@@ -285,6 +285,43 @@ protected:
 
 
 
+namespace BasisBuilder {
+
+namespace Imp {
+
+class PQ1PreBasisFactory
+{
+public:
+  static const std::size_t requiredMultiIndexSize = 1;
+
+  template<class MultiIndex, class GridView>
+  auto makePreBasis(const GridView& gridView) const
+  {
+    return PQ1PreBasis<GridView, MultiIndex>(gridView);
+  }
+
+};
+
+} // end namespace BasisBuilder::Imp
+
+
+
+/**
+ * \brief Create a pre-basis factory that can create a PQ_1 pre-basis
+ *
+ * \ingroup FunctionSpaceBasesImplementations
+ *
+ * \tparam k   The polynomial order of ansatz functions
+ */
+auto pq1Nodal()
+{
+  return Imp::PQ1PreBasisFactory();
+}
+
+} // end namespace BasisBuilder
+
+
+
 /** \brief Nodal basis of a scalar first-order Lagrangian finite element space
  *
  * \ingroup FunctionSpaceBasesImplementations
diff --git a/dune/functions/functionspacebases/test/CMakeLists.txt b/dune/functions/functionspacebases/test/CMakeLists.txt
index 4f3490af911607c638fd0555cb44c58b26ccf8d7..5da78ff4e5d4269bd8d56df30adfc4b0f2669a64 100644
--- a/dune/functions/functionspacebases/test/CMakeLists.txt
+++ b/dune/functions/functionspacebases/test/CMakeLists.txt
@@ -7,6 +7,10 @@ dune_add_test(SOURCES brezzidouglasmarinibasistest.cc)
 
 dune_add_test(SOURCES gridviewfunctionspacebasistest.cc)
 
+dune_add_test(SOURCES lagrangedgbasistest.cc)
+
+dune_add_test(SOURCES pq1nodalbasistest.cc)
+
 dune_add_test(SOURCES taylorhoodbasistest.cc)
 
 dune_add_test(SOURCES rannacherturekbasistest.cc)
diff --git a/dune/functions/functionspacebases/test/lagrangedgbasistest.cc b/dune/functions/functionspacebases/test/lagrangedgbasistest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..0ad61be724a65f32bb52404c317a94c87d2b575b
--- /dev/null
+++ b/dune/functions/functionspacebases/test/lagrangedgbasistest.cc
@@ -0,0 +1,56 @@
+// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+// vi: set et ts=4 sw=2 sts=2:
+#include <config.h>
+
+#include <iostream>
+
+#include <dune/common/exceptions.hh>
+#include <dune/common/parallel/mpihelper.hh>
+
+#include <dune/grid/yaspgrid.hh>
+
+#include <dune/functions/functionspacebases/lagrangedgbasis.hh>
+
+#include <dune/functions/functionspacebases/test/basistest.hh>
+
+using namespace Dune;
+using namespace Dune::Functions;
+
+int main (int argc, char* argv[])
+{
+  Dune::MPIHelper::instance(argc, argv);
+
+  Dune::TestSuite test;
+
+
+
+  // Generate grid for testing
+  const int dim = 2;
+  typedef YaspGrid<dim> GridType;
+  FieldVector<double,dim> l(1);
+  std::array<int,dim> elements = {{10, 10}};
+  GridType grid(l,elements);
+
+
+
+  // check LagrangeDGBasis created 'manually'
+  {
+    typedef GridType::LeafGridView GridView;
+    const GridView& gridView = grid.leafGridView();
+    LagrangeDGBasis<GridView,2> basis(gridView);
+    test.subTest(checkBasis(basis));
+  }
+
+
+
+  // check LagrangeDGBasis created using basis builder mechanism
+  {
+    using namespace Functions::BasisBuilder;
+    auto basis = makeBasis(grid.leafGridView(), lagrangeDG<2>());
+    test.subTest(checkBasis(basis));
+  }
+
+
+
+  return test.exit();
+}
diff --git a/dune/functions/functionspacebases/test/pq1nodalbasistest.cc b/dune/functions/functionspacebases/test/pq1nodalbasistest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..fa1e6d832e718775eb2821bd5e2d5e7f847aacd1
--- /dev/null
+++ b/dune/functions/functionspacebases/test/pq1nodalbasistest.cc
@@ -0,0 +1,56 @@
+// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+// vi: set et ts=4 sw=2 sts=2:
+#include <config.h>
+
+#include <iostream>
+
+#include <dune/common/exceptions.hh>
+#include <dune/common/parallel/mpihelper.hh>
+
+#include <dune/grid/yaspgrid.hh>
+
+#include <dune/functions/functionspacebases/pq1nodalbasis.hh>
+
+#include <dune/functions/functionspacebases/test/basistest.hh>
+
+using namespace Dune;
+using namespace Dune::Functions;
+
+int main (int argc, char* argv[])
+{
+  Dune::MPIHelper::instance(argc, argv);
+
+  Dune::TestSuite test;
+
+
+
+  // Generate grid for testing
+  const int dim = 2;
+  typedef YaspGrid<dim> GridType;
+  FieldVector<double,dim> l(1);
+  std::array<int,dim> elements = {{10, 10}};
+  GridType grid(l,elements);
+
+
+
+  // check PQ1NodalBasis created 'manually'
+  {
+    typedef GridType::LeafGridView GridView;
+    const GridView& gridView = grid.leafGridView();
+    PQ1NodalBasis<GridView> basis(gridView);
+    test.subTest(checkBasis(basis));
+  }
+
+
+
+  // check PQ1NodalBasis created using basis builder mechanism
+  {
+    using namespace Functions::BasisBuilder;
+    auto basis = makeBasis(grid.leafGridView(), pq1Nodal());
+    test.subTest(checkBasis(basis));
+  }
+
+
+
+  return test.exit();
+}