diff --git a/Solver/eigenSolver.cpp b/Solver/eigenSolver.cpp
index 8305f9bddb1ee43d21a6b3db991122dc44a634f5..d683eb5ae0a159a10725770b5938a7ba8f580162 100644
--- a/Solver/eigenSolver.cpp
+++ b/Solver/eigenSolver.cpp
@@ -16,7 +16,7 @@ eigenSolver::eigenSolver(dofManager<double> *manager, std::string A,
 {
   if(A.size()){
     _A = dynamic_cast<linearSystemPETSc<double>*>(manager->getLinearSystem(A));
-    if(!_A) Msg::Error("Could not find PETSc system '%s'", A.c_str());
+    if(!_A) Msg::Error("Could not find PETSc system '%s' ffffd", A.c_str());
   }
   if(B.size()){
     _B = dynamic_cast<linearSystemPETSc<double>*>(manager->getLinearSystem(B));
@@ -24,6 +24,8 @@ eigenSolver::eigenSolver(dofManager<double> *manager, std::string A,
   }
 }
 
+eigenSolver::eigenSolver(linearSystemPETSc<double> *A,linearSystemPETSc<double> *B, bool hermitian) : _A(A), _B(B), _hermitian(hermitian){}
+
 bool eigenSolver::solve(int numEigenValues, std::string which)
 {
   if(!_A) return false;
@@ -53,8 +55,8 @@ bool eigenSolver::solve(int numEigenValues, std::string which)
 
   // set some default options
   _try(EPSSetDimensions(eps, numEigenValues, PETSC_DECIDE, PETSC_DECIDE));
-  _try(EPSSetTolerances(eps, 1.e-7, 20));//1.e-6 50
-  //_try(EPSSetType(eps, EPSKRYLOVSCHUR)); //default
+  //_try(EPSSetTolerances(eps, 1.e-7, 20));//1.e-6 50
+  _try(EPSSetType(eps, EPSKRYLOVSCHUR)); //default
   _try(EPSSetType(eps, EPSARNOLDI));
   //_try(EPSSetType(eps, EPSARPACK));
   //_try(EPSSetType(eps, EPSPOWER));
diff --git a/Solver/eigenSolver.h b/Solver/eigenSolver.h
index 7465fb1e19d3d8c6bed21a507cd9a15c51de209f..46c701b9de11eacf8ef12de22ca716b0de97acc7 100644
--- a/Solver/eigenSolver.h
+++ b/Solver/eigenSolver.h
@@ -26,7 +26,8 @@ class eigenSolver{
   void _try(int ierr) const { CHKERRABORT(PETSC_COMM_WORLD, ierr); }
  public:
   eigenSolver(dofManager<double> *manager, std::string A,
-              std::string B="", bool hermitian=false);
+              std::string B="", bool hermitian=true);
+  eigenSolver(linearSystemPETSc<double> *A,linearSystemPETSc<double>* B = NULL, bool hermitian=false);
   bool solve(int numEigenValues=0, std::string which="");
   int getNumEigenValues(){ return _eigenValues.size(); }
   std::complex<double> getEigenValue(int num){ return _eigenValues[num]; }