Index: molecuilder/src/atom.cpp
===================================================================
--- molecuilder/src/atom.cpp	(revision a0bcf15381c41adb281e0a5d9293f02515ba70c0)
+++ molecuilder/src/atom.cpp	(revision 090299ceb824761635792e23a83fde685d8bced0)
@@ -20,4 +20,5 @@
   type = NULL;
   sort = NULL;
+  FixedIon = 0;
   nr = -1;
   GraphNr = -1;
@@ -59,6 +60,9 @@
   if (out != NULL) {
     *out << "Ion_Type" << ElementNo << "_" << AtomNo << "\t"  << fixed << setprecision(9) << showpoint;
-    *out << x.x[0] << "\t" << x.x[1] << "\t" << x.x[2] << "\t";
-    *out << "\t" << "0\t# Number in molecule " << nr << endl;
+    *out << x.x[0] << "\t" << x.x[1] << "\t" << x.x[2];
+    *out << "\t" << FixedIon;
+    if (v.Norm() > MYEPSILON)
+      *out << "\t" << scientific << setprecision(6) << v.x[0] << "\t" << v.x[1] << "\t" << v.x[2] << "\t";
+    *out << " # Number in molecule " << nr << endl;
     return true;
   } else
Index: molecuilder/src/config.cpp
===================================================================
--- molecuilder/src/config.cpp	(revision a0bcf15381c41adb281e0a5d9293f02515ba70c0)
+++ molecuilder/src/config.cpp	(revision 090299ceb824761635792e23a83fde685d8bced0)
@@ -604,4 +604,11 @@
       ParseForParameter(verbose,file, keyword, 0, 2, 1, double_type, &neues->x.x[1], repetition,critical);
       ParseForParameter(verbose,file, keyword, 0, 3, 1, double_type, &neues->x.x[2], repetition,critical);
+      ParseForParameter(verbose,file, keyword, 0, 4, 1, int_type, &neues->FixedIon, repetition,critical);
+      if(!ParseForParameter(verbose,file, keyword, 0, 5, 1, double_type, &neues->v.x[0], repetition,optional))
+        neues->v.x[0] = 0.;
+      if(!ParseForParameter(verbose,file, keyword, 0, 6, 1, double_type, &neues->v.x[1], repetition,optional))
+        neues->v.x[1] = 0.;
+      if(!ParseForParameter(verbose,file, keyword, 0, 7, 1, double_type, &neues->v.x[2], repetition,optional))
+        neues->v.x[2] = 0.;
       neues->type = elementhash[i]; // find element type
       mol->AddAtom(neues);
Index: molecuilder/src/molecules.cpp
===================================================================
--- molecuilder/src/molecules.cpp	(revision a0bcf15381c41adb281e0a5d9293f02515ba70c0)
+++ molecuilder/src/molecules.cpp	(revision 090299ceb824761635792e23a83fde685d8bced0)
@@ -120,4 +120,6 @@
   	walker->type = pointer->type;	// copy element of atom
   	walker->x.CopyVector(&pointer->x); // copy coordination
+    walker->v.CopyVector(&pointer->v); // copy velocity
+    walker->FixedIon = pointer->FixedIon;
     walker->sort = &walker->nr; 
     walker->nr = last_atom++;  // increase number within molecule
@@ -231,4 +233,6 @@
       FirstOtherAtom = new atom();    // new atom
       FirstOtherAtom->type = elemente->FindElement(1);  // element is Hydrogen
+      FirstOtherAtom->v.CopyVector(&TopReplacement->v); // copy velocity
+      FirstOtherAtom->FixedIon = TopReplacement->FixedIon;
       if (TopReplacement->type->Z == 1) { // neither rescale nor replace if it's already hydrogen
         FirstOtherAtom->father = TopReplacement;
@@ -288,4 +292,8 @@
       FirstOtherAtom->type = elemente->FindElement(1);
       SecondOtherAtom->type = elemente->FindElement(1);
+      FirstOtherAtom->v.CopyVector(&TopReplacement->v); // copy velocity
+      FirstOtherAtom->FixedIon = TopReplacement->FixedIon;
+      SecondOtherAtom->v.CopyVector(&TopReplacement->v); // copy velocity
+      SecondOtherAtom->FixedIon = TopReplacement->FixedIon;
       FirstOtherAtom->father = NULL;  // we are just an added hydrogen with no father
       SecondOtherAtom->father = NULL;  //  we are just an added hydrogen with no father
@@ -340,4 +348,10 @@
       SecondOtherAtom->type = elemente->FindElement(1);
       ThirdOtherAtom->type = elemente->FindElement(1);
+      FirstOtherAtom->v.CopyVector(&TopReplacement->v); // copy velocity
+      FirstOtherAtom->FixedIon = TopReplacement->FixedIon;
+      SecondOtherAtom->v.CopyVector(&TopReplacement->v); // copy velocity
+      SecondOtherAtom->FixedIon = TopReplacement->FixedIon;
+      ThirdOtherAtom->v.CopyVector(&TopReplacement->v); // copy velocity
+      ThirdOtherAtom->FixedIon = TopReplacement->FixedIon;
       FirstOtherAtom->father = NULL;  //  we are just an added hydrogen with no father
       SecondOtherAtom->father = NULL;  //  we are just an added hydrogen with no father
Index: molecuilder/src/molecules.hpp
===================================================================
--- molecuilder/src/molecules.hpp	(revision a0bcf15381c41adb281e0a5d9293f02515ba70c0)
+++ molecuilder/src/molecules.hpp	(revision 090299ceb824761635792e23a83fde685d8bced0)
@@ -345,5 +345,6 @@
 class atom {
   public:
-    vector x;    //!< coordinate array of atom, giving position within cell
+    vector x;       //!< coordinate array of atom, giving position within cell
+    vector v;       //!< velocity array of atom
     element *type;  //!< pointing to element
     atom *previous; //!< previous atom in molecule list
@@ -352,4 +353,5 @@
     atom *Ancestor; //!< "Father" in Depth-First-Search
     char *Name;			//!< unique name used during many-body bond-order fragmentation
+    int FixedIon;   //!< config variable that states whether forces act on the ion or not
     int *sort;      //!< sort criteria
     int nr;         //!< continuous, unique number
