Index: src/Actions/WorldAction/RepeatBoxAction.cpp
===================================================================
--- src/Actions/WorldAction/RepeatBoxAction.cpp	(revision f66b67ef25f8215db4696ae4d1b5f670050f9e30)
+++ src/Actions/WorldAction/RepeatBoxAction.cpp	(revision d10eb6f3865b497d9398ecf46f86b0b565e82cd1)
@@ -61,7 +61,5 @@
     (cout << "Repeating box " << Repeater << " times for (x,y,z) axis." << endl);
     double * const cell_size = World::getInstance().getDomain();
-    double *M_double = ReturnFullMatrixforSymmetric(cell_size);
-    Matrix M = Matrix(M_double);
-    delete[] M_double;
+    Matrix M = ReturnFullMatrixforSymmetric(cell_size);
     Vector x,y;
     int n[NDIM];
Index: src/Matrix.cpp
===================================================================
--- src/Matrix.cpp	(revision f66b67ef25f8215db4696ae4d1b5f670050f9e30)
+++ src/Matrix.cpp	(revision d10eb6f3865b497d9398ecf46f86b0b565e82cd1)
@@ -135,2 +135,21 @@
   return factor*mat;
 }
+
+/** Blows the 6-dimensional \a cell_size array up to a full NDIM by NDIM matrix.
+ * \param *symm 6-dim array of unique symmetric matrix components
+ * \return allocated NDIM*NDIM array with the symmetric matrix
+ */
+Matrix ReturnFullMatrixforSymmetric(const double * const symm)
+{
+  Matrix matrix;
+  matrix.at(0,0) = symm[0];
+  matrix.at(1,0) = symm[1];
+  matrix.at(2,0) = symm[3];
+  matrix.at(0,1) = symm[1];
+  matrix.at(1,1) = symm[2];
+  matrix.at(2,1) = symm[4];
+  matrix.at(0,2) = symm[3];
+  matrix.at(1,2) = symm[4];
+  matrix.at(2,2) = symm[5];
+  return matrix;
+};
Index: src/Matrix.hpp
===================================================================
--- src/Matrix.hpp	(revision f66b67ef25f8215db4696ae4d1b5f670050f9e30)
+++ src/Matrix.hpp	(revision d10eb6f3865b497d9398ecf46f86b0b565e82cd1)
@@ -50,3 +50,5 @@
 Matrix operator*(const Matrix&,const double);
 
+Matrix ReturnFullMatrixforSymmetric(const double * const cell_size);
+
 #endif /* MATRIX_HPP_ */
Index: src/analysis_correlation.cpp
===================================================================
--- src/analysis_correlation.cpp	(revision f66b67ef25f8215db4696ae4d1b5f670050f9e30)
+++ src/analysis_correlation.cpp	(revision d10eb6f3865b497d9398ecf46f86b0b565e82cd1)
@@ -136,8 +136,6 @@
   for (MoleculeList::const_iterator MolWalker = molecules->ListOfMolecules.begin(); MolWalker != molecules->ListOfMolecules.end(); MolWalker++){
     if ((*MolWalker)->ActiveFlag) {
-      double * FullMatrix_double = ReturnFullMatrixforSymmetric(World::getInstance().getDomain());
-      Matrix FullMatrix = Matrix(FullMatrix_double);
+      Matrix FullMatrix = ReturnFullMatrixforSymmetric(World::getInstance().getDomain());
       Matrix FullInverseMatrix = FullMatrix.invert();
-      delete[](FullMatrix_double);
       DoeLog(2) && (eLog()<< Verbose(2) << "Current molecule is " << *MolWalker << "." << endl);
       eLog() << Verbose(2) << "Current molecule is " << *MolWalker << "." << endl;
@@ -247,8 +245,6 @@
   for (MoleculeList::const_iterator MolWalker = molecules->ListOfMolecules.begin(); MolWalker != molecules->ListOfMolecules.end(); MolWalker++)
     if ((*MolWalker)->ActiveFlag) {
-      double * FullMatrix_double = ReturnFullMatrixforSymmetric(World::getInstance().getDomain());
-      Matrix FullMatrix = Matrix(FullMatrix_double);
+      Matrix FullMatrix = ReturnFullMatrixforSymmetric(World::getInstance().getDomain());
       Matrix FullInverseMatrix = FullMatrix.invert();
-      delete[] FullMatrix_double;
       DoLog(2) && (Log() << Verbose(2) << "Current molecule is " << *MolWalker << "." << endl);
       for (molecule::const_iterator iter = (*MolWalker)->begin(); iter != (*MolWalker)->end(); ++iter) {
@@ -353,8 +349,6 @@
   for (MoleculeList::const_iterator MolWalker = molecules->ListOfMolecules.begin(); MolWalker != molecules->ListOfMolecules.end(); MolWalker++)
     if ((*MolWalker)->ActiveFlag) {
-      double * FullMatrix_double = ReturnFullMatrixforSymmetric(World::getInstance().getDomain());
-      Matrix FullMatrix = Matrix(FullMatrix_double);
+      Matrix FullMatrix = ReturnFullMatrixforSymmetric(World::getInstance().getDomain());
       Matrix FullInverseMatrix = FullMatrix.invert();
-      delete[](FullMatrix_double);
       DoLog(2) && (Log() << Verbose(2) << "Current molecule is " << *MolWalker << "." << endl);
       for (molecule::const_iterator iter = (*MolWalker)->begin(); iter != (*MolWalker)->end(); ++iter) {
Index: src/boundary.cpp
===================================================================
--- src/boundary.cpp	(revision f66b67ef25f8215db4696ae4d1b5f670050f9e30)
+++ src/boundary.cpp	(revision d10eb6f3865b497d9398ecf46f86b0b565e82cd1)
@@ -765,7 +765,5 @@
   int N[NDIM];
   int n[NDIM];
-  double *M_double =  ReturnFullMatrixforSymmetric(World::getInstance().getDomain());
-  Matrix M = Matrix(M_double);
-  delete[](M_double);
+  Matrix M = ReturnFullMatrixforSymmetric(World::getInstance().getDomain());
   Matrix Rotations;
   Matrix MInverse = M.invert();
Index: src/helpers.cpp
===================================================================
--- src/helpers.cpp	(revision f66b67ef25f8215db4696ae4d1b5f670050f9e30)
+++ src/helpers.cpp	(revision d10eb6f3865b497d9398ecf46f86b0b565e82cd1)
@@ -117,24 +117,4 @@
 };
 
-/** Blows the 6-dimensional \a cell_size array up to a full NDIM by NDIM matrix.
- * \param *symm 6-dim array of unique symmetric matrix components
- * \return allocated NDIM*NDIM array with the symmetric matrix
- */
-double * ReturnFullMatrixforSymmetric(const double * const symm)
-{
-  double *matrix = new double[NDIM * NDIM];
-  matrix[0] = symm[0];
-  matrix[1] = symm[1];
-  matrix[2] = symm[3];
-  matrix[3] = symm[1];
-  matrix[4] = symm[2];
-  matrix[5] = symm[4];
-  matrix[6] = symm[3];
-  matrix[7] = symm[4];
-  matrix[8] = symm[5];
-  return matrix;
-};
-
-
 /** Comparison function for GSL heapsort on distances in two molecules.
  * \param *a
Index: src/helpers.hpp
===================================================================
--- src/helpers.hpp	(revision f66b67ef25f8215db4696ae4d1b5f670050f9e30)
+++ src/helpers.hpp	(revision d10eb6f3865b497d9398ecf46f86b0b565e82cd1)
@@ -52,5 +52,4 @@
 bool IsValidNumber( const char *string);
 int CompareDoubles (const void * a, const void * b);
-double * ReturnFullMatrixforSymmetric(const double * const cell_size);
 void performCriticalExit();
 
Index: src/molecule.cpp
===================================================================
--- src/molecule.cpp	(revision f66b67ef25f8215db4696ae4d1b5f670050f9e30)
+++ src/molecule.cpp	(revision d10eb6f3865b497d9398ecf46f86b0b565e82cd1)
@@ -308,7 +308,5 @@
       } // (signs are correct, was tested!)
     }
-    double *matrix_double = ReturnFullMatrixforSymmetric(cell_size);
-    matrix = Matrix(matrix_double);
-    delete[](matrix_double);
+    matrix = ReturnFullMatrixforSymmetric(cell_size);
     Orthovector1.MatrixMultiplication(matrix);
     InBondvector -= Orthovector1; // subtract just the additional translation
Index: src/molecule_fragmentation.cpp
===================================================================
--- src/molecule_fragmentation.cpp	(revision f66b67ef25f8215db4696ae4d1b5f670050f9e30)
+++ src/molecule_fragmentation.cpp	(revision d10eb6f3865b497d9398ecf46f86b0b565e82cd1)
@@ -1710,7 +1710,5 @@
   atom *OtherWalker = NULL;
   double * const cell_size = World::getInstance().getDomain();
-  double *matrix_double = ReturnFullMatrixforSymmetric(cell_size);
-  Matrix matrix = Matrix(matrix_double);
-  delete[](matrix_double);
+  Matrix matrix = ReturnFullMatrixforSymmetric(cell_size);
   enum Shading *ColorList = NULL;
   double tmp;
Index: src/molecule_geometry.cpp
===================================================================
--- src/molecule_geometry.cpp	(revision f66b67ef25f8215db4696ae4d1b5f670050f9e30)
+++ src/molecule_geometry.cpp	(revision d10eb6f3865b497d9398ecf46f86b0b565e82cd1)
@@ -35,7 +35,5 @@
   const Vector *CenterBox = DetermineCenterOfBox();
   double * const cell_size = World::getInstance().getDomain();
-  double *M_double = ReturnFullMatrixforSymmetric(cell_size);
-  Matrix M = Matrix(M_double);
-  delete[](M_double);
+  Matrix M = ReturnFullMatrixforSymmetric(cell_size);
   Matrix Minv = M.invert();
 
@@ -59,7 +57,5 @@
   bool status = true;
   double * const cell_size = World::getInstance().getDomain();
-  double *M_double = ReturnFullMatrixforSymmetric(cell_size);
-  Matrix M = Matrix(M_double);
-  delete[](M_double);
+  Matrix M = ReturnFullMatrixforSymmetric(cell_size);
   Matrix Minv = M.invert();
 
@@ -159,7 +155,5 @@
 
   const double *cell_size = World::getInstance().getDomain();
-  double *M_double = ReturnFullMatrixforSymmetric(cell_size);
-  Matrix M = Matrix(M_double);
-  delete[](M_double);
+  Matrix M = ReturnFullMatrixforSymmetric(cell_size);
   a->MatrixMultiplication(M);
 
@@ -250,7 +244,5 @@
 {
   double * const cell_size = World::getInstance().getDomain();
-  double *M_double = ReturnFullMatrixforSymmetric(cell_size);
-  Matrix M = Matrix(M_double);
-  delete[](M_double);
+  Matrix M = ReturnFullMatrixforSymmetric(cell_size);
   Matrix Minv = M.invert();
 
@@ -282,7 +274,5 @@
 {
   double * const cell_size = World::getInstance().getDomain();
-  double *matrix_double = ReturnFullMatrixforSymmetric(cell_size);
-  Matrix matrix = Matrix(matrix_double);
-  delete[](matrix_double);
+  Matrix matrix = ReturnFullMatrixforSymmetric(cell_size);
   Matrix inversematrix = matrix.invert();
   double tmp;
