diff --git a/Tests/UnitTests/TestCore/LLDataTest.h b/Tests/UnitTests/TestCore/LLDataTest.h
index edc6a1077dbde1ab4372e3fc9a74fd0c6d1991e5..dd65d980ce283700259b5bb6bdfdc2d30b39918b 100644
--- a/Tests/UnitTests/TestCore/LLDataTest.h
+++ b/Tests/UnitTests/TestCore/LLDataTest.h
@@ -3,6 +3,8 @@
 
 #include "LLData.h"
 #include <algorithm>
+#include "IMaterial.h"
+#include "Types.h"
 
 #include "gtest/gtest.h"
 
@@ -16,6 +18,8 @@ class LLDataTest : public ::testing::Test
     LLData<int> *int_data_0d;
     LLData<float> *fl_data_1d;
     LLData<double> *db_data_3d;
+
+    LLData<Eigen::Matrix2d> *matrix_data_2d;
 };
 
 LLDataTest::LLDataTest()
@@ -30,9 +34,16 @@ LLDataTest::LLDataTest()
 	dim3[1] = 15;
 	dim3[2] = 20;
 
+    int *dim2 = new int[(size_t)2];
+    dim2[0] = 20;
+    dim2[1] = 30;
+
 	int_data_0d = new LLData<int>((size_t)0, dim0);
 	fl_data_1d  = new LLData<float>((size_t)1, dim1);
 	db_data_3d  = new LLData<double>((size_t)3, dim3);
+
+    matrix_data_2d = new LLData<Eigen::Matrix2d>((size_t)2, dim2);
+
 }
 
 LLDataTest::~LLDataTest()
@@ -44,6 +55,8 @@ TEST_F(LLDataTest, TotalSize)
     EXPECT_EQ((size_t)1, int_data_0d->getTotalSize());
     EXPECT_EQ((size_t)10, fl_data_1d->getTotalSize());
     EXPECT_EQ((size_t)3000, db_data_3d->getTotalSize());
+
+    EXPECT_EQ((size_t)600, matrix_data_2d->getTotalSize());
 }
 
 TEST_F(LLDataTest, GetRank)
@@ -51,6 +64,7 @@ TEST_F(LLDataTest, GetRank)
     EXPECT_EQ((size_t)0, int_data_0d->getRank());
     EXPECT_EQ((size_t)1, fl_data_1d->getRank());
     EXPECT_EQ((size_t)3, db_data_3d->getRank());
+    EXPECT_EQ((size_t)2, matrix_data_2d->getRank());
 }
 
 
@@ -59,6 +73,9 @@ TEST_F(LLDataTest, SetAll)
 {
     db_data_3d->setAll(1.0);
     EXPECT_DOUBLE_EQ( (*db_data_3d)[0], 1.0);
+
+    matrix_data_2d->setAll(Eigen::Matrix2d::Identity());
+    EXPECT_EQ((*matrix_data_2d)[0], Eigen::Matrix2d::Identity());
 }
 
 TEST_F(LLDataTest, ScaleAll)
@@ -66,6 +83,10 @@ TEST_F(LLDataTest, ScaleAll)
     db_data_3d->setAll(2.0);
     db_data_3d->scaleAll(2.5);
     EXPECT_DOUBLE_EQ( (*db_data_3d)[0], 5.0);
+
+    matrix_data_2d->setAll(Eigen::Matrix2d::Identity());
+    matrix_data_2d->scaleAll(3 * Eigen::Matrix2d::Identity());
+    EXPECT_EQ((*matrix_data_2d)[0], 3 * Eigen::Matrix2d::Identity()*Eigen::Matrix2d::Identity());
 }
 
 TEST_F(LLDataTest, TotalSum)
@@ -76,12 +97,15 @@ TEST_F(LLDataTest, TotalSum)
 	db_data_3d->setAll(0.5);
     EXPECT_DOUBLE_EQ( db_data_3d->getTotalSum(), 1500.0);
 
+    matrix_data_2d->setAll(Eigen::Matrix2d::Identity());
+    //EXPECT_T(60 * Eigen::Matrix2d::Identity(), matrix_data_2d->getTotalSum());
 }
 
 TEST_F(LLDataTest, GetDimensions) {
 //	EXPECT_EQ( int_data_0d->getDimensions(), NULL);
 	EXPECT_EQ( fl_data_1d->getDimensions()[0], 10);
 	EXPECT_EQ( db_data_3d->getDimensions()[1], 15);
+    EXPECT_EQ( matrix_data_2d->getDimensions()[1], 30);
 }
 
 TEST_F(LLDataTest, DataCopyingConstructor) {
@@ -100,9 +124,17 @@ TEST_F(LLDataTest, DataCopyingConstructor) {
 	EXPECT_DOUBLE_EQ( (*other_db_data_3d)[10], 1.17);
 	EXPECT_DOUBLE_EQ(db_data_3d->getTotalSum(), other_db_data_3d->getTotalSum());
 
+
+    matrix_data_2d->setAll(Eigen::Matrix2d::Identity());
+    LLData<Eigen::Matrix2d> *other_matrix_data_2d  = new LLData<Eigen::Matrix2d>(*matrix_data_2d);
+    EXPECT_TRUE(HaveSameDimensions(*matrix_data_2d, *other_matrix_data_2d));
+    EXPECT_EQ( (*other_matrix_data_2d)[7], Eigen::Matrix2d::Identity());
+    //EXPECT_EQ(matrix_data_2d->getTotalSum(), other_matrix_data_2d->getTotalSum());
+
 	delete other_int_data_0d;
 	delete other_fl_data_1d;
 	delete other_db_data_3d;
+    delete other_matrix_data_2d;
 }
 
 TEST_F(LLDataTest, DataAssignment) {
@@ -119,8 +151,15 @@ TEST_F(LLDataTest, DataAssignment) {
 	EXPECT_DOUBLE_EQ( (*other_db_data_3d)[11], 1.27);
 	EXPECT_DOUBLE_EQ(db_data_3d->getTotalSum(), other_db_data_3d->getTotalSum());
 
+
+    LLData<Eigen::Matrix2d> *other_matrix_data_2d  = new LLData<Eigen::Matrix2d>(*matrix_data_2d);
+    other_matrix_data_2d->setAll(10 * Eigen::Matrix2d::Identity());
+    (* other_matrix_data_2d) = (* matrix_data_2d);
+    EXPECT_EQ( (*other_matrix_data_2d)[7], Eigen::Matrix2d::Identity());
+
 	delete other_fl_data_1d;
 	delete other_db_data_3d;
+    delete other_matrix_data_2d;
 }
 
 TEST_F(LLDataTest, Addition) {
@@ -146,11 +185,22 @@ TEST_F(LLDataTest, Addition) {
 
 	EXPECT_THROW((*fl_data_1d) += (*fl_data_1d2), RuntimeErrorException);
 
+
+
+    LLData<Eigen::Matrix2d> *other_matrix_data_2d  = new LLData<Eigen::Matrix2d>(*matrix_data_2d);
+    matrix_data_2d->setAll( Eigen::Matrix2d::Identity());
+    other_matrix_data_2d->setAll( 5 * Eigen::Matrix2d::Identity());
+    (*other_matrix_data_2d) += (*matrix_data_2d);
+    EXPECT_EQ( (*other_matrix_data_2d)[5], 6 * Eigen::Matrix2d::Identity());
+
+
 	delete fl_data_1d2;
 	delete odim1;
 
 	delete other_fl_data_1d;
 	delete other_db_data_3d;
+
+    delete other_matrix_data_2d;
 }
 
 TEST_F(LLDataTest, Substraction) {
@@ -176,11 +226,18 @@ TEST_F(LLDataTest, Substraction) {
 
 	EXPECT_THROW((*fl_data_1d) -= (*fl_data_1d2), RuntimeErrorException);
 
+    LLData<Eigen::Matrix2d> *other_matrix_data_2d  = new LLData<Eigen::Matrix2d>(*matrix_data_2d);
+    matrix_data_2d->setAll( Eigen::Matrix2d::Identity());
+    other_matrix_data_2d->setAll( 5 * Eigen::Matrix2d::Identity());
+    (*other_matrix_data_2d) -= (*matrix_data_2d);
+    EXPECT_EQ( (*other_matrix_data_2d)[5], 4 * Eigen::Matrix2d::Identity());
+
 	delete fl_data_1d2;
 	delete odim1;
 
 	delete other_fl_data_1d;
 	delete other_db_data_3d;
+    delete other_matrix_data_2d;
 }
 
 TEST_F(LLDataTest, Multiplication) {
@@ -206,11 +263,18 @@ TEST_F(LLDataTest, Multiplication) {
 
 	EXPECT_THROW((*fl_data_1d) *= (*fl_data_1d2), RuntimeErrorException);
 
+    LLData<Eigen::Matrix2d> *other_matrix_data_2d  = new LLData<Eigen::Matrix2d>(*matrix_data_2d);
+    matrix_data_2d->setAll( 2*Eigen::Matrix2d::Identity());
+    other_matrix_data_2d->setAll( 5 * Eigen::Matrix2d::Identity());
+    (*other_matrix_data_2d) *= (*matrix_data_2d);
+    EXPECT_EQ( (*other_matrix_data_2d)[5], 10 * Eigen::Matrix2d::Identity());
+
 	delete fl_data_1d2;
 	delete odim1;
 
 	delete other_fl_data_1d;
 	delete other_db_data_3d;
+    delete other_matrix_data_2d;
 }
 
 TEST_F(LLDataTest, Division) {
@@ -236,6 +300,7 @@ TEST_F(LLDataTest, Division) {
 
 	EXPECT_THROW((*fl_data_1d) /= (*fl_data_1d2), RuntimeErrorException);
 
+
 	delete fl_data_1d2;
 	delete odim1;
 	delete other_fl_data_1d;
@@ -253,13 +318,20 @@ TEST_F (LLDataTest, HaveSameDimensions) {
 	odim3[1] = 15;
 	odim3[2] = 20;
 
+    int *odim2 = new int[(size_t)2];
+    odim2[0] = 20;
+    odim2[1] = 30;
+
+
 	LLData<int>    *other_int_data_0d = new LLData<int>((size_t)0, odim0);
 	LLData<float>  *other_fl_data_1d  = new LLData<float>((size_t)1, odim1);
 	LLData<double> *other_db_data_3d  = new LLData<double>((size_t)3, odim3);
+    LLData<Eigen::Matrix2d> *other_matrix_data_2d = new LLData<Eigen::Matrix2d>((size_t)2, odim2);
 
 	EXPECT_TRUE(HaveSameDimensions(*int_data_0d, *other_int_data_0d));
 	EXPECT_TRUE(HaveSameDimensions(*fl_data_1d, *other_fl_data_1d));
 	EXPECT_TRUE(HaveSameDimensions(*db_data_3d, *other_db_data_3d));
+    EXPECT_TRUE(HaveSameDimensions(*other_matrix_data_2d, *matrix_data_2d));
 
 	odim3[1] = 25;
 	LLData<double> *some_other_db_data_3d  = new LLData<double>((size_t)3, odim3);
@@ -269,9 +341,11 @@ TEST_F (LLDataTest, HaveSameDimensions) {
 	delete other_fl_data_1d;
 	delete other_db_data_3d;
 	delete some_other_db_data_3d;
+    delete other_matrix_data_2d;
 	delete odim0;
 	delete odim1;
 	delete odim3;
+    delete odim2;
 }
 
 TEST_F(LLDataTest, Accessors) {
@@ -298,8 +372,22 @@ TEST_F(LLDataTest, Accessors) {
 	EXPECT_DOUBLE_EQ(db_data_3d->atCoordinate(coordinate3d), 0.4);
 	EXPECT_DOUBLE_EQ(db_data_3d->getTotalSum(), 899700.0);
 
+
+
+    for (size_t i=0; i < matrix_data_2d->getTotalSize(); ++i) {
+        (*matrix_data_2d)[i] = i *  Eigen::Matrix2d::Identity();
+    }
+
+    EXPECT_EQ((*matrix_data_2d)[2], 2 * Eigen::Matrix2d::Identity());
+    int *coordinate2d = new int[(size_t)2];
+    coordinate2d[0] = 0;
+    coordinate2d[1] = 2;
+
+    EXPECT_EQ(matrix_data_2d->atCoordinate(coordinate2d), 2 * Eigen::Matrix2d::Identity());
+
 	delete coordinate;
 	delete coordinate3d;
+    delete coordinate2d;
 
 }