Index: src/boundary.cpp
===================================================================
--- src/boundary.cpp	(revision 0a4f7fd0df08c7bf001c21de0e7b7462fb56da1d)
+++ src/boundary.cpp	(revision 2733825a2c3f421fa61f61e58f954fa295e6e23d)
@@ -78,6 +78,5 @@
               if (Neighbour == BoundaryPoints[axis].end()) // make it wrap around
                 Neighbour = BoundaryPoints[axis].begin();
-              DistanceVector.CopyVector(&runner->second.second->x);
-              DistanceVector.SubtractVector(&Neighbour->second.second->x);
+              DistanceVector = runner->second.second->x - Neighbour->second.second->x;
               do { // seek for neighbour pair where it flips
                   OldComponent = DistanceVector[Othercomponent];
@@ -85,6 +84,5 @@
                   if (Neighbour == BoundaryPoints[axis].end()) // make it wrap around
                     Neighbour = BoundaryPoints[axis].begin();
-                  DistanceVector.CopyVector(&runner->second.second->x);
-                  DistanceVector.SubtractVector(&Neighbour->second.second->x);
+                  DistanceVector = runner->second.second->x - Neighbour->second.second->x;
                   //Log() << Verbose(2) << "OldComponent is " << OldComponent << ", new one is " << DistanceVector.x[Othercomponent] << "." << endl;
                 } while ((runner != Neighbour) && (fabs(OldComponent / fabs(
@@ -98,6 +96,5 @@
                   //Log() << Verbose(1) << "The pair, where the sign of OtherComponent flips, is: " << *(Neighbour->second.second) << " and " << *(OtherNeighbour->second.second) << "." << endl;
                   // now we have found the pair: Neighbour and OtherNeighbour
-                  OtherVector.CopyVector(&runner->second.second->x);
-                  OtherVector.SubtractVector(&OtherNeighbour->second.second->x);
+                  OtherVector = runner->second.second->x - OtherNeighbour->second.second->x;
                   //Log() << Verbose(1) << "Distances to Neighbour and OtherNeighbour are " << DistanceVector.x[component] << " and " << OtherVector.x[component] << "." << endl;
                   //Log() << Verbose(1) << "OtherComponents to Neighbour and OtherNeighbour are " << DistanceVector.x[Othercomponent] << " and " << OtherVector.x[Othercomponent] << "." << endl;
@@ -170,17 +167,16 @@
     while (Walker->next != mol->end) {
       Walker = Walker->next;
-      ProjectedVector.CopyVector(&Walker->x);
-      ProjectedVector.SubtractVector(MolCenter);
-      ProjectedVector.ProjectOntoPlane(&AxisVector);
+      ProjectedVector = Walker->x - (*MolCenter);
+      ProjectedVector.ProjectOntoPlane(AxisVector);
 
       // correct for negative side
       const double radius = ProjectedVector.NormSquared();
       if (fabs(radius) > MYEPSILON)
-        angle = ProjectedVector.Angle(&AngleReferenceVector);
+        angle = ProjectedVector.Angle(AngleReferenceVector);
       else
         angle = 0.; // otherwise it's a vector in Axis Direction and unimportant for boundary issues
 
       //Log() << Verbose(1) << "Checking sign in quadrant : " << ProjectedVector.Projection(&AngleReferenceNormalVector) << "." << endl;
-      if (ProjectedVector.ScalarProduct(&AngleReferenceNormalVector) > 0) {
+      if (ProjectedVector.ScalarProduct(AngleReferenceNormalVector) > 0) {
         angle = 2. * M_PI - angle;
       }
@@ -197,9 +193,7 @@
           Log() << Verbose(2) << "Keeping new vector due to larger projected distance " << ProjectedVectorNorm << "." << endl;
         } else if (fabs(ProjectedVectorNorm - BoundaryTestPair.first->second.first) < MYEPSILON) {
-          helper.CopyVector(&Walker->x);
-          helper.SubtractVector(MolCenter);
+          helper = Walker->x - (*MolCenter);
           const double oldhelperNorm = helper.NormSquared();
-          helper.CopyVector(&BoundaryTestPair.first->second.second->x);
-          helper.SubtractVector(MolCenter);
+          helper = BoundaryTestPair.first->second.second->x - (*MolCenter);
           if (helper.NormSquared() < oldhelperNorm) {
             BoundaryTestPair.first->second.second = Walker;
@@ -251,22 +245,18 @@
         {
           Vector SideA, SideB, SideC, SideH;
-          SideA.CopyVector(&left->second.second->x);
-          SideA.SubtractVector(MolCenter);
-          SideA.ProjectOntoPlane(&AxisVector);
+          SideA = left->second.second->x - (*MolCenter);
+          SideA.ProjectOntoPlane(AxisVector);
           //          Log() << Verbose(1) << "SideA: " << SideA << endl;
 
-          SideB.CopyVector(&right->second.second->x);
-          SideB.SubtractVector(MolCenter);
-          SideB.ProjectOntoPlane(&AxisVector);
+          SideB = right->second.second->x -(*MolCenter);
+          SideB.ProjectOntoPlane(AxisVector);
           //          Log() << Verbose(1) << "SideB: " << SideB << endl;
 
-          SideC.CopyVector(&left->second.second->x);
-          SideC.SubtractVector(&right->second.second->x);
-          SideC.ProjectOntoPlane(&AxisVector);
+          SideC = left->second.second->x - right->second.second->x;
+          SideC.ProjectOntoPlane(AxisVector);
           //          Log() << Verbose(1) << "SideC: " << SideC << endl;
 
-          SideH.CopyVector(&runner->second.second->x);
-          SideH.SubtractVector(MolCenter);
-          SideH.ProjectOntoPlane(&AxisVector);
+          SideH = runner->second.second->x -(*MolCenter);
+          SideH.ProjectOntoPlane(AxisVector);
           //          Log() << Verbose(1) << "SideH: " << SideH << endl;
 
@@ -277,8 +267,8 @@
           const double h = SideH.Norm();
           // calculate the angles
-          const double alpha = SideA.Angle(&SideH);
-          const double beta = SideA.Angle(&SideC);
-          const double gamma = SideB.Angle(&SideH);
-          const double delta = SideC.Angle(&SideH);
+          const double alpha = SideA.Angle(SideH);
+          const double beta = SideA.Angle(SideC);
+          const double gamma = SideB.Angle(SideH);
+          const double delta = SideC.Angle(SideH);
           const double MinDistance = a * sin(beta) / (sin(delta)) * (((alpha < M_PI / 2.) || (gamma < M_PI / 2.)) ? 1. : -1.);
           //Log() << Verbose(1) << " I calculated: a = " << a << ", h = " << h << ", beta(" << left->second.second->Name << "," << left->second.second->Name << "-" << right->second.second->Name << ") = " << beta << ", delta(" << left->second.second->Name << "," << runner->second.second->Name << ") = " << delta << ", Min = " << MinDistance << "." << endl;
@@ -629,16 +619,14 @@
   for (TriangleMap::iterator runner = TesselStruct->TrianglesOnBoundary.begin(); runner != TesselStruct->TrianglesOnBoundary.end(); runner++)
     { // go through every triangle, calculate volume of its pyramid with CoG as peak
-      x.CopyVector(runner->second->endpoints[0]->node->node);
-      x.SubtractVector(runner->second->endpoints[1]->node->node);
-      y.CopyVector(runner->second->endpoints[0]->node->node);
-      y.SubtractVector(runner->second->endpoints[2]->node->node);
-      const double a = sqrt(runner->second->endpoints[0]->node->node->DistanceSquared(runner->second->endpoints[1]->node->node));
-      const double b = sqrt(runner->second->endpoints[0]->node->node->DistanceSquared(runner->second->endpoints[2]->node->node));
-      const double c = sqrt(runner->second->endpoints[2]->node->node->DistanceSquared(runner->second->endpoints[1]->node->node));
+      x = (*runner->second->endpoints[0]->node->node) - (*runner->second->endpoints[1]->node->node);
+      y = (*runner->second->endpoints[0]->node->node) - (*runner->second->endpoints[2]->node->node);
+      const double a = sqrt(runner->second->endpoints[0]->node->node->DistanceSquared(*runner->second->endpoints[1]->node->node));
+      const double b = sqrt(runner->second->endpoints[0]->node->node->DistanceSquared(*runner->second->endpoints[2]->node->node));
+      const double c = sqrt(runner->second->endpoints[2]->node->node->DistanceSquared(*runner->second->endpoints[1]->node->node));
       const double G = sqrt(((a + b + c) * (a + b + c) - 2 * (a * a + b * b + c * c)) / 16.); // area of tesselated triangle
       x = Plane(*(runner->second->endpoints[0]->node->node),
                 *(runner->second->endpoints[1]->node->node),
                 *(runner->second->endpoints[2]->node->node)).getNormal();
-      x.Scale(runner->second->endpoints[1]->node->node->ScalarProduct(&x));
+      x.Scale(runner->second->endpoints[1]->node->node->ScalarProduct(x));
       const double h = x.Norm(); // distance of CoG to triangle
       const double PyramidVolume = (1. / 3.) * G * h; // this formula holds for _all_ pyramids (independent of n-edge base or (not) centered peak)
@@ -917,7 +905,7 @@
             if (DoRandomRotation)
               CopyAtoms[Walker->nr]->x.MatrixMultiplication(Rotations);
-            CopyAtoms[Walker->nr]->x.AddVector(&AtomTranslations);
-            CopyAtoms[Walker->nr]->x.AddVector(&FillerTranslations);
-            CopyAtoms[Walker->nr]->x.AddVector(&CurrentPosition);
+            CopyAtoms[Walker->nr]->x += AtomTranslations;
+            CopyAtoms[Walker->nr]->x += FillerTranslations;
+            CopyAtoms[Walker->nr]->x += CurrentPosition;
 
             // insert into Filling
