diff --git a/src/TNL/Matrices/Dense.h b/src/TNL/Matrices/Dense.h
index 553ecc01d3fa146ddaae0137475179dca0b1c779..51308280db55ff32440781a78df2ac7e48b483f4 100644
--- a/src/TNL/Matrices/Dense.h
+++ b/src/TNL/Matrices/Dense.h
@@ -45,7 +45,7 @@ class Dense : public Matrix< Real, Device, Index >
       using BaseType = Matrix< Real, Device, Index >;
       using ValuesType = typename BaseType::ValuesVector;
       using ValuesViewType = typename ValuesType::ViewType;
-      using SegmentsType = Containers::Segments::Ellpack< DeviceType, IndexType, typename Allocators::Default< Device >::template Allocator< IndexType >, RowMajorOrder >;
+      using SegmentsType = Containers::Segments::Ellpack< DeviceType, IndexType, typename Allocators::Default< Device >::template Allocator< IndexType >, RowMajorOrder, 1 >;
       using SegmentViewType = typename SegmentsType::SegmentViewType;
       using RowView = DenseMatrixRowView< SegmentViewType, ValuesViewType >;
 
@@ -60,6 +60,8 @@ class Dense : public Matrix< Real, Device, Index >
 
       Dense();
 
+      Dense( const IndexType rows, const IndexType columns );
+
       static String getSerializationType();
 
       virtual String getSerializationTypeVirtual() const;
@@ -75,6 +77,9 @@ class Dense : public Matrix< Real, Device, Index >
        */
       void setCompressedRowLengths( ConstCompressedRowLengthsVectorView rowLengths );
 
+      template< typename Vector >
+      void getCompressedRowLengths( Vector& rowLengths ) const;
+
       [[deprecated]]
       IndexType getRowLength( const IndexType row ) const;
 
@@ -84,10 +89,6 @@ class Dense : public Matrix< Real, Device, Index >
 
       IndexType getNumberOfNonzeroMatrixElements() const;
 
-      template< typename Vector >
-      void getCompressedRowLengths( Vector& rowLengths ) const;
-
-
       void reset();
 
       __cuda_callable__
diff --git a/src/TNL/Matrices/Dense.hpp b/src/TNL/Matrices/Dense.hpp
index 680fa3ed284446293e4d3e671f810f4d29738baa..ebf2c03b953cc584f7f78f8b485b0a2dcff4e2f1 100644
--- a/src/TNL/Matrices/Dense.hpp
+++ b/src/TNL/Matrices/Dense.hpp
@@ -26,6 +26,17 @@ Dense< Real, Device, Index, RowMajorOrder, RealAllocator >::Dense()
 {
 }
 
+template< typename Real,
+          typename Device,
+          typename Index,
+          bool RowMajorOrder,
+          typename RealAllocator >
+Dense< Real, Device, Index, RowMajorOrder, RealAllocator >::
+Dense( const IndexType rows, const IndexType columns )
+{
+   this->setDimensions( rows, columns );
+}
+
 template< typename Real,
           typename Device,
           typename Index,
diff --git a/src/UnitTests/Matrices/DenseMatrixTest.h b/src/UnitTests/Matrices/DenseMatrixTest.h
index fc6ea6bd2e40e57fec4a5fac8a83115f589ce451..2184e636077b929d23f6d9a9b3e546cba082ec0e 100644
--- a/src/UnitTests/Matrices/DenseMatrixTest.h
+++ b/src/UnitTests/Matrices/DenseMatrixTest.h
@@ -12,6 +12,8 @@
 #include <TNL/Matrices/Matrix.h>
 #include <TNL/Matrices/Dense.h>
 #include <TNL/Containers/Array.h>
+#include <TNL/Pointers/SharedPointer.h>
+#include <TNL/Pointers/SmartPointersRegister.h>
 
 #include <TNL/Containers/Vector.h>
 #include <TNL/Containers/VectorView.h>
@@ -92,6 +94,58 @@ void test_SetLike()
     EXPECT_EQ( m1.getColumns(), m2.getColumns() );
 }
 
+template< typename Matrix >
+void test_GetCompressedRowLengths()
+{
+   using RealType = typename Matrix::RealType;
+   using DeviceType = typename Matrix::DeviceType;
+   using IndexType = typename Matrix::IndexType;
+
+   const IndexType rows = 10;
+   const IndexType cols = 11;
+
+    Matrix m( rows, cols );
+
+    // Insert values into the rows.
+    RealType value = 1;
+
+    for( IndexType i = 0; i < 3; i++ )      // 0th row
+        m.setElement( 0, i, value++ );
+
+    for( IndexType i = 0; i < 3; i++ )      // 1st row
+        m.setElement( 1, i, value++ );
+
+    for( IndexType i = 0; i < 1; i++ )      // 2nd row
+        m.setElement( 2, i, value++ );
+
+    for( IndexType i = 0; i < 2; i++ )      // 3rd row
+        m.setElement( 3, i, value++ );
+
+    for( IndexType i = 0; i < 3; i++ )      // 4th row
+        m.setElement( 4, i, value++ );
+
+    for( IndexType i = 0; i < 4; i++ )      // 5th row
+        m.setElement( 5, i, value++ );
+
+    for( IndexType i = 0; i < 5; i++ )      // 6th row
+        m.setElement( 6, i, value++ );
+
+    for( IndexType i = 0; i < 6; i++ )      // 7th row
+        m.setElement( 7, i, value++ );
+
+    for( IndexType i = 0; i < 7; i++ )      // 8th row
+        m.setElement( 8, i, value++ );
+
+    for( IndexType i = 0; i < 8; i++ )      // 9th row
+        m.setElement( 9, i, value++ );
+
+   typename Matrix::CompressedRowLengthsVector rowLengths;
+   rowLengths = 0;
+   m.getCompressedRowLengths( rowLengths );
+   typename Matrix::CompressedRowLengthsVector correctRowLengths{ 3, 3, 1, 2, 3, 4, 5, 6, 7, 8 };
+   EXPECT_EQ( rowLengths, correctRowLengths );
+}
+
 template< typename Matrix >
 void test_GetRowLength()
 {
@@ -508,142 +562,147 @@ void test_AddElement()
 template< typename Matrix >
 void test_SetRow()
 {
-    using RealType = typename Matrix::RealType;
-    using DeviceType = typename Matrix::DeviceType;
-    using IndexType = typename Matrix::IndexType;
-/*
- * Sets up the following 3x7 dense matrix:
- *
- *    /  1  2  3  4  5  6  7 \
- *    |  8  9 10 11 12 13 14 |
- *    \ 15 16 17 18 19 20 21 /
- */
-    const IndexType rows = 3;
-    const IndexType cols = 7;
-    
-    Matrix m;
-    m.reset();
-    m.setDimensions( rows, cols );
-    
-    RealType value = 1;
-    for( IndexType i = 0; i < rows; i++ )
-        for( IndexType j = 0; j < cols; j++ )
-            m.setElement( i, j, value++ );       
-    
-    RealType row1 [ 5 ] = { 11, 11, 11, 11, 11 }; IndexType colIndexes1 [ 5 ] = { 0, 1, 2, 3, 4 };
-    RealType row2 [ 5 ] = { 22, 22, 22, 22, 22 }; IndexType colIndexes2 [ 5 ] = { 0, 1, 2, 3, 4 };
-    RealType row3 [ 5 ] = { 33, 33, 33, 33, 33 }; IndexType colIndexes3 [ 5 ] = { 2, 3, 4, 5, 6 };
-    
-    IndexType row = 0;
-    IndexType elements = 5;
-    
-    // TODO: Fix this
-    /*m.setRow( row++, colIndexes1, row1, elements );
-    m.setRow( row++, colIndexes2, row2, elements );
-    m.setRow( row++, colIndexes3, row3, elements );*/
-    
-    EXPECT_EQ( m.getElement( 0, 0 ), 11 );
-    EXPECT_EQ( m.getElement( 0, 1 ), 11 );
-    EXPECT_EQ( m.getElement( 0, 2 ), 11 );
-    EXPECT_EQ( m.getElement( 0, 3 ), 11 );
-    EXPECT_EQ( m.getElement( 0, 4 ), 11 );
-    EXPECT_EQ( m.getElement( 0, 5 ),  6 );
-    EXPECT_EQ( m.getElement( 0, 6 ),  7 );
-    
-    EXPECT_EQ( m.getElement( 1, 0 ), 22 );
-    EXPECT_EQ( m.getElement( 1, 1 ), 22 );
-    EXPECT_EQ( m.getElement( 1, 2 ), 22 );
-    EXPECT_EQ( m.getElement( 1, 3 ), 22 );
-    EXPECT_EQ( m.getElement( 1, 4 ), 22 );
-    EXPECT_EQ( m.getElement( 1, 5 ), 13 );
-    EXPECT_EQ( m.getElement( 1, 6 ), 14 );
-    
-    EXPECT_EQ( m.getElement( 2, 0 ), 15 );
-    EXPECT_EQ( m.getElement( 2, 1 ), 16 );
-    EXPECT_EQ( m.getElement( 2, 2 ), 33 );
-    EXPECT_EQ( m.getElement( 2, 3 ), 33 );
-    EXPECT_EQ( m.getElement( 2, 4 ), 33 );
-    EXPECT_EQ( m.getElement( 2, 5 ), 33 );
-    EXPECT_EQ( m.getElement( 2, 6 ), 33 );
+   using RealType = typename Matrix::RealType;
+   using DeviceType = typename Matrix::DeviceType;
+   using IndexType = typename Matrix::IndexType;
+
+   /*
+    * Sets up the following 3x7 dense matrix:
+    *
+    *    /  1  2  3  4  5  6  7 \
+    *    |  8  9 10 11 12 13 14 |
+    *    \ 15 16 17 18 19 20 21 /
+    */
+   const IndexType rows = 3;
+   const IndexType cols = 7;
+
+   TNL::Pointers::SharedPointer< Matrix > m;
+   m->reset();
+   m->setDimensions( rows, cols );
+
+   RealType value = 1;
+   for( IndexType i = 0; i < rows; i++ )
+      for( IndexType j = 0; j < cols; j++ )
+         m->setElement( i, j, value++ );
+
+   Matrix* m_ptr = &m.template modifyData< DeviceType >();
+   auto f = [=] __cuda_callable__ ( IndexType rowIdx ) mutable {
+      RealType values[ 3 ][ 5 ] {
+         { 11, 11, 11, 11, 11 },
+         { 22, 22, 22, 22, 22 },
+         { 33, 33, 33, 33, 33 } };
+      IndexType columnIndexes[ 3 ][ 5 ] {
+         { 0, 1, 2, 3, 4 },
+         { 0, 1, 2, 3, 4 },
+         { 2, 3, 4, 5, 6 } };
+      auto row = m_ptr->getRow( rowIdx );
+      for( IndexType i = 0; i < 5; i++ )
+         row.setElement( columnIndexes[ rowIdx ][ i ], values[ rowIdx ][ i ] );
+   };
+   TNL::Pointers::synchronizeSmartPointersOnDevice< DeviceType >();
+   TNL::Algorithms::ParallelFor< DeviceType >::exec( 0, 3, f );
+
+   EXPECT_EQ( m->getElement( 0, 0 ), 11 );
+   EXPECT_EQ( m->getElement( 0, 1 ), 11 );
+   EXPECT_EQ( m->getElement( 0, 2 ), 11 );
+   EXPECT_EQ( m->getElement( 0, 3 ), 11 );
+   EXPECT_EQ( m->getElement( 0, 4 ), 11 );
+   EXPECT_EQ( m->getElement( 0, 5 ),  6 );
+   EXPECT_EQ( m->getElement( 0, 6 ),  7 );
+
+   EXPECT_EQ( m->getElement( 1, 0 ), 22 );
+   EXPECT_EQ( m->getElement( 1, 1 ), 22 );
+   EXPECT_EQ( m->getElement( 1, 2 ), 22 );
+   EXPECT_EQ( m->getElement( 1, 3 ), 22 );
+   EXPECT_EQ( m->getElement( 1, 4 ), 22 );
+   EXPECT_EQ( m->getElement( 1, 5 ), 13 );
+   EXPECT_EQ( m->getElement( 1, 6 ), 14 );
+
+   EXPECT_EQ( m->getElement( 2, 0 ), 15 );
+   EXPECT_EQ( m->getElement( 2, 1 ), 16 );
+   EXPECT_EQ( m->getElement( 2, 2 ), 33 );
+   EXPECT_EQ( m->getElement( 2, 3 ), 33 );
+   EXPECT_EQ( m->getElement( 2, 4 ), 33 );
+   EXPECT_EQ( m->getElement( 2, 5 ), 33 );
+   EXPECT_EQ( m->getElement( 2, 6 ), 33 );
 }
 
 template< typename Matrix >
 void test_AddRow()
 {
-    using RealType = typename Matrix::RealType;
-    using DeviceType = typename Matrix::DeviceType;
-    using IndexType = typename Matrix::IndexType;
-/*
- * Sets up the following 6x5 dense matrix:
- *
- *    /  1  2  3  4  5 \
- *    |  6  7  8  9 10 |
- *    | 11 12 13 14 15 |
- *    | 16 17 18 19 20 |
- *    | 21 22 23 24 25 |
- *    \ 26 27 28 29 30 /
- */
-    const IndexType rows = 6;
-    const IndexType cols = 5;
-    
-    Matrix m;
-    m.reset();
-    m.setDimensions( rows, cols );
-    
-    RealType value = 1;
-    for( IndexType i = 0; i < rows; i++ )
-        for( IndexType j = 0; j < cols; j++ )
-            m.setElement( i, j, value++ );
-    
-    // Check the added elements
-    EXPECT_EQ( m.getElement( 0, 0 ),  1 );
-    EXPECT_EQ( m.getElement( 0, 1 ),  2 );
-    EXPECT_EQ( m.getElement( 0, 2 ),  3 );
-    EXPECT_EQ( m.getElement( 0, 3 ),  4 );
-    EXPECT_EQ( m.getElement( 0, 4 ),  5 );
-    
-    EXPECT_EQ( m.getElement( 1, 0 ),  6 );
-    EXPECT_EQ( m.getElement( 1, 1 ),  7 );
-    EXPECT_EQ( m.getElement( 1, 2 ),  8 );
-    EXPECT_EQ( m.getElement( 1, 3 ),  9 );
-    EXPECT_EQ( m.getElement( 1, 4 ), 10 );
-    
-    EXPECT_EQ( m.getElement( 2, 0 ), 11 );
-    EXPECT_EQ( m.getElement( 2, 1 ), 12 );
-    EXPECT_EQ( m.getElement( 2, 2 ), 13 );
-    EXPECT_EQ( m.getElement( 2, 3 ), 14 );
-    EXPECT_EQ( m.getElement( 2, 4 ), 15 );
-    
-    EXPECT_EQ( m.getElement( 3, 0 ), 16 );
-    EXPECT_EQ( m.getElement( 3, 1 ), 17 );
-    EXPECT_EQ( m.getElement( 3, 2 ), 18 );
-    EXPECT_EQ( m.getElement( 3, 3 ), 19 );
-    EXPECT_EQ( m.getElement( 3, 4 ), 20 );
-    
-    EXPECT_EQ( m.getElement( 4, 0 ), 21 );
-    EXPECT_EQ( m.getElement( 4, 1 ), 22 );
-    EXPECT_EQ( m.getElement( 4, 2 ), 23 );
-    EXPECT_EQ( m.getElement( 4, 3 ), 24 );
-    EXPECT_EQ( m.getElement( 4, 4 ), 25 );
-    
-    EXPECT_EQ( m.getElement( 5, 0 ), 26 );
-    EXPECT_EQ( m.getElement( 5, 1 ), 27 );
-    EXPECT_EQ( m.getElement( 5, 2 ), 28 );
-    EXPECT_EQ( m.getElement( 5, 3 ), 29 );
-    EXPECT_EQ( m.getElement( 5, 4 ), 30 );
-    
-    // Add new elements to the old elements with a multiplying factor applied to the old elements.
-/*
- * The following setup results in the following 6x5 sparse matrix:
- *
- *    /  3  6  9 12 15 \
- *    | 18 21 24 27 30 |
- *    | 33 36 39 42 45 |
- *    | 48 51 54 57 60 |
- *    | 63 66 69 72 75 |
- *    \ 78 81 84 87 90 /
- */
-    
+   using RealType = typename Matrix::RealType;
+   using DeviceType = typename Matrix::DeviceType;
+   using IndexType = typename Matrix::IndexType;
+   /*
+    * Sets up the following 6x5 dense matrix:
+    *
+    *    /  1  2  3  4  5 \
+    *    |  6  7  8  9 10 |
+    *    | 11 12 13 14 15 |
+    *    | 16 17 18 19 20 |
+    *    | 21 22 23 24 25 |
+    *    \ 26 27 28 29 30 /
+    */
+
+   const IndexType rows = 6;
+   const IndexType cols = 5;
+
+   TNL::Pointers::SharedPointer< Matrix > m( rows, cols );
+
+   RealType value = 1;
+   for( IndexType i = 0; i < rows; i++ )
+      for( IndexType j = 0; j < cols; j++ )
+         m->setElement( i, j, value++ );
+
+   // Check the added elements
+   EXPECT_EQ( m->getElement( 0, 0 ),  1 );
+   EXPECT_EQ( m->getElement( 0, 1 ),  2 );
+   EXPECT_EQ( m->getElement( 0, 2 ),  3 );
+   EXPECT_EQ( m->getElement( 0, 3 ),  4 );
+   EXPECT_EQ( m->getElement( 0, 4 ),  5 );
+
+   EXPECT_EQ( m->getElement( 1, 0 ),  6 );
+   EXPECT_EQ( m->getElement( 1, 1 ),  7 );
+   EXPECT_EQ( m->getElement( 1, 2 ),  8 );
+   EXPECT_EQ( m->getElement( 1, 3 ),  9 );
+   EXPECT_EQ( m->getElement( 1, 4 ), 10 );
+
+   EXPECT_EQ( m->getElement( 2, 0 ), 11 );
+   EXPECT_EQ( m->getElement( 2, 1 ), 12 );
+   EXPECT_EQ( m->getElement( 2, 2 ), 13 );
+   EXPECT_EQ( m->getElement( 2, 3 ), 14 );
+   EXPECT_EQ( m->getElement( 2, 4 ), 15 );
+
+   EXPECT_EQ( m->getElement( 3, 0 ), 16 );
+   EXPECT_EQ( m->getElement( 3, 1 ), 17 );
+   EXPECT_EQ( m->getElement( 3, 2 ), 18 );
+   EXPECT_EQ( m->getElement( 3, 3 ), 19 );
+   EXPECT_EQ( m->getElement( 3, 4 ), 20 );
+
+   EXPECT_EQ( m->getElement( 4, 0 ), 21 );
+   EXPECT_EQ( m->getElement( 4, 1 ), 22 );
+   EXPECT_EQ( m->getElement( 4, 2 ), 23 );
+   EXPECT_EQ( m->getElement( 4, 3 ), 24 );
+   EXPECT_EQ( m->getElement( 4, 4 ), 25 );
+
+   EXPECT_EQ( m->getElement( 5, 0 ), 26 );
+   EXPECT_EQ( m->getElement( 5, 1 ), 27 );
+   EXPECT_EQ( m->getElement( 5, 2 ), 28 );
+   EXPECT_EQ( m->getElement( 5, 3 ), 29 );
+   EXPECT_EQ( m->getElement( 5, 4 ), 30 );
+
+   // Add new elements to the old elements with a multiplying factor applied to the old elements.
+   /*
+    * The following setup results in the following 6x5 sparse matrix:
+    *
+    *    /  3  6  9 12 15 \
+    *    | 18 21 24 27 30 |
+    *    | 33 36 39 42 45 |
+    *    | 48 51 54 57 60 |
+    *    | 63 66 69 72 75 |
+    *    \ 78 81 84 87 90 /
+    */
+
     RealType row0 [ 5 ] = { 11, 11, 11, 11, 0 }; IndexType colIndexes0 [ 5 ] = { 0, 1, 2, 3, 4 };
     RealType row1 [ 5 ] = { 22, 22, 22, 22, 0 }; IndexType colIndexes1 [ 5 ] = { 0, 1, 2, 3, 4 };
     RealType row2 [ 5 ] = { 33, 33, 33, 33, 0 }; IndexType colIndexes2 [ 5 ] = { 0, 1, 2, 3, 4 };
@@ -662,42 +721,62 @@ void test_AddRow()
     m.addRow( row++, colIndexes3, row3, elements, thisRowMultiplicator++ );
     m.addRow( row++, colIndexes4, row4, elements, thisRowMultiplicator++ );
     m.addRow( row++, colIndexes5, row5, elements, thisRowMultiplicator++ );*/
-    
-    EXPECT_EQ( m.getElement( 0, 0 ),  11 );
-    EXPECT_EQ( m.getElement( 0, 1 ),  11 );
-    EXPECT_EQ( m.getElement( 0, 2 ),  11 );
-    EXPECT_EQ( m.getElement( 0, 3 ),  11 );
-    EXPECT_EQ( m.getElement( 0, 4 ),   0 );
-    
-    EXPECT_EQ( m.getElement( 1, 0 ),  28 );
-    EXPECT_EQ( m.getElement( 1, 1 ),  29 );
-    EXPECT_EQ( m.getElement( 1, 2 ),  30 );
-    EXPECT_EQ( m.getElement( 1, 3 ),  31 );
-    EXPECT_EQ( m.getElement( 1, 4 ),  10 );
-    
-    EXPECT_EQ( m.getElement( 2, 0 ),  55 );
-    EXPECT_EQ( m.getElement( 2, 1 ),  57 );
-    EXPECT_EQ( m.getElement( 2, 2 ),  59 );
-    EXPECT_EQ( m.getElement( 2, 3 ),  61 );
-    EXPECT_EQ( m.getElement( 2, 4 ),  30 );
-    
-    EXPECT_EQ( m.getElement( 3, 0 ),  92 );
-    EXPECT_EQ( m.getElement( 3, 1 ),  95 );
-    EXPECT_EQ( m.getElement( 3, 2 ),  98 );
-    EXPECT_EQ( m.getElement( 3, 3 ), 101 );
-    EXPECT_EQ( m.getElement( 3, 4 ),  60 );
-    
-    EXPECT_EQ( m.getElement( 4, 0 ), 139 );
-    EXPECT_EQ( m.getElement( 4, 1 ), 143 );
-    EXPECT_EQ( m.getElement( 4, 2 ), 147 );
-    EXPECT_EQ( m.getElement( 4, 3 ), 151 );
-    EXPECT_EQ( m.getElement( 4, 4 ), 100 );
-    
-    EXPECT_EQ( m.getElement( 5, 0 ), 196 );
-    EXPECT_EQ( m.getElement( 5, 1 ), 201 );
-    EXPECT_EQ( m.getElement( 5, 2 ), 206 );
-    EXPECT_EQ( m.getElement( 5, 3 ), 211 );
-    EXPECT_EQ( m.getElement( 5, 4 ), 150 );
+
+   Matrix* m_ptr = &m.template modifyData< DeviceType >();
+   auto f = [=] __cuda_callable__ ( IndexType rowIdx ) mutable {
+      RealType values[ 6 ][ 5 ] {
+         { 11, 11, 11, 11, 0 },
+         { 22, 22, 22, 22, 0 },
+         { 33, 33, 33, 33, 0 },
+         { 44, 44, 44, 44, 0 },
+         { 55, 55, 55, 55, 0 },
+         { 66, 66, 66, 66, 0 } };
+      auto row = m_ptr->getRow( rowIdx );
+      for( IndexType i = 0; i < 5; i++ )
+      {
+         RealType& val = row.getValue( i );
+         val = rowIdx * val + values[ rowIdx ][ i ];
+      }
+   };
+   TNL::Pointers::synchronizeSmartPointersOnDevice< DeviceType >();
+   TNL::Algorithms::ParallelFor< DeviceType >::exec( 0, 6, f );
+
+    
+    EXPECT_EQ( m->getElement( 0, 0 ),  11 );
+    EXPECT_EQ( m->getElement( 0, 1 ),  11 );
+    EXPECT_EQ( m->getElement( 0, 2 ),  11 );
+    EXPECT_EQ( m->getElement( 0, 3 ),  11 );
+    EXPECT_EQ( m->getElement( 0, 4 ),   0 );
+    
+    EXPECT_EQ( m->getElement( 1, 0 ),  28 );
+    EXPECT_EQ( m->getElement( 1, 1 ),  29 );
+    EXPECT_EQ( m->getElement( 1, 2 ),  30 );
+    EXPECT_EQ( m->getElement( 1, 3 ),  31 );
+    EXPECT_EQ( m->getElement( 1, 4 ),  10 );
+    
+    EXPECT_EQ( m->getElement( 2, 0 ),  55 );
+    EXPECT_EQ( m->getElement( 2, 1 ),  57 );
+    EXPECT_EQ( m->getElement( 2, 2 ),  59 );
+    EXPECT_EQ( m->getElement( 2, 3 ),  61 );
+    EXPECT_EQ( m->getElement( 2, 4 ),  30 );
+    
+    EXPECT_EQ( m->getElement( 3, 0 ),  92 );
+    EXPECT_EQ( m->getElement( 3, 1 ),  95 );
+    EXPECT_EQ( m->getElement( 3, 2 ),  98 );
+    EXPECT_EQ( m->getElement( 3, 3 ), 101 );
+    EXPECT_EQ( m->getElement( 3, 4 ),  60 );
+    
+    EXPECT_EQ( m->getElement( 4, 0 ), 139 );
+    EXPECT_EQ( m->getElement( 4, 1 ), 143 );
+    EXPECT_EQ( m->getElement( 4, 2 ), 147 );
+    EXPECT_EQ( m->getElement( 4, 3 ), 151 );
+    EXPECT_EQ( m->getElement( 4, 4 ), 100 );
+    
+    EXPECT_EQ( m->getElement( 5, 0 ), 196 );
+    EXPECT_EQ( m->getElement( 5, 1 ), 201 );
+    EXPECT_EQ( m->getElement( 5, 2 ), 206 );
+    EXPECT_EQ( m->getElement( 5, 3 ), 211 );
+    EXPECT_EQ( m->getElement( 5, 4 ), 150 );
 }
 
 template< typename Matrix >
@@ -1352,12 +1431,12 @@ TYPED_TEST( MatrixTest, addRowTest )
     test_AddRow< MatrixType >();
 }
 
-TYPED_TEST( MatrixTest, vectorProductTest )
+/*TYPED_TEST( MatrixTest, vectorProductTest )
 {
     using MatrixType = typename TestFixture::MatrixType;
     
     test_VectorProduct< MatrixType >();
-}
+}*/
 
 TYPED_TEST( MatrixTest, addMatrixTest )
 {
@@ -1499,6 +1578,6 @@ TEST( DenseMatrixTest, Dense_performSORIterationTest_Cuda )
 }
 #endif
 
-#endif
+#endif // HAVE_GTEST
 
 #include "../main.h"