diff --git a/dune/solvers/common/genericvectortools.hh b/dune/solvers/common/genericvectortools.hh
index bc3f7efddf3593af6fbcbce128afdf0fb73146bc..18ce4afdc9f5360a5a6a2240660c7f0be0b91b75 100644
--- a/dune/solvers/common/genericvectortools.hh
+++ b/dune/solvers/common/genericvectortools.hh
@@ -34,7 +34,7 @@ struct GenericVector
 
     //! Write vector to given stream
     template <class VectorType>
-    DUNE_DEPRECATED_MSG("Please use Dune::MatrixVector::Generic::writeBinary instead.")
+    [[deprecated("Please use Dune::MatrixVector::Generic::writeBinary instead.")]]
     static void writeBinary(std::ostream& s, const VectorType& v)
     {
       Dune::MatrixVector::Generic::writeBinary(s, v);
@@ -42,7 +42,7 @@ struct GenericVector
 
     //! Read vector from a given stream
     template <class VectorType>
-    DUNE_DEPRECATED_MSG("Please use Dune::MatrixVector::Generic::readBinary instead.")
+    [[deprecated("Please use Dune::MatrixVector::Generic::readBinary instead.")]]
     static void readBinary(std::istream& s, VectorType& v)
     {
         Dune::MatrixVector::Generic::readBinary(s, v);
@@ -50,7 +50,7 @@ struct GenericVector
 
     //! Resize vector recursivly to size of given vector/matrix
     template <class VectorTypeA, class VectorTypeB>
-    DUNE_DEPRECATED_MSG("Please use Dune::MatrixVector::resize instead.")
+    [[deprecated("Please use Dune::MatrixVector::resize instead.")]]
     static void resize(VectorTypeA& a, const VectorTypeB& b)
     {
         Dune::MatrixVector::resize(a, b);
@@ -58,7 +58,7 @@ struct GenericVector
 
     //! Set vector to zero at indices that are true in bitvector recursivly
     template <class VectorType, class BitVectorType>
-    DUNE_DEPRECATED_MSG("Please use Dune::MatrixVector::Generic::truncate instead.")
+    [[deprecated("Please use Dune::MatrixVector::Generic::truncate instead.")]]
     static void truncate(VectorType& v, const BitVectorType& tr)
     {
         Dune::MatrixVector::Generic::truncate(v, tr);
diff --git a/dune/solvers/iterationsteps/mmgstep.hh b/dune/solvers/iterationsteps/mmgstep.hh
index 27099e4692c7d51b9acfed3eff891fb1de9d5d18..a6a4136781ffe5ecef2fb2aeb6cee37d7a897f66 100644
--- a/dune/solvers/iterationsteps/mmgstep.hh
+++ b/dune/solvers/iterationsteps/mmgstep.hh
@@ -54,7 +54,7 @@ public:
     virtual void nestedIteration();
 
     //! Set the hasObstacle bitfield
-    DUNE_DEPRECATED_MSG("Setting by raw pointer is deprecated. Use l-value or r-value or a shared_ptr")
+    [[deprecated("Setting by raw pointer is deprecated. Use l-value or r-value or a shared_ptr")]]
     void setHasObstacles(Dune::BitSetVector<dim>* hasObstacle) {
       hasObstacle_ = Dune::stackobject_to_shared_ptr(*hasObstacle);
     }
@@ -66,7 +66,7 @@ public:
     }
 
     //! Set the obstacle field
-    DUNE_DEPRECATED_MSG("Setting by raw pointer is deprecated. Use l-value or r-value or a shared_ptr")
+    [[deprecated("Setting by raw pointer is deprecated. Use l-value or r-value or a shared_ptr")]]
     void setObstacles(ObstacleVectorType* obstacles) {
       obstacles_ = Dune::stackobject_to_shared_ptr(*obstacles);
     }
diff --git a/dune/solvers/iterationsteps/multigridstep.hh b/dune/solvers/iterationsteps/multigridstep.hh
index e2ae953c0788c2b0f3d48d88abb576008413a1ee..9facf1d4f29dc79630364600c2e92ba4746d39eb 100644
--- a/dune/solvers/iterationsteps/multigridstep.hh
+++ b/dune/solvers/iterationsteps/multigridstep.hh
@@ -95,7 +95,7 @@ namespace Dune {
         }
 
         template <class DerivedTransfer>
-        DUNE_DEPRECATED_MSG("Consider setting the transfer operators via smart pointers instead.")
+        [[deprecated("Consider setting the transfer operators via smart pointers instead.")]]
         void setTransferOperators(const std::vector<DerivedTransfer*>& transfer)
         {
             mgTransfer_.resize(transfer.size());
@@ -153,7 +153,7 @@ namespace Dune {
         virtual void setMGType(int mu, int nu1, int nu2);
 
         /** \brief Set the smoother iteration step */
-        DUNE_DEPRECATED_MSG("Consider setting the smoother via smart pointer, reference or temporaries instead.")
+        [[deprecated("Consider setting the smoother via smart pointer, reference or temporaries instead.")]]
         void setSmoother(LinearStepType* smoother)
         {
             presmootherDefault_ = postsmootherDefault_ = Dune::stackobject_to_shared_ptr(*smoother);
@@ -171,7 +171,7 @@ namespace Dune {
         }
 
         /** \brief Set pre- and post smoothers individually */
-        DUNE_DEPRECATED_MSG("Consider setting the smoother via smart pointer, reference or temporaries instead.")
+        [[deprecated("Consider setting the smoother via smart pointer, reference or temporaries instead.")]]
         void setSmoother(LinearStepType* preSmoother,
                          LinearStepType* postSmoother)
         {
@@ -190,7 +190,7 @@ namespace Dune {
         }
 
         /** \brief Set the smoother iteration step for a particular level */
-        DUNE_DEPRECATED_MSG("Consider setting the smoother via smart pointer, reference or temporaries instead.")
+        [[deprecated("Consider setting the smoother via smart pointer, reference or temporaries instead.")]]
         void setSmoother(LinearStepType* smoother, std::size_t level)
         {
             levelWiseSmoothers_[level] = Dune::stackobject_to_shared_ptr(*smoother);
diff --git a/dune/solvers/norms/energynorm.hh b/dune/solvers/norms/energynorm.hh
index 38024749f6828cc2dff01adaa32f1a996f8ee8f2..3b6d541ca673f3c4090170179e2bd3d90753500b 100644
--- a/dune/solvers/norms/energynorm.hh
+++ b/dune/solvers/norms/energynorm.hh
@@ -94,7 +94,7 @@ namespace Solvers {
         }
 
         // \brief Compute the squared norm for a given vector and matrix
-        DUNE_DEPRECATED static field_type normSquared(const VectorType& u,
+        [[deprecated]] static field_type normSquared(const VectorType& u,
                                                       const MatrixType& A,
                                                       const field_type tol=1e-10)
         {
diff --git a/dune/solvers/solvers/iterativesolver.hh b/dune/solvers/solvers/iterativesolver.hh
index 7b403acdcc752aa62eee5d1202be80a43f5c3c6a..7469f93a84eac34d2f44bb8bfb1d5f0959aa9804 100644
--- a/dune/solvers/solvers/iterativesolver.hh
+++ b/dune/solvers/solvers/iterativesolver.hh
@@ -40,7 +40,7 @@ namespace Dune {
         {}
 
         /** \brief Constructor taking all relevant data */
-        DUNE_DEPRECATED_MSG("Handing over raw pointer in the constructor is deprecated!")
+        [[deprecated("Handing over raw pointer in the constructor is deprecated!")]]
         IterativeSolver(int maxIterations,
                         double tolerance,
                         const Norm<VectorType>* errorNorm,
diff --git a/dune/solvers/solvers/loopsolver.hh b/dune/solvers/solvers/loopsolver.hh
index 4d903474bd693ecd143244e61ff6ed1da98760fb..c62815b0e56fbce7cdc9bcafc7ce74ddd6d76b0d 100644
--- a/dune/solvers/solvers/loopsolver.hh
+++ b/dune/solvers/solvers/loopsolver.hh
@@ -32,7 +32,7 @@ class LoopSolver : public IterativeSolver<VectorType, BitVectorType>
 public:
 
     /** \brief Constructor taking all relevant data */
-    DUNE_DEPRECATED_MSG("Handing over raw pointer in the constructor is deprecated!")
+    [[deprecated("Handing over raw pointer in the constructor is deprecated!")]]
     LoopSolver(IterationStep<VectorType, BitVectorType>* iterationStep,
                int maxIterations,
                double tolerance,