diff --git a/src/TNL/Matrices/Dense.h b/src/TNL/Matrices/Dense.h
index 8c109ac1e3fba8ecd0124249d507131856cf487c..cee69688b30bc6d999e3bb392d92aefc66f867a5 100644
--- a/src/TNL/Matrices/Dense.h
+++ b/src/TNL/Matrices/Dense.h
@@ -36,8 +36,8 @@ class Dense : public Matrix< Real, Device, Index >
       using IndexType = Index;
       using RealAllocatorType = RealAllocator;
       using BaseType = Matrix< Real, Device, Index, RealAllocator >;
-      using ValuesType = typename BaseType::ValuesVector;
-      using ValuesViewType = typename ValuesType::ViewType;
+      using ValuesHolderType = typename BaseType::ValuesHolderType;
+      using ValuesViewType = typename ValuesHolderType::ViewType;
       using SegmentsType = Containers::Segments::Ellpack< DeviceType, IndexType, typename Allocators::Default< Device >::template Allocator< IndexType >, RowMajorOrder, 1 >;
       using SegmentViewType = typename SegmentsType::SegmentViewType;
       using ViewType = DenseMatrixView< Real, Device, Index, RowMajorOrder >;
diff --git a/src/TNL/Matrices/DenseMatrixView.h b/src/TNL/Matrices/DenseMatrixView.h
index d963dd7c3e6a1c7ddf7757e0b06b74ec5ac59086..c5771f2eee1c0568eca579a587117cc33f3daafc 100644
--- a/src/TNL/Matrices/DenseMatrixView.h
+++ b/src/TNL/Matrices/DenseMatrixView.h
@@ -39,8 +39,8 @@ class DenseMatrixView : public MatrixView< Real, Device, Index >
       using DeviceType = Device;
       using IndexType = Index;
       using BaseType = Matrix< Real, Device, Index >;
-      using ValuesType = typename BaseType::ValuesVector;
-      using ValuesViewType = typename ValuesType::ViewType;
+      using ValuesHolderType = typename BaseType::ValuesHolderType;
+      using ValuesViewType = typename ValuesHolderType::ViewType;
       using SegmentsType = Containers::Segments::Ellpack< DeviceType, IndexType, typename Allocators::Default< Device >::template Allocator< IndexType >, RowMajorOrder, 1 >;
       using SegmentsViewType = typename SegmentsType::ViewType;
       using SegmentViewType = typename SegmentsType::SegmentViewType;
diff --git a/src/TNL/Matrices/Multidiagonal.h b/src/TNL/Matrices/Multidiagonal.h
index 749ddfae7f18d690a4d1dc92ff0dc47e2d3cf9c8..c93dc7d9cbfebe1e0bacecd1dc3e3c98a91424ba 100644
--- a/src/TNL/Matrices/Multidiagonal.h
+++ b/src/TNL/Matrices/Multidiagonal.h
@@ -35,8 +35,8 @@ class Multidiagonal : public Matrix< Real, Device, Index, RealAllocator >
       using RealAllocatorType = RealAllocator;
       using IndexAllocatorType = IndexAllocator;
       using BaseType = Matrix< Real, Device, Index, RealAllocator >;
-      using ValuesType = typename BaseType::ValuesVector;
-      using ValuesViewType = typename ValuesType::ViewType;
+      using ValuesHolderType = typename BaseType::ValuesHolderType;
+      using ValuesViewType = typename ValuesHolderType::ViewType;
       using IndexerType = details::MultidiagonalMatrixIndexer< IndexType, RowMajorOrder >;
       using DiagonalsShiftsType = Containers::Vector< IndexType, DeviceType, IndexType, IndexAllocatorType >;
       using DiagonalsShiftsView = typename DiagonalsShiftsType::ViewType;
diff --git a/src/TNL/Matrices/SparseMatrix.h b/src/TNL/Matrices/SparseMatrix.h
index 9f91ee7d186764324e9a8d5e67eab729b48f008a..ffcccfadea1e1b2446864986654d6971deda4df1 100644
--- a/src/TNL/Matrices/SparseMatrix.h
+++ b/src/TNL/Matrices/SparseMatrix.h
@@ -46,8 +46,8 @@ class SparseMatrix : public Matrix< Real, Device, Index, RealAllocator >
       using RowsCapacitiesType = Containers::Vector< IndexType, DeviceType, IndexType, IndexAllocatorType >;
       using RowsCapacitiesView = Containers::VectorView< IndexType, DeviceType, IndexType >;
       using ConstRowsCapacitiesView = typename RowsCapacitiesView::ConstViewType;
-      using ValuesVectorType = typename Matrix< Real, Device, Index, RealAllocator >::ValuesVector;
-      using ValuesViewType = typename ValuesVectorType::ViewType;
+      using ValuesHolderType = typename Matrix< Real, Device, Index, RealAllocator >::ValuesHolderType;
+      using ValuesViewType = typename ValuesHolderType::ViewType;
       using ColumnsIndexesVectorType = Containers::Vector< IndexType, DeviceType, IndexType, IndexAllocatorType >;
       using ColumnsIndexesViewType = typename ColumnsIndexesVectorType::ViewType;
       using ViewType = SparseMatrixView< Real, Device, Index, MatrixType, SegmentsViewTemplate >;
diff --git a/src/TNL/Matrices/Tridiagonal.h b/src/TNL/Matrices/Tridiagonal.h
index 6f0c6a548ef1de1ae925701e9af0d91ae5f1c1ca..b65cfb52731a14fc4976dcdbc7247c4c6b08da2b 100644
--- a/src/TNL/Matrices/Tridiagonal.h
+++ b/src/TNL/Matrices/Tridiagonal.h
@@ -34,8 +34,8 @@ class Tridiagonal : public Matrix< Real, Device, Index, RealAllocator >
       using RealAllocatorType = RealAllocator;
       using BaseType = Matrix< Real, Device, Index, RealAllocator >;
       using IndexerType = details::TridiagonalMatrixIndexer< IndexType, RowMajorOrder >;
-      using ValuesType = typename BaseType::ValuesVector;
-      using ValuesViewType = typename ValuesType::ViewType;
+      using ValuesHolderType = typename BaseType::ValuesHolderType;
+      using ValuesViewType = typename ValuesHolderType::ViewType;
       using ViewType = TridiagonalMatrixView< Real, Device, Index, RowMajorOrder >;
       using ConstViewType = TridiagonalMatrixView< typename std::add_const< Real >::type, Device, Index, RowMajorOrder >;
       using RowView = TridiagonalMatrixRowView< ValuesViewType, IndexerType >;
diff --git a/src/TNL/Matrices/details/ValuesHolder.h b/src/TNL/Matrices/details/ValuesHolder.h
index 9b4ab754043fa7ff228681ff12858474c8165909..c76f0d344ab6276a13b1a0b77162847ac08084fa 100644
--- a/src/TNL/Matrices/details/ValuesHolder.h
+++ b/src/TNL/Matrices/details/ValuesHolder.h
@@ -14,13 +14,54 @@ namespace TNL {
    namespace Matrices {
       namespace details {
 
+
+template< typename Real,
+          typename Device,
+          typename Index >
+struct ValuesHolderView
+: public Containers::VectorView< Real, Device, Index >
+{
+   using RealType = Real;
+   using DeviceType = Device;
+   using IndexType = Index;
+
+   using Containers::VectorView< Real, Device, Index >::VectorView;
+   using Containers::VectorView< Real, Device, Index >::operator=;
+   /*__cuda_callable__
+   ValuesHolderView() = default;
+
+   __cuda_callable__
+   explicit ValuesHolderView( const ValuesHolderView& ) = default;
+
+   __cuda_callable__
+   ValuesHolderView( ValuesHolderView&& ) = default;*/
+
+};
+
 template< typename Real,
           typename Device,
           typename Index,
-          typename RealAllocator >
-class ValuesHolder
-: public Containers::Vector< Real, Device, Index, RealAllocator >
-{};
+          typename Allocator >
+struct ValuesHolder
+: public Containers::Vector< Real, Device, Index, Allocator >
+{
+   using RealType = Real;
+   using DeviceType = Device;
+   using IndexType = Index;
+   using AllocatorType = Allocator;
+   using ViewType = ValuesHolderView< Real, Device, Index >;
+
+   using Containers::Vector< Real, Device, Index, Allocator >::Vector;
+   using Containers::Vector< Real, Device, Index, Allocator >::operator=;
+   /*ValuesHolder() = default;
+
+   explicit ValuesHolder( const ValuesHolder& ) = default;
+
+   explicit ValuesHolder( const ValuesHolder& vector, const AllocatorType& allocator );
+
+   ValuesHolder( ValuesHolder&& ) = default;*/
+
+};
 
 template< typename Device,
           typename Index >
@@ -31,6 +72,7 @@ class BooleanValuesHolder
       using RealType = bool;
       using DeviceType = Device;
       using IndexType = Index;
+      using ViewType = BooleanValuesHolder;
 
       BooleanValuesHolder()
       : size( 0 ){};