Index: src/Plane.cpp
===================================================================
--- src/Plane.cpp	(revision 42a101a868efe57386bf87ed2524b862729e936a)
+++ src/Plane.cpp	(revision ccf826e812f27853833b1b3f0938dcdcf4675568)
@@ -182,4 +182,10 @@
 };
 
+Vector Plane::mirrorVector(const Vector &rhs) const {
+  Vector helper = getVectorToPoint(rhs);
+  // substract twice the Vector to the plane
+  return rhs+2*helper;
+}
+
 /************ Methods inherited from Space ****************/
 
Index: src/Plane.hpp
===================================================================
--- src/Plane.hpp	(revision 42a101a868efe57386bf87ed2524b862729e936a)
+++ src/Plane.hpp	(revision ccf826e812f27853833b1b3f0938dcdcf4675568)
@@ -52,4 +52,6 @@
   Vector GetIntersection(const Vector &Origin, const Vector &LineVector) const;
 
+  Vector mirrorVector(const Vector &rhs) const;
+
   /****** Methods inherited from Space ***********/
 
Index: src/Space.hpp
===================================================================
--- src/Space.hpp	(revision 42a101a868efe57386bf87ed2524b862729e936a)
+++ src/Space.hpp	(revision ccf826e812f27853833b1b3f0938dcdcf4675568)
@@ -17,8 +17,33 @@
   virtual ~Space();
 
+  /**
+   * Calculates the distance between a Space and a Vector.
+   */
   virtual double distance(const Vector &point) const=0;
+
+  /**
+   * get the closest point inside the space to another point
+   */
   virtual Vector getClosestPoint(const Vector &point) const=0;
+
+  /**
+   * get the shortest Vector from a point to a Space.
+   *
+   * The Vector always points from the given Vector to the point in space
+   * returned by Plane::getClosestPoint().
+   */
   virtual Vector getVectorToPoint(const Vector &point) const;
+
+  /**
+   * Test wether a point is contained in the space.
+   *
+   * returns true, when the point lies inside and false
+   * otherwise.
+   */
   virtual bool isContained(const Vector &point) const;
+
+  /**
+   * Tests if this space contains the center of the coordinate system.
+   */
   virtual bool hasZero() const;
 
Index: src/molecule_geometry.cpp
===================================================================
--- src/molecule_geometry.cpp	(revision 42a101a868efe57386bf87ed2524b862729e936a)
+++ src/molecule_geometry.cpp	(revision ccf826e812f27853833b1b3f0938dcdcf4675568)
@@ -16,4 +16,5 @@
 #include "molecule.hpp"
 #include "World.hpp"
+#include "Plane.hpp"
 
 /************************************* Functions for class molecule *********************************/
@@ -251,5 +252,12 @@
 void molecule::Mirror(const Vector *n)
 {
-  ActOnAllVectors( &Vector::Mirror, *n );
+  Plane p(*n,0);
+  // TODO: replace with simpler construct (e.g. Boost::foreach)
+  // once the structure of the atom list is fully reworked
+  atom *Walker = start;
+  while (Walker->next != end) {
+    Walker = Walker->next;
+    (*Walker->node) = p.mirrorVector(*Walker->node);
+  }
 };
 
Index: src/unittests/PlaneUnittest.cpp
===================================================================
--- src/unittests/PlaneUnittest.cpp	(revision 42a101a868efe57386bf87ed2524b862729e936a)
+++ src/unittests/PlaneUnittest.cpp	(revision ccf826e812f27853833b1b3f0938dcdcf4675568)
@@ -153,5 +153,50 @@
   CPPUNIT_ASSERT(fabs(p4->distance(e1)-1) < MYEPSILON);
   CPPUNIT_ASSERT_EQUAL(zeroVec,p4->getClosestPoint(e1));
-
-
-}
+}
+
+void PlaneUnittest::mirrorTest(){
+  Vector fixture;
+
+  // some Vectors that lie on the planes
+  fixture = p1->mirrorVector(e1);
+  CPPUNIT_ASSERT_EQUAL(fixture,e1);
+  fixture = p1->mirrorVector(e2);
+  CPPUNIT_ASSERT_EQUAL(fixture,e2);
+  fixture = p1->mirrorVector(e3);
+  CPPUNIT_ASSERT_EQUAL(fixture,e3);
+
+  fixture = p2->mirrorVector(zeroVec);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+  fixture = p2->mirrorVector(e1);
+  CPPUNIT_ASSERT_EQUAL(fixture,e1);
+  fixture = p2->mirrorVector(e2);
+  CPPUNIT_ASSERT_EQUAL(fixture,e2);
+
+  fixture = p3->mirrorVector(zeroVec);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+  fixture = p3->mirrorVector(e1);
+  CPPUNIT_ASSERT_EQUAL(fixture,e1);
+  fixture = p3->mirrorVector(e3);
+  CPPUNIT_ASSERT_EQUAL(fixture,e3);
+
+  fixture = p4->mirrorVector(zeroVec);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+  fixture = p4->mirrorVector(e2);
+  CPPUNIT_ASSERT_EQUAL(fixture,e2);
+  fixture = p4->mirrorVector(e3);
+  CPPUNIT_ASSERT_EQUAL(fixture,e3);
+
+  // some Vectors outside of the planes
+  {
+    Vector t = (2./3.)*(e1+e2+e3);
+    fixture = p1->mirrorVector(zeroVec);
+    CPPUNIT_ASSERT_EQUAL(fixture,t);
+  }
+
+  fixture = p2->mirrorVector(e3);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*e3);
+  fixture = p3->mirrorVector(e2);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*e2);
+  fixture = p4->mirrorVector(e1);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*e1);
+}
Index: src/unittests/PlaneUnittest.hpp
===================================================================
--- src/unittests/PlaneUnittest.hpp	(revision 42a101a868efe57386bf87ed2524b862729e936a)
+++ src/unittests/PlaneUnittest.hpp	(revision ccf826e812f27853833b1b3f0938dcdcf4675568)
@@ -20,4 +20,5 @@
   CPPUNIT_TEST ( pointsTest );
   CPPUNIT_TEST ( operationsTest );
+  CPPUNIT_TEST ( mirrorTest );
   CPPUNIT_TEST_SUITE_END();
 
@@ -30,4 +31,5 @@
   void pointsTest();
   void operationsTest();
+  void mirrorTest();
 
 private:
Index: src/vector.cpp
===================================================================
--- src/vector.cpp	(revision 42a101a868efe57386bf87ed2524b862729e936a)
+++ src/vector.cpp	(revision ccf826e812f27853833b1b3f0938dcdcf4675568)
@@ -602,16 +602,4 @@
 };
 
-/** Mirrors atom against a given plane.
- * \param n[] normal vector of mirror plane.
- */
-void Vector::Mirror(const Vector &n)
-{
-  double projection;
-  projection = ScalarProduct(n)/n.NormSquared();    // remove constancy from n (keep as logical one)
-  // withdraw projected vector twice from original one
-  for (int i=NDIM;i--;)
-    at(i) -= 2.*projection*n[i];
-};
-
 /** Calculates orthonormal vector to one given vectors.
  * Just subtracts the projection onto the given vector from this vector.
Index: src/vector.hpp
===================================================================
--- src/vector.hpp	(revision 42a101a868efe57386bf87ed2524b862729e936a)
+++ src/vector.hpp	(revision ccf826e812f27853833b1b3f0938dcdcf4675568)
@@ -60,5 +60,4 @@
   void ProjectIt(const Vector &y);
   Vector Projection(const Vector &y) const;
-  void Mirror(const Vector &x);
   void ScaleAll(const double *factor);
   void Scale(const double factor);
