diff --git a/dune/istl/ldl.hh b/dune/istl/ldl.hh
index ecb1d6061c64d59d215f48942c5a6cdac2efbcfb..8c29a3eff11e5372904299e3443c7e33f878cd93 100644
--- a/dune/istl/ldl.hh
+++ b/dune/istl/ldl.hh
@@ -286,7 +286,7 @@ namespace Dune {
 
       double Info [AMD_INFO];
       if(amd_order (dimMat, ldlMatrix_.getColStart(), ldlMatrix_.getRowIndex(), P_, (double *) NULL, Info) < AMD_OK)
-        std::cout<<"WARNING: call to AMD failed."<<std::endl;
+        DUNE_THROW(InvalidStateException,"Error: AMD failed!");
       if(verbose_ > 0)
         amd_info (Info);
       // compute the symbolic factorisation
@@ -304,7 +304,7 @@ namespace Dune {
       delete [] Lnz_;
 
       if(rank!=dimMat)
-        std::cout<<"WARNING: matrix is singular."<<std::endl;
+        DUNE_THROW(InvalidStateException,"Error: LDL factorisation failed!");
     }
 
     LDLMatrix ldlMatrix_;