Index: src/Actions/MoleculeAction/VerletIntegrationAction.cpp
===================================================================
--- src/Actions/MoleculeAction/VerletIntegrationAction.cpp	(revision 11f0fa19d8254edfe8f5b0654094d3e0eb6a2fb6)
+++ src/Actions/MoleculeAction/VerletIntegrationAction.cpp	(revision bcb59318252793f08bc2b15503ba6a7588e19614)
@@ -42,4 +42,5 @@
 #include "molecule.hpp"
 #include "World.hpp"
+#include "WorldTime.hpp"
 
 #include <vector>
@@ -59,21 +60,23 @@
   // TODO: sollte besser stream nutzen, nicht filename direkt (es sei denn, ist prefix), besser fuer unit test
   AtomSetMixin<std::vector<atom *> > set(World::getInstance().getSelectedAtoms());
-  for (unsigned int step = 0; step < params.MDSteps.get(); ++step) {
-    VerletForceIntegration<std::vector<atom *> > Verlet(set, params.Deltat.get(), false);
-    // parse forces into next step
-    if (!params.forcesfile.get().string().empty()) {
-      LOG(1, "Parsing forces file.");
-      if (!Verlet.parseForcesFile(params.forcesfile.get().string().c_str(), step))
-        LOG(2, "File " << params.forcesfile.get() << " not found.");
-      else
-        LOG(2, "File " << params.forcesfile.get() << " found and parsed.");
-    }
-    // perform velocity verlet update
-    LOG(1, "Verlet integrating.");
-    if (!Verlet(step+1, 1, 0, params.FixedCenterOfMass.get()))
+  // we always operate relative to current time step
+  size_t CurrentStep = WorldTime::getInstance().getTime();
+  VerletForceIntegration<std::vector<atom *> > Verlet(set, params.Deltat.get(), true);
+  // parse forces into next step
+  if (!params.forcesfile.get().string().empty()) {
+    LOG(1, "Parsing forces file.");
+    if (!Verlet.parseForcesFile(params.forcesfile.get().string().c_str(), CurrentStep))
       LOG(2, "File " << params.forcesfile.get() << " not found.");
     else
       LOG(2, "File " << params.forcesfile.get() << " found and parsed.");
   }
+  // perform velocity verlet update
+  LOG(1, "Verlet integrating.");
+  if (!Verlet(CurrentStep+1, 1, 0, params.FixedCenterOfMass.get()))
+    ELOG(1, "Velocity verlet failed.");
+  else
+    LOG(2, "DEBUG: Successfully performed updates on velocity and position.");
+  // increment to next time step
+  World::getInstance().setTime(CurrentStep+1);
 
   return Action::success;
Index: src/Actions/MoleculeAction/VerletIntegrationAction.def
===================================================================
--- src/Actions/MoleculeAction/VerletIntegrationAction.def	(revision 11f0fa19d8254edfe8f5b0654094d3e0eb6a2fb6)
+++ src/Actions/MoleculeAction/VerletIntegrationAction.def	(revision bcb59318252793f08bc2b15503ba6a7588e19614)
@@ -17,13 +17,12 @@
 // ValueStorage by the token "Z" -> first column: int, Z, "Z"
 // "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
-#define paramtypes (boost::filesystem::path)(double)(unsigned int)(bool)
-#define paramtokens ("forces-file")("deltat")("MDSteps")("keep-fixed-CenterOfMass")
-#define paramdescriptions ("file containing")("time step width")("number of MDSteps to integrate")("whether forces and velocities shall be corrected such that center of mass remains at rest")
-#define paramdefaults (PARAM_DEFAULT(""))(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)
-#define paramreferences (forcesfile)(Deltat)(MDSteps)(FixedCenterOfMass)
+#define paramtypes (boost::filesystem::path)(double)(bool)
+#define paramtokens ("forces-file")("deltat")("keep-fixed-CenterOfMass")
+#define paramdescriptions ("file containing")("time step width")("whether forces and velocities shall be corrected such that center of mass remains at rest")
+#define paramdefaults (PARAM_DEFAULT(""))(NOPARAM_DEFAULT)(NOPARAM_DEFAULT)
+#define paramreferences (forcesfile)(Deltat)(FixedCenterOfMass)
 #define paramvalids \
 (DummyValidator< boost::filesystem::path >()) \
 (PositiveValidator< double >()) \
-(NotZeroValidator< unsigned int >()) \
 (DummyValidator< bool >())
 
Index: src/Atom/atom_atominfo.cpp
===================================================================
--- src/Atom/atom_atominfo.cpp	(revision 11f0fa19d8254edfe8f5b0654094d3e0eb6a2fb6)
+++ src/Atom/atom_atominfo.cpp	(revision bcb59318252793f08bc2b15503ba6a7588e19614)
@@ -279,5 +279,5 @@
 {
   OBSERVE;
-  NOTIFY(AtomObservable::VelocityChanged);
+  NOTIFY(AtomObservable::ForceChanged);
   ASSERT(WorldTime::getTime() < AtomicForce.size(),
       "AtomInfo::setAtomicForce() - Access out of range: "
@@ -291,5 +291,5 @@
   OBSERVE;
   if (WorldTime::getTime() == _step)
-    NOTIFY(AtomObservable::VelocityChanged);
+    NOTIFY(AtomObservable::ForceChanged);
   const unsigned int size = AtomicForce.size();
   ASSERT(_step <= size,
@@ -579,20 +579,20 @@
 };
 
-/** Performs a velocity verlet update of the trajectory.
- * Parameters are according to those in configuration class.
+/** Performs a velocity verlet update of the position at \a NextStep from \a LastStep information only.
+ *
+ * We calculate \f$x(t + \delta t) = x(t) + v(t)* \delta t + .5 * \delta t * \delta t * F(t)/m \f$.
+ *
+ *
  * \param NextStep index of sequential step to set
  * \param Deltat time step width
  * \param IsAngstroem whether the force's underlying unit of length is angstroem or bohr radii
  */
-void AtomInfo::VelocityVerletUpdate(int nr, const unsigned int NextStep, double Deltat, bool IsAngstroem)
+void AtomInfo::VelocityVerletUpdateX(int nr, const unsigned int NextStep, double Deltat, bool IsAngstroem)
 {
   const unsigned int LastStep = NextStep == 0 ? 0 : NextStep-1;
 
   LOG(2, "INFO: Particle that currently " << *this);
-  LOG(2, "INFO: Integrating with mass=" << getMass() << " and Deltat="
+  LOG(2, "INFO: Integrating position with mass=" << getMass() << " and Deltat="
       << Deltat << " at NextStep=" << NextStep);
-  // update force
-  // (F+F_old)/2m = a and thus: v = (F+F_old)/2m * t = (F + F_old) * a
-  LOG(3, "INFO: Force at step " << NextStep << " is " << getAtomicForceAtStep(NextStep));
 
   // update position
@@ -603,8 +603,29 @@
     LOG(4, "INFO: position with velocity " << getAtomicVelocityAtStep(LastStep) << " from last step " << tempVector);
     tempVector += .5*Deltat*Deltat*(getAtomicForceAtStep(LastStep))*(1./getMass());     // F = m * a and s =
-    LOG(4, "INFO: position with force " << getAtomicForceAtStep(NextStep) << " from last step " << tempVector);
+    LOG(4, "INFO: position with force " << getAtomicForceAtStep(LastStep) << " from last step " << tempVector);
     setPositionAtStep(NextStep, tempVector);
     LOG(3, "INFO: Position at step " << NextStep << " set to " << tempVector);
   }
+};
+
+/** Performs a velocity verlet update of the velocity at \a NextStep.
+ *
+ * \note forces at NextStep should have been calculated based on position at NextStep prior
+ * to calling this function.
+ *
+ * We calculate \f$v(t) = v(t - \delta t) + \delta _t * .5 * (F(t - \delta t) + F(t))/m \f$.
+ *
+ * Parameters are according to those in configuration class.
+ * \param NextStep index of sequential step to set
+ * \param Deltat time step width
+ * \param IsAngstroem whether the force's underlying unit of length is angstroem or bohr radii
+ */
+void AtomInfo::VelocityVerletUpdateU(int nr, const unsigned int NextStep, double Deltat, bool IsAngstroem)
+{
+  const unsigned int LastStep = NextStep == 0 ? 0 : NextStep-1;
+
+  LOG(2, "INFO: Particle that currently " << *this);
+  LOG(2, "INFO: Integrating velocity with mass=" << getMass() << " and Deltat="
+      << Deltat << " at NextStep=" << NextStep);
 
   // Update U
Index: src/Atom/atom_atominfo.hpp
===================================================================
--- src/Atom/atom_atominfo.hpp	(revision 11f0fa19d8254edfe8f5b0654094d3e0eb6a2fb6)
+++ src/Atom/atom_atominfo.hpp	(revision bcb59318252793f08bc2b15503ba6a7588e19614)
@@ -267,5 +267,6 @@
   size_t getTrajectorySize() const;
   void CopyStepOnStep(const unsigned int dest, const unsigned int src);
-  void VelocityVerletUpdate(int nr, const unsigned int NextStep, double Deltat, bool IsAngstroem);
+  void VelocityVerletUpdateX(int nr, const unsigned int NextStep, double Deltat, bool IsAngstroem);
+  void VelocityVerletUpdateU(int nr, const unsigned int NextStep, double Deltat, bool IsAngstroem);
   double getKineticEnergy(const unsigned int step) const;
   Vector getMomentum(const unsigned int step) const;
Index: src/Dynamics/VerletForceIntegration.hpp
===================================================================
--- src/Dynamics/VerletForceIntegration.hpp	(revision 11f0fa19d8254edfe8f5b0654094d3e0eb6a2fb6)
+++ src/Dynamics/VerletForceIntegration.hpp	(revision bcb59318252793f08bc2b15503ba6a7588e19614)
@@ -78,7 +78,9 @@
 
   /** Performs Verlet integration.
-   * Note that we assume the parsed forces to be in atomic units (hence, if coordinates are in angstroem, we
-   * have to transform them).
-   * This adds a new MD step \f$ t + \Delta t \f$ to the config file.
+   *
+   * We assume that forces have just been calculated. Then, we perform the velocity
+   * and the position calculation for \f$ t + \Delta t \f$, such that forces may be
+   * again calculated with respect to the new position.
+   *
    * \param NextStep current time step (i.e. \f$ t + \Delta t \f$ in the sense of the velocity verlet)
    * \param offset offset in matrix file to the first force component
@@ -100,9 +102,22 @@
     // make sum of forces equal zero
     if (FixedCenterOfMass)
-      correctForceMatrixForFixedCenterOfMass(offset,NextStep);
+      correctForceMatrixForFixedCenterOfMass(offset,NextStep-1);
 
     // solve a constrained potential if we are meant to
-    if (DoConstrainedMD) {
-      performConstraintMinimization(DoConstrainedMD,NextStep);
+    if (DoConstrainedMD)
+      performConstraintMinimization(DoConstrainedMD,NextStep-1);
+
+    if (NextStep > 0) {
+      for(typename AtomSetMixin<T>::iterator iter = atoms.begin(); iter != atoms.end(); ++iter) {
+        //std::cout << "Id of atom is " << (*iter)->getId() << std::endl;
+        (*iter)->VelocityVerletUpdateU((*iter)->getId(), NextStep-1, Deltat, IsAngstroem);
+      }
+
+      // make sum of velocities equal zero
+      if (FixedCenterOfMass)
+        correctVelocitiesForFixedCenterOfMass(NextStep-1);
+
+      // thermostat
+      performThermostatControl(NextStep-1);
     }
 
@@ -112,13 +127,6 @@
     for(typename AtomSetMixin<T>::iterator iter = atoms.begin(); iter != atoms.end(); ++iter) {
       //std::cout << "Id of atom is " << (*iter)->getId() << std::endl;
-      (*iter)->VelocityVerletUpdate((*iter)->getId(), NextStep, Deltat, IsAngstroem);
-    }
-
-    // make sum of velocities equal zero
-    if (FixedCenterOfMass)
-      correctVelocitiesForFixedCenterOfMass(NextStep);
-
-    // thermostat
-    performThermostatControl(NextStep);
+      (*iter)->VelocityVerletUpdateX((*iter)->getId(), NextStep, Deltat, IsAngstroem);
+    }
 
     // exit
Index: tests/Python/AllActions/options.dat
===================================================================
--- tests/Python/AllActions/options.dat	(revision 11f0fa19d8254edfe8f5b0654094d3e0eb6a2fb6)
+++ tests/Python/AllActions/options.dat	(revision bcb59318252793f08bc2b15503ba6a7588e19614)
@@ -91,5 +91,4 @@
 load	"test.data"
 MaxDistance	"-1"
-MDSteps	"1"
 mesh-offset	"0.5,0.5,0.5"
 mesh-size	"10,10,10"
Index: tests/regression/Molecules/VerletIntegration/post/test.conf
===================================================================
--- tests/regression/Molecules/VerletIntegration/post/test.conf	(revision 11f0fa19d8254edfe8f5b0654094d3e0eb6a2fb6)
+++ tests/regression/Molecules/VerletIntegration/post/test.conf	(revision bcb59318252793f08bc2b15503ba6a7588e19614)
@@ -71,25 +71,25 @@
 Ion_Type2	3	6	1.0	3	3	12.01100000000	Carbon	C
 #Ion_TypeNr._Nr.R[0]    R[1]    R[2]    MoveType (0 MoveIon, 1 FixedIon)
-Ion_Type1_1	9.782085945	2.645886050	2.645886050	0	1.000000e-01	0.000000e+00	0.000000e+00	 # molecule nr 0
-Ion_Type1_2	9.782085945	2.645886050	4.425886024	0	1.000000e-01	0.000000e+00	0.000000e+00	 # molecule nr 1
-Ion_Type1_3	10.672039608	3.904536878	3.535886037	0	1.000000e-01	0.000000e+00	0.000000e+00	 # molecule nr 2
-Ion_Type1_4	8.532785963	4.787886018	2.645886050	0	1.000000e-01	0.000000e+00	0.000000e+00	 # molecule nr 3
-Ion_Type1_5	8.532785963	4.787886018	4.425886024	0	1.000000e-01	0.000000e+00	0.000000e+00	 # molecule nr 4
-Ion_Type1_6	6.393632318	3.904536877	3.535886037	0	1.000000e-01	0.000000e+00	0.000000e+00	 # molecule nr 5
-Ion_Type1_7	7.283585982	2.645886050	2.645886050	0	1.000000e-01	0.000000e+00	0.000000e+00	 # molecule nr 6
-Ion_Type1_8	7.283585982	2.645886050	4.425886024	0	1.000000e-01	0.000000e+00	0.000000e+00	 # molecule nr 7
-Ion_Type2_1	9.782085945	3.275186040	3.535886037	0	1.000000e-01	0.000000e+00	0.000000e+00	 # molecule nr 8
-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	1.003242e-01	5.239287e-04	0.000000e+00	 # molecule nr 0
+Ion_Type1_2	9.782085945	2.645886050	4.425886024	0	1.003242e-01	5.239287e-04	0.000000e+00	 # molecule nr 1
+Ion_Type1_3	10.672039608	3.904536878	3.535886037	0	1.003242e-01	5.239287e-04	0.000000e+00	 # molecule nr 2
+Ion_Type1_4	8.532785963	4.787886018	2.645886050	0	1.003242e-01	5.239287e-04	0.000000e+00	 # molecule nr 3
+Ion_Type1_5	8.532785963	4.787886018	4.425886024	0	1.003242e-01	5.239287e-04	0.000000e+00	 # molecule nr 4
+Ion_Type1_6	6.393632318	3.904536877	3.535886037	0	1.003242e-01	5.239287e-04	0.000000e+00	 # molecule nr 5
+Ion_Type1_7	7.283585982	2.645886050	2.645886050	0	1.003242e-01	5.239287e-04	0.000000e+00	 # molecule nr 6
+Ion_Type1_8	7.283585982	2.645886050	4.425886024	0	1.003242e-01	5.239287e-04	0.000000e+00	 # molecule nr 7
+Ion_Type2_1	9.782085945	3.275186040	3.535886037	0	9.984420e-02	4.396970e-05	0.000000e+00	 # molecule nr 8
+Ion_Type2_2	8.532785963	4.158586027	3.535886037	0	9.984420e-02	4.396970e-05	0.000000e+00	 # molecule nr 9
+Ion_Type2_3	7.283585982	3.275186040	3.535886037	0	9.984420e-02	4.396970e-05	0.000000e+00	 # molecule nr 10
 
-Ion_Type1_1	9.783090905	2.645891010	2.645886050	0	1.002953e-01	4.950408e-04	0.000000e+00	 # molecule nr 0
-Ion_Type1_2	9.783090905	2.645891010	4.425886024	0	1.002953e-01	4.950408e-04	0.000000e+00	 # molecule nr 1
-Ion_Type1_3	10.673044568	3.904541838	3.535886037	0	1.002953e-01	4.950408e-04	0.000000e+00	 # molecule nr 2
-Ion_Type1_4	8.533790923	4.787890978	2.645886050	0	1.002953e-01	4.950408e-04	0.000000e+00	 # molecule nr 3
-Ion_Type1_5	8.533790923	4.787890978	4.425886024	0	1.002953e-01	4.950408e-04	0.000000e+00	 # molecule nr 4
-Ion_Type1_6	6.394637278	3.904541837	3.535886037	0	1.002953e-01	4.950408e-04	0.000000e+00	 # molecule nr 5
-Ion_Type1_7	7.284590942	2.645891010	2.645886050	0	1.002953e-01	4.950408e-04	0.000000e+00	 # molecule nr 6
-Ion_Type1_8	7.284590942	2.645891010	4.425886024	0	1.002953e-01	4.950408e-04	0.000000e+00	 # molecule nr 7
-Ion_Type2_1	9.783086361	3.275186456	3.535886037	0	9.984178e-02	4.154535e-05	0.000000e+00	 # molecule nr 8
-Ion_Type2_2	8.533786379	4.158586443	3.535886037	0	9.984178e-02	4.154535e-05	0.000000e+00	 # molecule nr 9
-Ion_Type2_3	7.284586398	3.275186456	3.535886037	0	9.984178e-02	4.154535e-05	0.000000e+00	 # molecule nr 10
+Ion_Type1_1	9.783091811	2.645893914	2.645886050	0 # molecule nr 0
+Ion_Type1_2	9.783091811	2.645893914	4.425886024	0 # molecule nr 1
+Ion_Type1_3	10.673045474	3.904544742	3.535886037	0 # molecule nr 2
+Ion_Type1_4	8.533791829	4.787893882	2.645886050	0 # molecule nr 3
+Ion_Type1_5	8.533791829	4.787893882	4.425886024	0 # molecule nr 4
+Ion_Type1_6	6.394638184	3.904544741	3.535886037	0 # molecule nr 5
+Ion_Type1_7	7.284591848	2.645893914	2.645886050	0 # molecule nr 6
+Ion_Type1_8	7.284591848	2.645893914	4.425886024	0 # molecule nr 7
+Ion_Type2_1	9.783084607	3.275186700	3.535886037	0 # molecule nr 8
+Ion_Type2_2	8.533784625	4.158586687	3.535886037	0 # molecule nr 9
+Ion_Type2_3	7.284584644	3.275186700	3.535886037	0 # molecule nr 10
Index: tests/regression/Molecules/VerletIntegration/testsuite-molecules-verlet-integration.at
===================================================================
--- tests/regression/Molecules/VerletIntegration/testsuite-molecules-verlet-integration.at	(revision 11f0fa19d8254edfe8f5b0654094d3e0eb6a2fb6)
+++ tests/regression/Molecules/VerletIntegration/testsuite-molecules-verlet-integration.at	(revision bcb59318252793f08bc2b15503ba6a7588e19614)
@@ -25,5 +25,5 @@
 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Molecules/VerletIntegration/pre/test.forces .], 0)
 AT_CHECK([chmod u+w $file], 0)
-AT_CHECK([../../molecuilder -i $file --select-all-atoms --verlet-integration --forces-file test.forces --MDSteps 1 --deltat 0.01 --keep-fixed-CenterOfMass 0], 0, [stdout], [stderr])
+AT_CHECK([../../molecuilder -i $file --select-all-atoms --verlet-integration --forces-file test.forces --deltat 0.01 --keep-fixed-CenterOfMass 0], 0, [stdout], [stderr])
 AT_CHECK([diff $file ${abs_top_srcdir}/tests/regression/Molecules/VerletIntegration/post/test.conf], 0, [ignore], [ignore])
 
