diff --git a/.gitsuper b/.gitsuper
index fa5637f3ba869475931dc37c775c59a0548f960f..caf45ba6aa06bc96481dba398115e73f2e90e720 100644
--- a/.gitsuper
+++ b/.gitsuper
@@ -1,10 +1,11 @@
 [supermodule]
-remote = git@github.com:dune-community/dune-xt-super.git
+remote = git@github.com:dune-community/dune-gdt-super.git
 status = 1a3bcab04b011a5d6e44f9983cae6ff89fa695e8 bin (heads/master)
-	 aa78a422c2e51d215a3aaca0678d358aee314530 config.opts (remotes/origin/HEAD)
+	 28c9ce81c14c878a71e907ab05b9bb72df77883e config.opts (heads/master)
 	 f308c6637edd65dcb83c4c1a46feaf05b958130e dune-alugrid (v2.6.0-7-gf308c663)
 	 76d7f0c9886a061571cb8dc66dd45a4ef86e7a58 dune-common (v2.2.1-2269-g76d7f0c9)
-	 c4e11445c1aa0f61b4a83f2e61c93ece231085f2 dune-geometry (v2.2.0-839-gc4e1144)
+	+7f6787bf30eab49da0d1dcfd453b3aa9b982e174 dune-gdt (heads/saddlepoint)
+	 5235397bc16d24c759a1672fed7b8cfde4852e52 dune-geometry (v2.2.0-834-g5235397)
 	 af5766f0df47e3d0b62ea486efb9cdbf8e1cfc52 dune-grid (v2.2.0-2671-gaf5766f0d)
 	 1369ae9329d0928480d6b18ed772fc77e1abf752 dune-grid-glue (v2.4.0-161-g1369ae9)
 	 ef68ae0ec40f9d369e4ea9b31e560af6af545bf6 dune-istl (v2.6.0-4-gef68ae0e)
@@ -12,13 +13,13 @@ status = 1a3bcab04b011a5d6e44f9983cae6ff89fa695e8 bin (heads/master)
 	 6d2a4680493a2483d53f9dd05a19dd6b5f436572 dune-pybindxi (v2.2.1-30-g6d2a468)
 	 58bd932e2311a288e0163d041f836b50f19111cb dune-testtools (remotes/origin/testname_listing_hack2.6)
 	 07f9700459c616186737a9a34277f2edee76f475 dune-uggrid (v2.6.0-1-g07f97004)
-	+14ea1e95d955441fa6cc8b7b98e60edfaf6c4e5a dune-xt-common (heads/update_vcsetup2)
-	+e0666c64abbc4db9ef3a19e7cc68d60907f36650 dune-xt-data (heads/update_vcsetup2)
-	+d04769bedd944ff586ef57c7b16f09be50873ab3 dune-xt-functions (heads/update_vcsetup2)
-	+6b1903c2379ffb28ae0462226d467dae8c40b5bf dune-xt-grid (heads/update_vcsetup2)
-	 82bef18a993f9a475b3b45d209def8e34e55e1fe dune-xt-la (heads/master)
+	+ef03286d66302d2af5a38b8047da47ee16214006 dune-xt-common (heads/master)
+	 0307552d17c4d383d218b8e1a2d1064a2768ddd7 dune-xt-data (heads/master)
+	 a78d5c61c829457c2b7f6a51ea7f9dbd7ad44b10 dune-xt-functions (heads/master)
+	 b9a83ae22caa02389a2430cd61085c47d4153b33 dune-xt-grid (heads/master)
+	+40a051d255e05a84191726b515d43779f2a89b1b dune-xt-la (heads/dailywork_tleibner)
 	 09d0378f616b94d68bcdd9fc6114813181849ec0 scripts (heads/master)
-commit = d458f6e095e606a46a36f9e226600b05a0242090
+commit = fbf04258130187925b17e8c0482d280e9ae111e2
 
 [submodule.bin]
 remote = git@github.com:dune-community/local-bin.git
@@ -28,7 +29,7 @@ commit = 1a3bcab04b011a5d6e44f9983cae6ff89fa695e8
 [submodule.config.opts]
 remote = git@github.com:dune-community/config.opts.git
 status = 
-commit = aa78a422c2e51d215a3aaca0678d358aee314530
+commit = 28c9ce81c14c878a71e907ab05b9bb72df77883e
 
 [submodule.dune-alugrid]
 remote = https://github.com/dune-mirrors/dune-alugrid.git
@@ -40,13 +41,18 @@ remote = git@github.com:dune-community/dune-common.git
 status = 
 commit = 76d7f0c9886a061571cb8dc66dd45a4ef86e7a58
 
+[submodule.dune-gdt]
+remote = git@github.com:dune-community/dune-gdt.git
+status = c0b1735fab0ecbd4bb4f1eaa27cb65fe813e98f0 .vcsetup (heads/master)
+commit = 7f6787bf30eab49da0d1dcfd453b3aa9b982e174
+
 [submodule.dune-geometry]
-remote = http://github.com/dune-community/dune-geometry.git
+remote = git@github.com:dune-community/dune-geometry.git
 status = 
-commit = c4e11445c1aa0f61b4a83f2e61c93ece231085f2
+commit = 5235397bc16d24c759a1672fed7b8cfde4852e52
 
 [submodule.dune-grid]
-remote = http://github.com/dune-community/dune-grid.git
+remote = git@github.com:dune-community/dune-grid.git
 status = 
 commit = af5766f0df47e3d0b62ea486efb9cdbf8e1cfc52
 
@@ -56,22 +62,22 @@ status =
 commit = 1369ae9329d0928480d6b18ed772fc77e1abf752
 
 [submodule.dune-istl]
-remote = http://github.com/dune-mirrors/dune-istl.git
+remote = https://github.com/dune-mirrors/dune-istl.git
 status = 
 commit = ef68ae0ec40f9d369e4ea9b31e560af6af545bf6
 
 [submodule.dune-localfunctions]
-remote = http://github.com/dune-mirrors/dune-localfunctions.git
+remote = https://github.com/dune-mirrors/dune-localfunctions.git
 status = 
 commit = 5a1f77d7a0a41c2d065b29f00dda0871ec70337b
 
 [submodule.dune-pybindxi]
 remote = git@github.com:dune-community/dune-pybindxi.git
-status = c0b1735fab0ecbd4bb4f1eaa27cb65fe813e98f0 .vcsetup (remotes/origin/HEAD)
+status = c0b1735fab0ecbd4bb4f1eaa27cb65fe813e98f0 .vcsetup (heads/master)
 commit = 6d2a4680493a2483d53f9dd05a19dd6b5f436572
 
 [submodule.dune-testtools]
-remote = https://github.com/dune-community/dune-testtools
+remote = git@github.com:dune-community/dune-testtools.git
 status = 
 commit = 58bd932e2311a288e0163d041f836b50f19111cb
 
@@ -82,31 +88,31 @@ commit = 07f9700459c616186737a9a34277f2edee76f475
 
 [submodule.dune-xt-common]
 remote = git@github.com:dune-community/dune-xt-common.git
-status = cc1bbdac283f4b9323c64345030f1b8f634b88d5 .vcsetup (heads/master)
-commit = 14ea1e95d955441fa6cc8b7b98e60edfaf6c4e5a
+status = +c0b1735fab0ecbd4bb4f1eaa27cb65fe813e98f0 .vcsetup (heads/master)
+commit = ef03286d66302d2af5a38b8047da47ee16214006
 
 [submodule.dune-xt-data]
-remote = https://github.com/dune-community/dune-xt-data
-status = cc1bbdac283f4b9323c64345030f1b8f634b88d5 .vcsetup (remotes/origin/HEAD)
-commit = e0666c64abbc4db9ef3a19e7cc68d60907f36650
+remote = git@github.com:dune-community/dune-xt-data
+status = c0b1735fab0ecbd4bb4f1eaa27cb65fe813e98f0 .vcsetup (heads/master)
+commit = 0307552d17c4d383d218b8e1a2d1064a2768ddd7
 
 [submodule.dune-xt-functions]
 remote = git@github.com:dune-community/dune-xt-functions.git
-status = cc1bbdac283f4b9323c64345030f1b8f634b88d5 .vcsetup (remotes/origin/HEAD)
-commit = d04769bedd944ff586ef57c7b16f09be50873ab3
+status = c0b1735fab0ecbd4bb4f1eaa27cb65fe813e98f0 .vcsetup (heads/master)
+commit = a78d5c61c829457c2b7f6a51ea7f9dbd7ad44b10
 
 [submodule.dune-xt-grid]
 remote = git@github.com:dune-community/dune-xt-grid.git
-status = cc1bbdac283f4b9323c64345030f1b8f634b88d5 .vcsetup (remotes/origin/HEAD)
-commit = 6b1903c2379ffb28ae0462226d467dae8c40b5bf
+status = c0b1735fab0ecbd4bb4f1eaa27cb65fe813e98f0 .vcsetup (heads/master)
+commit = b9a83ae22caa02389a2430cd61085c47d4153b33
 
 [submodule.dune-xt-la]
 remote = git@github.com:dune-community/dune-xt-la.git
-status = +cc1bbdac283f4b9323c64345030f1b8f634b88d5 .vcsetup (remotes/origin/HEAD)
-commit = 82bef18a993f9a475b3b45d209def8e34e55e1fe
+status = cc1bbdac283f4b9323c64345030f1b8f634b88d5 .vcsetup (heads/master)
+commit = 40a051d255e05a84191726b515d43779f2a89b1b
 
 [submodule.scripts]
 remote = https://github.com/wwu-numerik/scripts.git
-status = fb5ebc10e647d637c69497af2ec2560847eb2112 python/pylicense (fb5ebc1)
+status = fb5ebc10e647d637c69497af2ec2560847eb2112 python/pylicense (v0.2.0~10)
 commit = 09d0378f616b94d68bcdd9fc6114813181849ec0
 
diff --git a/dune/xt/la/container/common/matrix/dense.hh b/dune/xt/la/container/common/matrix/dense.hh
index fd4bed2ad86195fce986186a8be9bffefe4540b8..7f0ba22f21c5353e0f4c6e5ab20fd54995b0df8b 100644
--- a/dune/xt/la/container/common/matrix/dense.hh
+++ b/dune/xt/la/container/common/matrix/dense.hh
@@ -277,11 +277,11 @@ public:
   std::enable_if_t<Common::is_matrix<OtherMatrixType>::value, void> axpy(const ScalarType& alpha,
                                                                          const OtherMatrixType& xx)
   {
-    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     if (!has_equal_shape(xx))
       DUNE_THROW(Common::Exceptions::shapes_do_not_match,
                  "The shape of xx (" << xx.rows() << "x" << xx.cols() << ") does not match the shape of this ("
                                      << rows() << "x" << cols() << ")!");
+    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     axpy_impl(alpha, xx);
   } // ... axpy(...)
 
@@ -377,9 +377,9 @@ public:
 
   void add_to_entry(const size_t ii, const size_t jj, const ScalarType& value)
   {
-    internal::LockGuard DUNE_UNUSED(lock)(*mutexes_, ii, rows());
     assert(ii < rows());
     assert(jj < cols());
+    internal::LockGuard DUNE_UNUSED(lock)(*mutexes_, ii, rows());
     backend_->get_entry_ref(ii, jj) += value;
   } // ... add_to_entry(...)
 
diff --git a/dune/xt/la/container/common/matrix/sparse.hh b/dune/xt/la/container/common/matrix/sparse.hh
index b9ae9164353469d0015c4b67db6f7a41c4257c9c..362573c00bcc735833f9b51030d85880e340d6d1 100644
--- a/dune/xt/la/container/common/matrix/sparse.hh
+++ b/dune/xt/la/container/common/matrix/sparse.hh
@@ -282,8 +282,8 @@ public:
 
   inline void axpy(const ScalarType& alpha, const ThisType& xx)
   {
-    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     assert(has_equal_shape(xx));
+    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     const auto& xx_entries = *xx.entries_;
     for (size_t ii = 0; ii < entries_->size(); ++ii)
       entries_->operator[](ii) += alpha * xx_entries[ii];
diff --git a/dune/xt/la/container/common/vector/dense.hh b/dune/xt/la/container/common/vector/dense.hh
index 46cf38be7130fd6e85c3ae0ab27ad299d054d7f9..20d6b77f43e32be5b6fa5ac55751697cdfbf2409 100644
--- a/dune/xt/la/container/common/vector/dense.hh
+++ b/dune/xt/la/container/common/vector/dense.hh
@@ -201,10 +201,10 @@ public:
 
   void axpy(const ScalarType& alpha, const ThisType& xx)
   {
-    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     if (xx.size() != size())
       DUNE_THROW(Common::Exceptions::shapes_do_not_match,
                  "The size of x (" << xx.size() << ") does not match the size of this (" << size() << ")!");
+    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     for (size_t ii = 0; ii < backend().size(); ++ii)
       backend()[ii] += alpha * xx.backend()[ii];
   } // ... axpy(...)
@@ -230,8 +230,8 @@ public:
 
   void add_to_entry(const size_t ii, const ScalarType& value)
   {
-    internal::LockGuard DUNE_UNUSED(lock)(*mutexes_, ii, size());
     assert(ii < size());
+    internal::LockGuard DUNE_UNUSED(lock)(*mutexes_, ii, size());
     backend()[ii] += value;
   }
 
@@ -298,21 +298,21 @@ public:
 
   virtual void iadd(const ThisType& other) override final
   {
-    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     if (other.size() != size())
       if (other.size() != size())
         DUNE_THROW(Common::Exceptions::shapes_do_not_match,
                    "The size of other (" << other.size() << ") does not match the size of this (" << size() << ")!");
+    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     backend() += other.backend();
   } // ... iadd(...)
 
   virtual void isub(const ThisType& other) override final
   {
-    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     if (other.size() != size())
       if (other.size() != size())
         DUNE_THROW(Common::Exceptions::shapes_do_not_match,
                    "The size of other (" << other.size() << ") does not match the size of this (" << size() << ")!");
+    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     backend() -= other.backend();
   } // ... isub(...)
 
diff --git a/dune/xt/la/container/eigen/base.hh b/dune/xt/la/container/eigen/base.hh
index 9a3d83512a4e55dc684a83f91fb300464d1faf6c..a8a60d7166b1f139e955675a0fa5b99ae54f1512 100644
--- a/dune/xt/la/container/eigen/base.hh
+++ b/dune/xt/la/container/eigen/base.hh
@@ -130,10 +130,10 @@ public:
   template <class T>
   void axpy(const ScalarType& alpha, const EigenBaseVector<T, ScalarType>& xx)
   {
-    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     if (xx.size() != size())
       DUNE_THROW(Common::Exceptions::shapes_do_not_match,
                  "The size of xx (" << xx.size() << ") does not match the size of this (" << size() << ")!");
+    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     backend() += alpha * xx.backend();
   } // ... axpy(...)
 
@@ -153,8 +153,8 @@ public:
 
   void add_to_entry(const size_t ii, const ScalarType& value)
   {
-    internal::LockGuard DUNE_UNUSED(lock)(*mutexes_, ii, size());
     assert(ii < size());
+    internal::LockGuard DUNE_UNUSED(lock)(*mutexes_, ii, size());
     backend()(ii) += value;
   }
 
@@ -246,10 +246,10 @@ public:
   template <class T>
   void iadd(const EigenBaseVector<T, ScalarType>& other)
   {
-    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     if (other.size() != size())
       DUNE_THROW(Common::Exceptions::shapes_do_not_match,
                  "The size of other (" << other.size() << ") does not match the size of this (" << size() << ")!");
+    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     backend() += other.backend();
   } // ... iadd(...)
 
@@ -261,10 +261,10 @@ public:
   template <class T>
   void isub(const EigenBaseVector<T, ScalarType>& other)
   {
-    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     if (other.size() != size())
       DUNE_THROW(Common::Exceptions::shapes_do_not_match,
                  "The size of other (" << other.size() << ") does not match the size of this (" << size() << ")!");
+    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     backend() -= other.backend();
   } // ... isub(...)
 
diff --git a/dune/xt/la/container/eigen/dense.hh b/dune/xt/la/container/eigen/dense.hh
index dcc9e9628981822352e06c99c1c38d690e3c2f1d..cfac2009ec6da4bad8b49378ecc144953dd29ff4 100644
--- a/dune/xt/la/container/eigen/dense.hh
+++ b/dune/xt/la/container/eigen/dense.hh
@@ -532,11 +532,11 @@ public:
 
   void axpy(const ScalarType& alpha, const ThisType& xx)
   {
-    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     if (!has_equal_shape(xx))
       DUNE_THROW(Common::Exceptions::shapes_do_not_match,
                  "The shape of xx (" << xx.rows() << "x" << xx.cols() << ") does not match the shape of this ("
                                      << rows() << "x" << cols() << ")!");
+    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     backend() += alpha * xx.backend();
   } // ... axpy(...)
 
@@ -567,9 +567,9 @@ public:
 
   void add_to_entry(const size_t ii, const size_t jj, const ScalarType& value)
   {
-    internal::LockGuard DUNE_UNUSED(lock)(*mutexes_, jj, cols());
     assert(ii < rows());
     assert(jj < cols());
+    internal::LockGuard DUNE_UNUSED(lock)(*mutexes_, jj, cols());
     backend()(ii, jj) += value;
   } // ... add_to_entry(...)
 
diff --git a/dune/xt/la/container/eigen/sparse.hh b/dune/xt/la/container/eigen/sparse.hh
index c172e2dd819a3f96350087f2de52ba5e3671b0ef..b5ef3a1b95f3ed805c74f2d6bb1ec234016233a1 100644
--- a/dune/xt/la/container/eigen/sparse.hh
+++ b/dune/xt/la/container/eigen/sparse.hh
@@ -253,11 +253,11 @@ public:
 
   void axpy(const ScalarType& alpha, const ThisType& xx)
   {
-    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     if (!has_equal_shape(xx))
       DUNE_THROW(Common::Exceptions::shapes_do_not_match,
                  "The shape of xx (" << xx.rows() << "x" << xx.cols() << ") does not match the shape of this ("
                                      << rows() << "x" << cols() << ")!");
+    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     backend() += alpha * xx.backend();
   } // ... axpy(...)
 
@@ -294,8 +294,8 @@ public:
 
   void add_to_entry(const size_t ii, const size_t jj, const ScalarType& value)
   {
-    internal::LockGuard DUNE_UNUSED(lock)(*mutexes_, ii, rows());
     assert(these_are_valid_indices(ii, jj));
+    internal::LockGuard DUNE_UNUSED(lock)(*mutexes_, ii, rows());
     backend().coeffRef(Common::numeric_cast<EIGEN_size_t>(ii), Common::numeric_cast<EIGEN_size_t>(jj)) += value;
   }
 
diff --git a/dune/xt/la/container/istl.hh b/dune/xt/la/container/istl.hh
index acd67a6c1cb37eedf4feba48494720e4b3f7db1f..0f29903d7d7d3a448018f40e1fea5e14e2897b78 100644
--- a/dune/xt/la/container/istl.hh
+++ b/dune/xt/la/container/istl.hh
@@ -227,10 +227,10 @@ public:
 
   void axpy(const ScalarType& alpha, const ThisType& xx)
   {
-    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     if (xx.size() != size())
       DUNE_THROW(Common::Exceptions::shapes_do_not_match,
                  "The size of x (" << xx.size() << ") does not match the size of this (" << size() << ")!");
+    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     backend().axpy(alpha, xx.backend());
   }
 
@@ -258,8 +258,8 @@ public:
 
   void add_to_entry(const size_t ii, const ScalarType& value)
   {
-    internal::LockGuard DUNE_UNUSED(lock)(*mutexes_, ii, size());
     assert(ii < size());
+    internal::LockGuard DUNE_UNUSED(lock)(*mutexes_, ii, size());
     backend()[ii][0] += value;
   }
 
@@ -326,19 +326,19 @@ public:
 
   virtual void iadd(const ThisType& other) override final
   {
-    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     if (other.size() != size())
       DUNE_THROW(Common::Exceptions::shapes_do_not_match,
                  "The size of other (" << other.size() << ") does not match the size of this (" << size() << ")!");
+    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     backend() += other.backend();
   } // ... iadd(...)
 
   virtual void isub(const ThisType& other) override final
   {
-    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     if (other.size() != size())
       DUNE_THROW(Common::Exceptions::shapes_do_not_match,
                  "The size of other (" << other.size() << ") does not match the size of this (" << size() << ")!");
+    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     backend() -= other.backend();
   } // ... isub(...)
 
@@ -517,11 +517,11 @@ public:
 
   void axpy(const ScalarType& alpha, const ThisType& xx)
   {
-    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     if (!has_equal_shape(xx))
       DUNE_THROW(Common::Exceptions::shapes_do_not_match,
                  "The shape of xx (" << xx.rows() << "x" << xx.cols() << ") does not match the shape of this ("
                                      << rows() << "x" << cols() << ")!");
+    const internal::VectorLockGuard DUNE_UNUSED(guard)(*mutexes_);
     backend().axpy(alpha, xx.backend());
   } // ... axpy(...)
 
@@ -557,8 +557,8 @@ public:
 
   void add_to_entry(const size_t ii, const size_t jj, const ScalarType& value)
   {
-    internal::LockGuard DUNE_UNUSED(lock)(*mutexes_, ii, rows());
     assert(these_are_valid_indices(ii, jj));
+    internal::LockGuard DUNE_UNUSED(lock)(*mutexes_, ii, rows());
     backend()[ii][jj][0][0] += value;
   }
 
diff --git a/dune/xt/la/solver/istl/amg.hh b/dune/xt/la/solver/istl/amg.hh
index 90576ff7b88ae62f0c3adeb4c2c68f6a056621b2..fe81068cdeb7b44a970877043e65ec3ae853ae06 100644
--- a/dune/xt/la/solver/istl/amg.hh
+++ b/dune/xt/la/solver/istl/amg.hh
@@ -48,8 +48,7 @@ public:
 
   IdentityPreconditioner(const SolverCategory::Category cat)
     : category_(cat)
-  {
-  }
+  {}
 
   //! Category of the preconditioner (see SolverCategory::Category)
   virtual SolverCategory::Category category() const override final
@@ -57,18 +56,14 @@ public:
     return category_;
   }
 
-  virtual void pre(domain_type&, range_type&) override final
-  {
-  }
+  virtual void pre(domain_type&, range_type&) override final {}
 
   virtual void apply(domain_type& v, const range_type& d) override final
   {
     v = d;
   }
 
-  virtual void post(domain_type&) override final
-  {
-  }
+  virtual void post(domain_type&) override final {}
 
 private:
   SolverCategory::Category category_;