diff --git a/src/algebra/EigenvalueSolver.cpp b/src/algebra/EigenvalueSolver.cpp
index 7a6c5999463e66d46ad7b8282f542a9ffe47d936..41e4bf4aaf3d0e010ba967ec229db2e838af28b2 100644
--- a/src/algebra/EigenvalueSolver.cpp
+++ b/src/algebra/EigenvalueSolver.cpp
@@ -244,6 +244,8 @@ EigenvalueSolver::findEigenvector(const TinyMatrix<3, 3>& A,
 {
   TinyMatrix<3, 3> eigenvectors = zero;
   if (space_size == 3) {
+    std::cout << "space_size = 3 "
+              << "\n";
     return eigenvectors0;
   }
   TinyMatrix<3, 3> B = A;
@@ -331,10 +333,11 @@ EigenvalueSolver::findEigenvector(const TinyMatrix<3, 3>& A,
 bool
 EigenvalueSolver::isDiagonal(const TinyMatrix<3, 3>& A, const double epsilon)
 {
-  bool isDiag = false;
+  bool isDiag = true;
   for (size_t i = 0; i < 2; i++) {
     for (size_t j = i + 1; j < 3; j++) {
       isDiag = !(fabs(A(i, j)) > epsilon);
+      return isDiag;
     }
   }
   return isDiag;
@@ -397,10 +400,13 @@ EigenvalueSolver::findEigen(const TinyMatrix<3> A)
 {
   const double epsilon = 1.e-6;   // * l2Norm(eigenvalues);
   if (frobeniusNorm(A) < 1.e-15) {
+    std::cout << " Frobenius norm 0 " << frobeniusNorm(A) << "\n";
     return std::make_tuple(eigenvalues0, eigenvectors0);
   }
   TinyMatrix<3> C = 1. / frobeniusNorm(A) * A;
   if (isDiagonal(C, epsilon)) {
+    std::cout << "Matrix C " << C << " is diagonal "
+              << "\n";
     const TinyVector<3> eigenvalues(A(0, 0), A(1, 1), A(2, 2));
     TinyMatrix<3> Diag = zero;
     for (size_t i = 0; i < 3; ++i) {
@@ -423,7 +429,7 @@ EigenvalueSolver::findEigen(const TinyMatrix<3> A)
   std::cout << "\n"
             << B << ", " << A << " Diff "
             << " A - B " << 1 / frobeniusNorm(A) * (A - B) << "\n";
-  return std::make_tuple(eigenvalues, Eigenmatrix);
+  return std::make_tuple(frobeniusNorm(A) * eigenvalues, Eigenmatrix);
 }
 TinyVector<3>
 EigenvalueSolver::_findEigenValues(const TinyMatrix<3>& A, const double epsilon) const
diff --git a/src/scheme/HyperplasticSolver.cpp b/src/scheme/HyperplasticSolver.cpp
index a69cd8ab9bf5f7e1eca3d507e4c18c10b1fd737a..e3f06ca9c279a8a4d91ed0ab6733dff29691ae41 100644
--- a/src/scheme/HyperplasticSolver.cpp
+++ b/src/scheme/HyperplasticSolver.cpp
@@ -203,9 +203,10 @@ class HyperplasticSolverHandler::HyperplasticSolver final : public HyperplasticS
   double
   _compute_chi(const R3x3 S, const double yield) const
   {
-    const R3x3 Id = identity;
-    const R3x3 Sd = S - 1. / 3 * trace(S) * Id;
-    // auto [eigenvalues2, eigenmatrix2] = EigenvalueSolver{}.findEigen(TestA);
+    const R3x3 Id                     = identity;
+    const R3x3 Sd                     = S - 1. / 3 * trace(S) * Id;
+    auto [eigenvalues2, eigenmatrix2] = EigenvalueSolver{}.findEigen(TestB);
+    exit(0);
     double chi         = 0;
     const double normS = frobeniusNorm(Sd);
     if ((normS - std::sqrt(2. / 3) * yield) > 0.) {
diff --git a/tests/test_EigenvalueSolver.cpp b/tests/test_EigenvalueSolver.cpp
index 248af664b3ca26c294afed19fe45379fde99a209..5efaa921b891b064679a3166d2d2221666661235 100644
--- a/tests/test_EigenvalueSolver.cpp
+++ b/tests/test_EigenvalueSolver.cpp
@@ -165,9 +165,78 @@ TEST_CASE("EigenvalueSolver", "[algebra]")
       TinyMatrix<3> TestC{0, 0, 0, 0, 0, 0, 0, 0, 0};
       TinyMatrix<3> TestD{1e10, 0, 0, 0, 1, 0, 0, 0, 1};
       TinyMatrix<3> TestE{3e-10, 2e-10, 4e-10, 2e-10, 0, 2e-10, 4e-10, 2e-10, 3e-10};
-      TinyMatrix<3> eigenvectors0{1, 0, 0, 0, 1, 0, 0, 0, 1};
-      TinyVector<3> eigenvalues0{0, 0, 0};
+
       auto [eigenvalues, eigenmatrix] = EigenvalueSolver{}.findEigen(TestA);
+      TinyMatrix<3> Diag              = zero;
+      for (size_t i = 0; i < 3; ++i) {
+        Diag(i, i) = eigenvalues[i];
+      }
+      TinyMatrix<3> B = eigenmatrix * Diag * transpose(eigenmatrix);
+      for (size_t i = 0; i < 3; ++i) {
+        for (size_t j = 0; j < 3; ++j) {
+          REQUIRE((B(i, j) - TestA(i, j)) / frobeniusNorm(TestA) == Catch::Approx(0).margin(1E-8));
+        }
+      }
+
+      auto [eigenvalues2, eigenmatrix2] = EigenvalueSolver{}.findEigen(TestA2);
+      Diag                              = zero;
+      for (size_t i = 0; i < 3; ++i) {
+        Diag(i, i) = eigenvalues2[i];
+      }
+      B = eigenmatrix2 * Diag * transpose(eigenmatrix2);
+      for (size_t i = 0; i < 3; ++i) {
+        for (size_t j = 0; j < 3; ++j) {
+          REQUIRE((B(i, j) - TestA2(i, j)) / frobeniusNorm(TestA2) == Catch::Approx(0).margin(1E-8));
+        }
+      }
+
+      auto [eigenvalues3, eigenmatrix3] = EigenvalueSolver{}.findEigen(TestB);
+      Diag                              = zero;
+      for (size_t i = 0; i < 3; ++i) {
+        Diag(i, i) = eigenvalues3[i];
+      }
+      B = eigenmatrix3 * Diag * transpose(eigenmatrix3);
+      for (size_t i = 0; i < 3; ++i) {
+        for (size_t j = 0; j < 3; ++j) {
+          REQUIRE((B(i, j) - TestB(i, j)) / frobeniusNorm(TestB) == Catch::Approx(0).margin(1E-8));
+        }
+      }
+
+      auto [eigenvalues4, eigenmatrix4] = EigenvalueSolver{}.findEigen(TestC);
+      Diag                              = zero;
+      for (size_t i = 0; i < 3; ++i) {
+        Diag(i, i) = eigenvalues4[i];
+      }
+      B = eigenmatrix4 * Diag * transpose(eigenmatrix4);
+      for (size_t i = 0; i < 3; ++i) {
+        for (size_t j = 0; j < 3; ++j) {
+          REQUIRE((B(i, j) - TestC(i, j)) == Catch::Approx(0).margin(1E-8));
+        }
+      }
+
+      auto [eigenvalues5, eigenmatrix5] = EigenvalueSolver{}.findEigen(TestD);
+      Diag                              = zero;
+      for (size_t i = 0; i < 3; ++i) {
+        Diag(i, i) = eigenvalues5[i];
+      }
+      B = eigenmatrix5 * Diag * transpose(eigenmatrix5);
+      for (size_t i = 0; i < 3; ++i) {
+        for (size_t j = 0; j < 3; ++j) {
+          REQUIRE((B(i, j) - TestD(i, j)) / frobeniusNorm(TestD) == Catch::Approx(0).margin(1E-8));
+        }
+      }
+
+      auto [eigenvalues6, eigenmatrix6] = EigenvalueSolver{}.findEigen(TestE);
+      Diag                              = zero;
+      for (size_t i = 0; i < 3; ++i) {
+        Diag(i, i) = eigenvalues6[i];
+      }
+      B = eigenmatrix6 * Diag * transpose(eigenmatrix6);
+      for (size_t i = 0; i < 3; ++i) {
+        for (size_t j = 0; j < 3; ++j) {
+          REQUIRE((B(i, j) - TestE(i, j)) / frobeniusNorm(TestE) == Catch::Approx(0).margin(1E-8));
+        }
+      }
     }
   }
 }