Index: src/Actions/MoleculeAction/ForceAnnealingAction.cpp
===================================================================
--- src/Actions/MoleculeAction/ForceAnnealingAction.cpp	(revision 8c6b6882361db20ebc18a4a5a4547d3238ec93c5)
+++ src/Actions/MoleculeAction/ForceAnnealingAction.cpp	(revision 6145577aecddb746ff0590fdb34d1f67d8064deb)
@@ -71,4 +71,11 @@
     return Action::failure;
   }
+
+  size_t CurrentStep = WorldTime::getInstance().getTime();
+  if (CurrentStep == 0) {
+    ELOG(1, "WorldTime must be at least at step 1 already, use step-world-time if necessary.");
+    return Action::failure;
+  }
+
   // first, we need to sort the mixin according to their ids (as selected atoms are sorted
   // according to their arbitrary address in memory)
@@ -76,11 +83,13 @@
 
   // create undo state for all selected atoms (undo info)
-  std::vector<AtomicInfo> UndoInfo;
-  UndoInfo.reserve(set.size());
-  {
-    for (World::AtomSelectionConstIterator iter = World::getInstance().beginAtomSelection();
-        iter != World::getInstance().endAtomSelection();
-        ++iter)
-      UndoInfo.push_back(AtomicInfo(*(iter->second)));
+  std::vector< std::vector<AtomicInfo> > UndoInfo(2);
+  for (int i=0;i<2;++i) {
+    UndoInfo[i].reserve(set.size());
+    {
+      for (World::AtomSelectionConstIterator iter = World::getInstance().beginAtomSelection();
+          iter != World::getInstance().endAtomSelection();
+          ++iter)
+        UndoInfo[i].push_back(AtomicInfo(*(iter->second), CurrentStep-i));
+    }
   }
 
@@ -93,9 +102,4 @@
       params.MaxDistance.get(),
       params.DampingFactor.get());
-  size_t CurrentStep = WorldTime::getInstance().getTime();
-  if (CurrentStep == 0) {
-    ELOG(1, "WorldTime must be at least at step 1 already, use step-world-time if necessary.");
-    return Action::failure;
-  }
 
   // parse forces into last step (assuming we stepped on already)
@@ -113,12 +117,15 @@
   STATUS("Successfully optimized structure by one step.");
 
-  std::vector<AtomicInfo> RedoInfo;
-  RedoInfo.reserve(set.size());
-  {
-    for (World::AtomSelectionConstIterator iter = World::getInstance().beginAtomSelection();
-        iter != World::getInstance().endAtomSelection();
-        ++iter)
-      RedoInfo.push_back(AtomicInfo(*(iter->second)));
+  std::vector< std::vector<AtomicInfo> > RedoInfo(2);
+  for (int i=0;i<2;++i) {
+    RedoInfo[i].reserve(set.size());
+    {
+      for (World::AtomSelectionConstIterator iter = World::getInstance().beginAtomSelection();
+          iter != World::getInstance().endAtomSelection();
+          ++iter)
+        RedoInfo[i].push_back(AtomicInfo(*(iter->second), CurrentStep-i));
+    }
   }
+
   MoleculeForceAnnealingState *UndoState =
     new MoleculeForceAnnealingState(UndoInfo, RedoInfo, params);
@@ -130,7 +137,9 @@
   MoleculeForceAnnealingState *state =
       assert_cast<MoleculeForceAnnealingState*>(_state.get());
+  const size_t CurrentStep = WorldTime::getInstance().getTime();
 
   // set stored old state
-  SetAtomsFromAtomicInfo(state->UndoInfo);
+  for (int i=0;i<2;++i)
+    SetAtomsFromAtomicInfo(state->UndoInfo[i], CurrentStep-i);
 
   return ActionState::ptr(_state);
@@ -140,7 +149,9 @@
   MoleculeForceAnnealingState *state =
       assert_cast<MoleculeForceAnnealingState*>(_state.get());
+  const size_t CurrentStep = WorldTime::getInstance().getTime();
 
   // set stored new state
-  SetAtomsFromAtomicInfo(state->RedoInfo);
+  for (int i=0;i<2;++i)
+    SetAtomsFromAtomicInfo(state->RedoInfo[i], CurrentStep-i);
 
   return ActionState::ptr(_state);
Index: src/Actions/MoleculeAction/ForceAnnealingAction.def
===================================================================
--- src/Actions/MoleculeAction/ForceAnnealingAction.def	(revision 8c6b6882361db20ebc18a4a5a4547d3238ec93c5)
+++ src/Actions/MoleculeAction/ForceAnnealingAction.def	(revision 6145577aecddb746ff0590fdb34d1f67d8064deb)
@@ -32,5 +32,5 @@
 (DummyValidator<bool>())
 
-#define statetypes (std::vector<AtomicInfo>)(std::vector<AtomicInfo>)
+#define statetypes (std::vector< std::vector<AtomicInfo> >)(std::vector< std::vector<AtomicInfo> >)
 #define statereferences (UndoInfo)(RedoInfo)
 
Index: src/Actions/UndoRedoHelpers.cpp
===================================================================
--- src/Actions/UndoRedoHelpers.cpp	(revision 8c6b6882361db20ebc18a4a5a4547d3238ec93c5)
+++ src/Actions/UndoRedoHelpers.cpp	(revision 6145577aecddb746ff0590fdb34d1f67d8064deb)
@@ -145,5 +145,7 @@
 }
 
-void MoleCuilder::SetAtomsFromAtomicInfo(const std::vector<AtomicInfo> &_movedatoms)
+void MoleCuilder::SetAtomsFromAtomicInfo(
+    const std::vector<AtomicInfo> &_movedatoms,
+    const unsigned int _step)
 {
   BOOST_FOREACH( const AtomicInfo &_atominfo, _movedatoms) {
@@ -153,5 +155,5 @@
         "MoleCuilder::SetAtomsFromAtomicInfo() - cannot find atom with id "
         +toString(id)+" in the world.");
-    _atominfo.setAtom( *_atom );
+    _atominfo.setAtom( *_atom, _step );
   }
 }
Index: src/Actions/UndoRedoHelpers.hpp
===================================================================
--- src/Actions/UndoRedoHelpers.hpp	(revision 8c6b6882361db20ebc18a4a5a4547d3238ec93c5)
+++ src/Actions/UndoRedoHelpers.hpp	(revision 6145577aecddb746ff0590fdb34d1f67d8064deb)
@@ -19,4 +19,5 @@
 #include "Atom/AtomicInfo.hpp"
 #include "Bond/BondInfo.hpp"
+#include "WorldTime.hpp"
 
 namespace MoleCuilder {
@@ -61,6 +62,9 @@
    *
    * @param movedatoms vector of atomicInfo
+   * @param _step set state information for given world time
    */
-  void SetAtomsFromAtomicInfo(const std::vector<AtomicInfo> &_movedatoms);
+  void SetAtomsFromAtomicInfo(
+      const std::vector<AtomicInfo> &_movedatoms,
+      const unsigned int _step = WorldTime::getTime());
 
   /** Selects all atoms inside the given vector
Index: src/Atom/AtomicInfo.cpp
===================================================================
--- src/Atom/AtomicInfo.cpp	(revision 8c6b6882361db20ebc18a4a5a4547d3238ec93c5)
+++ src/Atom/AtomicInfo.cpp	(revision 6145577aecddb746ff0590fdb34d1f67d8064deb)
@@ -58,10 +58,10 @@
 {}
 
-AtomicInfo::AtomicInfo(const atom &_atom) :
-    Position(_atom.getPosition()),
+AtomicInfo::AtomicInfo(const atom &_atom, unsigned int _step) :
+    Position(_atom.getPositionAtStep(_step)),
     Type(_atom.getType()),
     charge(_atom.getCharge()),
-    Velocity(_atom.getAtomicVelocity()),
-    Force(_atom.getAtomicForce()),
+    Velocity(_atom.getAtomicVelocityAtStep(_step)),
+    Force(_atom.getAtomicForceAtStep(_step)),
     FatherId(_atom.father->getId()),
     MolId(0),
@@ -101,11 +101,11 @@
 
 
-bool AtomicInfo::setAtom(atom &_atom) const
+bool AtomicInfo::setAtom(atom &_atom, const unsigned int _step) const
 {
-  _atom.setPosition(Position);
+  _atom.setPositionAtStep(_step, Position);
   _atom.setType(Type);
   _atom.setCharge(charge);
-  _atom.setAtomicVelocity(Velocity);
-  _atom.setAtomicForce(Force);
+  _atom.setAtomicVelocityAtStep(_step, Velocity);
+  _atom.setAtomicForceAtStep(_step, Force);
 
   // set old id
Index: src/Atom/AtomicInfo.hpp
===================================================================
--- src/Atom/AtomicInfo.hpp	(revision 8c6b6882361db20ebc18a4a5a4547d3238ec93c5)
+++ src/Atom/AtomicInfo.hpp	(revision 6145577aecddb746ff0590fdb34d1f67d8064deb)
@@ -20,4 +20,5 @@
 
 #include "Bond/BondInfo.hpp"
+#include "WorldTime.hpp"
 
 class atom;
@@ -31,9 +32,9 @@
 public:
   AtomicInfo();
-  AtomicInfo(const atom &_atom);
+  AtomicInfo(const atom &_atom, const unsigned int _step = WorldTime::getTime());
   AtomicInfo(const AtomicInfo &_atominfo);
   ~AtomicInfo();
 
-  bool setAtom(atom &_atom) const;
+  bool setAtom(atom &_atom, const unsigned int _step = WorldTime::getTime()) const;
   atomId_t getId() const;
 
Index: tests/regression/Molecules/ForceAnnealing/post/test-undo.conf
===================================================================
--- tests/regression/Molecules/ForceAnnealing/post/test-undo.conf	(revision 8c6b6882361db20ebc18a4a5a4547d3238ec93c5)
+++ tests/regression/Molecules/ForceAnnealing/post/test-undo.conf	(revision 6145577aecddb746ff0590fdb34d1f67d8064deb)
@@ -82,2 +82,14 @@
 Ion_Type2_2	8.532785963	4.158586027	3.535886037	0	1.000000e-01	0.000000e+00	0.000000e+00	 # molecule nr 9
 Ion_Type2_3	7.283585982	3.275186040	3.535886037	0	1.000000e-01	0.000000e+00	0.000000e+00	 # molecule nr 10
+
+Ion_Type1_1	9.782085945	2.645886050	2.645886050	0 # molecule nr 0
+Ion_Type1_2	9.782085945	2.645886050	4.425886024	0 # molecule nr 1
+Ion_Type1_3	10.672039608	3.904536878	3.535886037	0 # molecule nr 2
+Ion_Type1_4	8.532785963	4.787886018	2.645886050	0 # molecule nr 3
+Ion_Type1_5	8.532785963	4.787886018	4.425886024	0 # molecule nr 4
+Ion_Type1_6	6.393632318	3.904536877	3.535886037	0 # molecule nr 5
+Ion_Type1_7	7.283585982	2.645886050	2.645886050	0 # molecule nr 6
+Ion_Type1_8	7.283585982	2.645886050	4.425886024	0 # molecule nr 7
+Ion_Type2_1	9.782085945	3.275186040	3.535886037	0 # molecule nr 8
+Ion_Type2_2	8.532785963	4.158586027	3.535886037	0 # molecule nr 9
+Ion_Type2_3	7.283585982	3.275186040	3.535886037	0 # molecule nr 10
Index: tests/regression/Molecules/ForceAnnealing/testsuite-molecules-force-annealing.at
===================================================================
--- tests/regression/Molecules/ForceAnnealing/testsuite-molecules-force-annealing.at	(revision 8c6b6882361db20ebc18a4a5a4547d3238ec93c5)
+++ tests/regression/Molecules/ForceAnnealing/testsuite-molecules-force-annealing.at	(revision 6145577aecddb746ff0590fdb34d1f67d8064deb)
@@ -33,5 +33,4 @@
 AT_SETUP([Molecules - Force Annealing with Undo])
 AT_KEYWORDS([molecules force-annealing undo])
-AT_XFAIL_IF([/bin/true])
 
 file=test.conf
