Index: src/Actions/MoleculeAction/VerletIntegrationAction.cpp
===================================================================
--- src/Actions/MoleculeAction/VerletIntegrationAction.cpp	(revision 5a289ca56183d056db372a06609cdb55af109b71)
+++ src/Actions/MoleculeAction/VerletIntegrationAction.cpp	(revision 0f9726f4346a5859e5febd7a52e400e02be30b61)
@@ -134,5 +134,5 @@
 
   // remove current step for all modified atoms
-  removeLastStep(getIdsFromAtomicInfo(state->UndoInfo), CurrentStep+1);
+  removeSteps(getIdsFromAtomicInfo(state->UndoInfo), CurrentStep+1, CurrentStep+1);
 
   // and set back the old step (forces have been changed)
Index: src/Actions/UndoRedoHelpers.cpp
===================================================================
--- src/Actions/UndoRedoHelpers.cpp	(revision 5a289ca56183d056db372a06609cdb55af109b71)
+++ src/Actions/UndoRedoHelpers.cpp	(revision 0f9726f4346a5859e5febd7a52e400e02be30b61)
@@ -219,9 +219,13 @@
 }
 
-void MoleCuilder::removeLastStep(const std::vector<atomId_t> &_atoms, const unsigned int _step)
-{
-  for (size_t i=0; i<_atoms.size(); ++i) {
-    atom * const _atom = World::getInstance().getAtom(AtomById(_atoms[i]));
-    _atom->removeStep(_step);
+void MoleCuilder::removeSteps(
+    const std::vector<atomId_t> &movedatoms,
+    const unsigned int _firststep,
+    const unsigned int _laststep)
+{
+  for (std::vector<atomId_t>::const_iterator iter = movedatoms.begin();
+      iter != movedatoms.end(); ++iter) {
+    atom * const _atom = World::getInstance().getAtom(AtomById(*iter));
+    _atom->removeSteps(_firststep, _laststep);
   }
 }
Index: src/Actions/UndoRedoHelpers.hpp
===================================================================
--- src/Actions/UndoRedoHelpers.hpp	(revision 5a289ca56183d056db372a06609cdb55af109b71)
+++ src/Actions/UndoRedoHelpers.hpp	(revision 0f9726f4346a5859e5febd7a52e400e02be30b61)
@@ -111,10 +111,14 @@
   void RemoveMoleculesWithAtomsByIds(const std::vector<moleculeId_t> &ids);
 
-  /** Removes the last time step for all \a movedatoms
+  /** Removes the time steps in given interval for all \a movedatoms.
    *
-   * @param movedatoms atoms whose last step in time to remove
-   * @param _step which trajectory to remove
+   * @param movedatoms atoms whose steps in [\a _firststep, \a _laststep] in time to remove
+   * @param _firststep first step in interval to be removed
+   * @param _laststep last step in interval to be removed
    */
-  void removeLastStep(const std::vector<atomId_t> &movedatoms, const unsigned int _step);
+  void removeSteps(
+      const std::vector<atomId_t> &movedatoms,
+      const unsigned int _firststep,
+      const unsigned int _laststep);
 
   /** Adds another time step to all \a movedatoms.
Index: src/Atom/TesselPoint.cpp
===================================================================
--- src/Atom/TesselPoint.cpp	(revision 5a289ca56183d056db372a06609cdb55af109b71)
+++ src/Atom/TesselPoint.cpp	(revision 0f9726f4346a5859e5febd7a52e400e02be30b61)
@@ -58,8 +58,8 @@
 };
 
-void TesselPoint::removeStep(const unsigned int _step)
+void TesselPoint::removeSteps(const unsigned int _firststep, const unsigned int _laststep)
 {
-  ASSERT(0, "TesselPoint::removeStep() should never be called, TesselPoints don't have trajectories.");
-  AtomInfo::removeTrajectoryStep(_step);
+  ASSERT(0, "TesselPoint::removeSteps() should never be called, TesselPoints don't have trajectories.");
+  AtomInfo::removeTrajectorySteps(_firststep, _laststep);
 };
 
Index: src/Atom/TesselPoint.hpp
===================================================================
--- src/Atom/TesselPoint.hpp	(revision 5a289ca56183d056db372a06609cdb55af109b71)
+++ src/Atom/TesselPoint.hpp	(revision 0f9726f4346a5859e5febd7a52e400e02be30b61)
@@ -43,7 +43,10 @@
    * This allows to decrease all trajectories contained in different classes
    * by one consistently. This is implemented by the topmost class which calls
-   * the real functions, \sa removeTrajectoryStep(), by all necessary subclasses.
+   * the real functions, \sa removeTrajectorySteps(), by all necessary subclasses.
+   *
+   * \param _firststep first step in interval to be removed
+   * \param _laststep last step in interval to be removed
    */
-  virtual void removeStep(const unsigned int _step);
+  virtual void removeSteps(const unsigned int _firststep, const unsigned int _laststep);
 
   /** Getter for this.
Index: src/Atom/atom.cpp
===================================================================
--- src/Atom/atom.cpp	(revision 5a289ca56183d056db372a06609cdb55af109b71)
+++ src/Atom/atom.cpp	(revision 0f9726f4346a5859e5febd7a52e400e02be30b61)
@@ -108,11 +108,11 @@
 }
 
-void atom::removeStep(const unsigned int _step)
-{
-  LOG(4,"atom::removeStep() called.");
+void atom::removeSteps(const unsigned int _firststep, const unsigned int _laststep)
+{
+  LOG(4,"atom::removeSteps() called.");
   // append to position, velocity and force vector
-  AtomInfo::removeTrajectoryStep(_step);
+  AtomInfo::removeTrajectorySteps(_firststep, _laststep);
   // append to ListOfBonds vector
-  BondedParticleInfo::removeTrajectoryStep(_step);
+  BondedParticleInfo::removeTrajectorySteps(_firststep, _laststep);
 }
 
Index: src/Atom/atom.hpp
===================================================================
--- src/Atom/atom.hpp	(revision 5a289ca56183d056db372a06609cdb55af109b71)
+++ src/Atom/atom.hpp	(revision 0f9726f4346a5859e5febd7a52e400e02be30b61)
@@ -79,7 +79,10 @@
    * This allows to decrease all trajectories contained in different classes
    * by one consistently. This is implemented by the topmost class which calls
-   * the real functions, \sa removeTrajectoryStep(), by all necessary subclasses.
-   */
-  virtual void removeStep(const unsigned int _step);
+   * the real functions, \sa removeTrajectorySteps(), by all necessary subclasses.
+   *
+   * \param _firststep first step in interval to be removed
+   * \param _laststep last step in interval to be removed
+   */
+  virtual void removeSteps(const unsigned int _firststep, const unsigned int _laststep);
 
   /** Output of a single atom with given numbering.
Index: src/Atom/atom_atominfo.cpp
===================================================================
--- src/Atom/atom_atominfo.cpp	(revision 5a289ca56183d056db372a06609cdb55af109b71)
+++ src/Atom/atom_atominfo.cpp	(revision 0f9726f4346a5859e5febd7a52e400e02be30b61)
@@ -101,11 +101,20 @@
 }
 
-void AtomInfo::removeTrajectoryStep(const unsigned int _step)
+void AtomInfo::eraseInTrajctory(
+    VectorTrajectory_t &_trajectory,
+    const unsigned int _firststep, const unsigned int _laststep)
+{
+  const VectorTrajectory_t::iterator firstiter = _trajectory.lower_bound(_firststep);
+  const VectorTrajectory_t::iterator lastiter = _trajectory.upper_bound(_laststep);
+  _trajectory.erase(firstiter, lastiter);
+}
+
+void AtomInfo::removeTrajectorySteps(const unsigned int _firststep, const unsigned int _laststep)
 {
   NOTIFY(TrajectoryChanged);
-  AtomicPosition.erase(_step);
-  AtomicVelocity.erase(_step);
-  AtomicForce.erase(_step);
-  LOG(5,"AtomInfo::removeTrajectoryStep() called, size is ("
+  eraseInTrajctory(AtomicPosition, _firststep, _laststep);
+  eraseInTrajctory(AtomicVelocity, _firststep, _laststep);
+  eraseInTrajctory(AtomicForce, _firststep, _laststep);
+  LOG(5,"AtomInfo::removeTrajectorySteps() called, size is ("
       << AtomicPosition.size() << ","
       << AtomicVelocity.size() << ","
Index: src/Atom/atom_atominfo.hpp
===================================================================
--- src/Atom/atom_atominfo.hpp	(revision 5a289ca56183d056db372a06609cdb55af109b71)
+++ src/Atom/atom_atominfo.hpp	(revision 0f9726f4346a5859e5febd7a52e400e02be30b61)
@@ -58,11 +58,14 @@
   virtual void UpdateStep(const unsigned int _step)=0;
 
-  /** Pops the last step in all trajectory vectors.
+  /** Pops all steps in the interval [\a _firststep, \a _laststep] in all trajectory vectors.
    *
    * This allows to decrease all trajectories contained in different classes
    * by one consistently. This is implemented by the topmost class which calls
-   * the real functions, \sa removeTrajectoryStep(), by all necessary subclasses.
-   */
-  virtual void removeStep(const unsigned int _step)=0;
+   * the real functions, \sa removeTrajectorySteps(), by all necessary subclasses.
+   *
+   * \param _firststep first step in interval to be removed
+   * \param _laststep last step in interval to be removed
+   */
+  virtual void removeSteps(const unsigned int _firststep, const unsigned int _laststep)=0;
 
   /** DEPRECATED: Getter for element indicated by AtomicElement.
@@ -314,6 +317,9 @@
   /** Function used by this and inheriting classes to decrease the trajectory
    * vectors by one.
-   */
-  void removeTrajectoryStep(const unsigned int _step);
+   *
+   * \param _firststep first step in interval to be removed
+   * \param _laststep last step in interval to be removed
+   */
+  void removeTrajectorySteps(const unsigned int _firststep, const unsigned int _laststep);
 
   // make these protected only such that deriving atom class still has full
@@ -325,4 +331,14 @@
   VectorTrajectory_t AtomicVelocity;       //!< velocity vector of atom, giving last velocity within cell
   VectorTrajectory_t AtomicForce;       //!< Force vector of atom, giving last force within cell
+
+  /** Helper function to avoid an interval of steps in VectorTrajectory_t.
+   *
+   * \param  _trajectory trajectory to remove in
+   * \param _firststep first step in interval to be removed
+   * \param _laststep last step in interval to be removed
+   */
+  static void eraseInTrajctory(
+      VectorTrajectory_t &_trajectory,
+      const unsigned int _firststep, const unsigned int _laststep);
 
 private:
Index: src/Atom/atom_bondedparticleinfo.cpp
===================================================================
--- src/Atom/atom_bondedparticleinfo.cpp	(revision 5a289ca56183d056db372a06609cdb55af109b71)
+++ src/Atom/atom_bondedparticleinfo.cpp	(revision 0f9726f4346a5859e5febd7a52e400e02be30b61)
@@ -51,8 +51,10 @@
 }
 
-void BondedParticleInfo::removeTrajectoryStep(const unsigned int _step)
+void BondedParticleInfo::removeTrajectorySteps(const unsigned int _firststep, const unsigned int _laststep)
 {
-  ListOfBonds.erase(_step);
-  LOG(5,"BondedParticleInfo::removeTrajectoryStep() called, size is " << ListOfBonds.size());
+  const BondTrajectory_t::iterator firstiter = ListOfBonds.lower_bound(_firststep);
+  const BondTrajectory_t::iterator lastiter = ListOfBonds.upper_bound(_laststep);
+  ListOfBonds.erase(firstiter, lastiter);
+  LOG(5,"BondedParticleInfo::removeTrajectorySteps() called, size is " << ListOfBonds.size());
 }
 
Index: src/Atom/atom_bondedparticleinfo.hpp
===================================================================
--- src/Atom/atom_bondedparticleinfo.hpp	(revision 5a289ca56183d056db372a06609cdb55af109b71)
+++ src/Atom/atom_bondedparticleinfo.hpp	(revision 0f9726f4346a5859e5febd7a52e400e02be30b61)
@@ -52,7 +52,10 @@
    * This allows to decrease all trajectories contained in different classes
    * by one consistently. This is implemented by the topmost class which calls
-   * the real functions, \sa removeTrajectoryStep(), by all necessary subclasses.
+   * the real functions, \sa removeTrajectorySteps(), by all necessary subclasses.
+   *
+   * \param _firststep first step in interval to be removed
+   * \param _laststep last step in interval to be removed
    */
-  virtual void removeStep(const unsigned int _step)=0;
+  virtual void removeSteps(const unsigned int _firststep, const unsigned int _laststep)=0;
 
   /** Const accessor to ListOfBonds of WorldTime::CurrentTime.
@@ -131,6 +134,9 @@
   /** Function used by this and inheriting classes to reduce the ListOfBonds
    * vector by one.
+   *
+   * \param _firststep first step in interval to be removed
+   * \param _laststep last step in interval to be removed
    */
-  void removeTrajectoryStep(const unsigned int _step);
+  void removeTrajectorySteps(const unsigned int _firststep, const unsigned int _laststep);
 
   typedef std::map<unsigned int, BondList> BondTrajectory_t;
