diff --git a/dune/solvers/iterationsteps/multigridstep.cc b/dune/solvers/iterationsteps/multigridstep.cc
index f80256371477a91436f3d049dd9cc681c1ab0ebb..a0339410330b2ee6322a0c1979ec5cac01a2c9a2 100644
--- a/dune/solvers/iterationsteps/multigridstep.cc
+++ b/dune/solvers/iterationsteps/multigridstep.cc
@@ -146,7 +146,7 @@ void MultigridStep<MatrixType, VectorType, BitVectorType>::preprocess()
 
         typedef ::LoopSolver<VectorType> DuneSolversLoopSolver;
 
-        if (typeid(*this->basesolver_) == typeid(DuneSolversLoopSolver)) {
+        if (dynamic_cast<DuneSolversLoopSolver*>(this->basesolver_)) {
 
             DuneSolversLoopSolver* loopBaseSolver = dynamic_cast<DuneSolversLoopSolver*> (this->basesolver_);
 
@@ -157,7 +157,7 @@ void MultigridStep<MatrixType, VectorType, BitVectorType>::preprocess()
             dynamic_cast<SmootherType*>(loopBaseSolver->iterationStep_)->ignoreNodes_ = ignoreNodesHierarchy_[0];
 
         }
-        else if (typeid(*this->basesolver_) == typeid(LinearSolver<MatrixType,VectorType>)) {
+        else if (dynamic_cast<LinearSolver<MatrixType, VectorType>*>(this->basesolver_)) {
 
             LinearSolver<MatrixType,VectorType>* linearBaseSolver = dynamic_cast<LinearSolver<MatrixType,VectorType>*> (this->basesolver_);