diff --git a/NonLinearSolver/nlsolver/nonLinearMechSolver.cpp b/NonLinearSolver/nlsolver/nonLinearMechSolver.cpp
index 7127579527cfb28da94719af2c5f54978aca249f..09dc39eb993a627e91bffbb79124e24b6947f9a8 100644
--- a/NonLinearSolver/nlsolver/nonLinearMechSolver.cpp
+++ b/NonLinearSolver/nlsolver/nonLinearMechSolver.cpp
@@ -131,7 +131,7 @@
 																																			_damageVolumeCenter(0.,0.,0.),_homogenizedCrackSurface(0.),
 																																			_microBCOld(NULL),_microFailureBC(NULL), _failureBCIsSwitched(false),
                                                                       _pathFollowingSwitchCriterion(0.), _failureBasedOnPreviousState(true),
-                                                                      _macroTime(0.),_macroTimeStep(1.),_macroStep(0.)
+                                                                      _macroTime(0.),_macroTimeStep(1.),_macroStep(0.),_hermitian(true)
 {
   // check parallelization of dofManager
  #if defined(HAVE_MPI)
@@ -10126,11 +10126,7 @@ void nonLinearMechSolver::createEigenvalueSolver(){
 	  linearSystemPETSc<double>* lpetB = dynamic_cast<linearSystemPETSc<double>*>(lsysB);
 
 		if (lpetA != NULL ){
-			if (lpetB)
-				_eigenSolver = new eigenSolver(lpetA,lpetB);
-			else
-				_eigenSolver = new eigenSolver(lpetA);
-
+			_eigenSolver = new eigenSolver(lpetA,lpetB,_hermitian);
       // for eigen mode view
 			if (_eigfield.size() > 0){
 				for (int i= 0; i< _eigfield.size(); i++){
@@ -10336,7 +10332,8 @@ double nonLinearMechSolver::critialPointTestFunction(double time, double* &mode)
       fprintf(_outputFile,"Modify number of eigenvalues computed: %d \n",nsize);
     }
     // solver eigen solver
-    _eigenSolver->solve(_numeigenvalue,"smallestReal");
+    //_eigenSolver->solve(_numeigenvalue,"smallestReal");
+    _eigenSolver->solve(_numeigenvalue,"smallestReal",_eigenSolverMethod,_eigenSolverConvergenCriterion,_eigenSolverNumIteration);
 
     std::complex<double> ls = _eigenSolver->getEigenValue(0);
     std::complex<double> lm = _eigenSolver->getEigenValue(_numeigenvalue-1);
@@ -11349,7 +11346,7 @@ void nonLinearMechSolver::eigenValueSolver(const int num , const bool fl){
   #endif
 };
 
-void nonLinearMechSolver::setEigenSolverParamerters(const int type, const int numiter, const std::string method, const double tol, const bool mktofile){
+void nonLinearMechSolver::setEigenSolverParamerters(const int type, const int numiter, const std::string method, const double tol, const bool mktofile, const bool hem){
   if (_eigflag){
     if (type == 0){
       _eigenSolverType = STATIC;
@@ -11366,6 +11363,7 @@ void nonLinearMechSolver::setEigenSolverParamerters(const int type, const int nu
     _eigenSolverMethod = method;
     _eigenSolverConvergenCriterion = tol;
     _MKToFile = mktofile;
+    _hermitian = hem;
   }
 };
 
diff --git a/NonLinearSolver/nlsolver/nonLinearMechSolver.h b/NonLinearSolver/nlsolver/nonLinearMechSolver.h
index 5146a7967375a4b4e9d1a193266a62eea327735e..c3b78b72b3972ee36cc44bd25db4889a6599be48 100644
--- a/NonLinearSolver/nlsolver/nonLinearMechSolver.h
+++ b/NonLinearSolver/nlsolver/nonLinearMechSolver.h
@@ -748,6 +748,7 @@ class nonLinearMechSolver
   int _eigenSolverNumIteration;
   std::string _eigenSolverMethod; //
   double _eigenSolverConvergenCriterion;
+  bool _hermitian; // if matrix is symmetrical or not
   std::vector<std::vector<nlsField::dataBuildView> > _eigview;
   std::vector<unknownField*> _eigfield;
   std::vector<int> _modeview;
@@ -932,7 +933,7 @@ class nonLinearMechSolver
 	void addMicroBCForFailure(const nonLinearMicroBC* bc);
   // for instability
   void eigenValueSolver(const int num = 10, const bool fl = true); // number of eigenvalue
-  void setEigenSolverParamerters(const int type, const int numiter, const std::string method, const double tol, const bool mktofile = false);
+  void setEigenSolverParamerters(const int type, const int numiter, const std::string method, const double tol, const bool mktofile = false, const bool hem = true);
   void setModeView(const int view); // for view buckling mode
   void setPerturbationFactor(const double val = 1e-2);
   void setInstabilityCriterion(const double val = 1e-6);