diff --git a/src/TNL/Problems/PDEProblem.h b/src/TNL/Problems/PDEProblem.h
index e73bf633c2b3b6556677776db778f236fe6ae209..179255b93c99da025d542bcb7c75bed1ad197fb4 100644
--- a/src/TNL/Problems/PDEProblem.h
+++ b/src/TNL/Problems/PDEProblem.h
@@ -13,7 +13,8 @@
 #include <TNL/Problems/Problem.h>
 #include <TNL/Problems/CommonData.h>
 #include <TNL/Pointers/SharedPointer.h>
-#include <TNL/Matrices/Legacy/SlicedEllpack.h>
+#include <TNL/Matrices/SparseMatrix.h>
+#include <TNL/Containers/Segments/SlicedEllpack.h>
 #include <TNL/Solvers/PDE/TimeDependentPDESolver.h>
 
 namespace TNL {
@@ -39,7 +40,14 @@ class PDEProblem : public Problem< Real, Device, Index >
       using SubdomainOverlapsType = typename DistributedMeshType::SubdomainOverlapsType;
       using DofVectorType = Containers::Vector< RealType, DeviceType, IndexType>;
       using DofVectorPointer = Pointers::SharedPointer< DofVectorType, DeviceType >;
-      using MatrixType = Matrices::Legacy::SlicedEllpack< RealType, DeviceType, IndexType >;
+      template< typename _Device, typename _Index, typename _IndexAlocator >
+      using SegmentsType = Containers::Segments::SlicedEllpack< _Device, _Index, _IndexAlocator >;
+      using MatrixType = TNL::Matrices::SparseMatrix< Real,
+                                                      Device,
+                                                      Index,
+                                                      TNL::Matrices::GeneralMatrix,
+                                                      SegmentsType
+                                                    >;
       using CommunicatorType = Communicator;
       using CommonDataType = CommonData;
       using CommonDataPointer = Pointers::SharedPointer< CommonDataType, DeviceType >;