Index: src/TesselPoint.cpp
===================================================================
--- src/TesselPoint.cpp	(revision fb0b62770f84f722e7a844612b7cf575bb534f0e)
+++ src/TesselPoint.cpp	(revision e2373df507fb916476ab8df9646079e2551e04f2)
@@ -20,4 +20,6 @@
 #include "CodePatterns/MemDebug.hpp"
 
+#include "CodePatterns/Log.hpp"
+
 #include "TesselPoint.hpp"
 
@@ -35,4 +37,10 @@
 {};
 
+void TesselPoint::UpdateSteps()
+{
+  ASSERT(0, "TesselPoint::UpdateSteps() should never be called, TesselPoints don't have trajectories.");
+  AtomInfo::AppendTrajectoryStep();
+};
+
 std::ostream & TesselPoint::operator << (std::ostream &ost) const
 {
Index: src/TesselPoint.hpp
===================================================================
--- src/TesselPoint.hpp	(revision fb0b62770f84f722e7a844612b7cf575bb534f0e)
+++ src/TesselPoint.hpp	(revision e2373df507fb916476ab8df9646079e2551e04f2)
@@ -26,4 +26,17 @@
   ~TesselPoint();
 
+  /** Pushes back another step in all trajectory vectors.
+   *
+   * This allows to extend all trajectories contained in different classes
+   * consistently. This is implemented by the topmost class which calls the
+   * real functions, \sa AppendTrajectoryStep(), by all necessary subclasses.
+   *
+   * Note that this function is actually not sensible with TesselPoints
+   * as they should not have trajectories but is implemented as they can be
+   * used stand-alone.
+   *
+   */
+  virtual void UpdateSteps();
+
   std::ostream & operator << (std::ostream &ost) const;
 };
Index: src/atom.cpp
===================================================================
--- src/atom.cpp	(revision fb0b62770f84f722e7a844612b7cf575bb534f0e)
+++ src/atom.cpp	(revision e2373df507fb916476ab8df9646079e2551e04f2)
@@ -21,4 +21,5 @@
 #include "atom.hpp"
 #include "bond.hpp"
+#include "CodePatterns/Log.hpp"
 #include "config.hpp"
 #include "element.hpp"
@@ -78,4 +79,11 @@
 };
 
+
+void atom::UpdateSteps()
+{
+  LOG(4,"atom::UpdateSteps() called.");
+  // append to position, velocity and force vector
+  AtomInfo::AppendTrajectoryStep();
+}
 
 /** Climbs up the father list until NULL, last is returned.
Index: src/atom.hpp
===================================================================
--- src/atom.hpp	(revision fb0b62770f84f722e7a844612b7cf575bb534f0e)
+++ src/atom.hpp	(revision e2373df507fb916476ab8df9646079e2551e04f2)
@@ -52,4 +52,12 @@
 
   virtual atom *clone();
+
+  /** Pushes back another step in all trajectory vectors.
+   *
+   * This allows to extend all trajectories contained in different classes
+   * consistently. This is implemented by the topmost class which calls the
+   * real functions, \sa AppendTrajectoryStep(), by all necessary subclasses.
+   */
+  virtual void UpdateSteps();
 
   bool OutputIndexed(ofstream * const out, const int ElementNo, const int AtomNo, const char *comment = NULL) const;
Index: src/atom_atominfo.cpp
===================================================================
--- src/atom_atominfo.cpp	(revision fb0b62770f84f722e7a844612b7cf575bb534f0e)
+++ src/atom_atominfo.cpp	(revision e2373df507fb916476ab8df9646079e2551e04f2)
@@ -74,4 +74,11 @@
 };
 
+void AtomInfo::AppendTrajectoryStep()
+{
+  AtomicPosition.push_back(zeroVec);
+  AtomicVelocity.push_back(zeroVec);
+  AtomicForce.push_back(zeroVec);
+}
+
 const element *AtomInfo::getType() const
 {
@@ -191,5 +198,6 @@
     AtomicVelocity[_step] = _newvelocity;
   } else if (_step == size) {
-    AtomicVelocity.push_back(_newvelocity);
+    UpdateSteps();
+    AtomicVelocity[_step] = _newvelocity;
   }
 }
@@ -232,5 +240,6 @@
     AtomicForce[_step] = _newforce;
   } else if (_step == size) {
-    AtomicForce.push_back(_newforce);
+    UpdateSteps();
+    AtomicForce[_step] = _newforce;
   }
 }
@@ -266,5 +275,6 @@
     AtomicPosition[_step] = _vector;
   } else if (_step == size) {
-    AtomicPosition.push_back(_vector);
+    UpdateSteps();
+    AtomicPosition[_step] = _vector;
   }
   //cout << "AtomInfo::setPosition: " << getType()->symbol << " at " << getPosition() << endl;
@@ -438,16 +448,7 @@
 void AtomInfo::ResizeTrajectory(size_t MaxSteps)
 {
-  if (AtomicPosition.size() <= (unsigned int)(MaxSteps)) {
-    DoLog(0) && (Log() << Verbose(0) << "Increasing size for trajectory array from " << AtomicPosition.size() << " to " << (MaxSteps+1) << "." << endl);
-    AtomicPosition.resize(MaxSteps+1, zeroVec);
-    AtomicVelocity.resize(MaxSteps+1, zeroVec);
-    AtomicForce.resize(MaxSteps+1, zeroVec);
-  }
-  for (size_t i = AtomicPosition.size(); i <= MaxSteps; ++i) {
-    AtomicPosition[i] = zeroVec;
-    AtomicVelocity[i] = zeroVec;
-    AtomicForce[i] = zeroVec;
-  }
-};
+  for (;AtomicPosition.size() <= (unsigned int)(MaxSteps);)
+    UpdateSteps();
+}
 
 size_t AtomInfo::getTrajectorySize() const
Index: src/atom_atominfo.hpp
===================================================================
--- src/atom_atominfo.hpp	(revision fb0b62770f84f722e7a844612b7cf575bb534f0e)
+++ src/atom_atominfo.hpp	(revision e2373df507fb916476ab8df9646079e2551e04f2)
@@ -41,4 +41,12 @@
   AtomInfo(const VectorInterface &_v);
   virtual ~AtomInfo();
+
+  /** Pushes back another step in all trajectory vectors.
+   *
+   * This allows to extend all trajectories contained in different classes
+   * consistently. This is implemented by the topmost class which calls the
+   * real functions, \sa AppendTrajectoryStep(), by all necessary subclasses.
+   */
+  virtual void UpdateSteps()=0;
 
   /** Getter for AtomicElement.
@@ -242,4 +250,9 @@
 
 protected:
+  /** Function used by this and inheriting classes to extend the trajectory
+   * vectors.
+   */
+  void AppendTrajectoryStep();
+
   // make these protected only such that deriving atom class still has full
   // access needed for clone and alike
