Index: doc/userguide/userguide.xml
===================================================================
--- doc/userguide/userguide.xml	(revision b119a092aa1848936f8c80974f857ded3c098885)
+++ doc/userguide/userguide.xml	(revision 5c8807e908af52740778a67bac4173280b6d141b)
@@ -969,4 +969,16 @@
 	  </programlisting>
 	</section>
+
+        <section xml:id='atoms.translate-to-origin'>
+          <title xml:id='atoms.translate-to-origin.title'>Translating atoms</title>
+
+          <para>The following Action is convenient to place a subset of atoms
+          at a known position, the origin, and then translate to some other
+          absolute coordinate. It calculates the average position of the set
+          of selected atoms and then translates all atoms by the negative of
+          this center, i.e. the center is afterwards at the origin.</para>
+
+          <programlisting>... --translate-to-origin</programlisting>
+        </section>
 
         <section xml:id='atoms.change-element'>
@@ -1758,6 +1770,6 @@
         </section>
 
-        <section xml:id='analysis.molecullar-volume'>
-          <title xml:id='analysis.molecullar-volume.title'>Molecular Volume
+        <section xml:id='analysis.molecular-volume'>
+          <title xml:id='analysis.molecular-volume.title'>Molecular Volume
           </title>
           
@@ -1767,4 +1779,16 @@
           that each node of the tesselation consists of an atom of the
           molecule.</para>
+
+          <programlisting>... --molecular-volume</programlisting>
+        </section>
+
+        <section xml:id='analysis.average-molecule-force'>
+          <title xml:id='analysis.average-molecule-forcetitle'>Average force
+          acting on a molecule</title>
+          
+          <para>This sums up all the forces of each atom of a currently 
+          selected molecule and returns the average force vector. This should
+          give you the general direction of acceleration of the molecule.
+          </para>
 
           <programlisting>... --molecular-volume</programlisting>
Index: src/Actions/AnalysisAction/AverageMoleculeForceAction.cpp
===================================================================
--- src/Actions/AnalysisAction/AverageMoleculeForceAction.cpp	(revision 5c8807e908af52740778a67bac4173280b6d141b)
+++ src/Actions/AnalysisAction/AverageMoleculeForceAction.cpp	(revision 5c8807e908af52740778a67bac4173280b6d141b)
@@ -0,0 +1,95 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2014 Frederik Heber. All rights reserved.
+ * 
+ *
+ *   This file is part of MoleCuilder.
+ *
+ *    MoleCuilder is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation, either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    MoleCuilder is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with MoleCuilder.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * AverageMoleculeForceAction.cpp
+ *
+ *  Created on: Aug 26, 2014
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "CodePatterns/Log.hpp"
+#include "Atom/atom.hpp"
+#include "molecule.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+#include "Actions/AnalysisAction/AverageMoleculeForceAction.hpp"
+
+using namespace MoleCuilder;
+
+// and construct the stuff
+#include "AverageMoleculeForceAction.def"
+#include "Action_impl_pre.hpp"
+
+/** =========== define the function ====================== */
+ActionState::ptr AnalysisAverageMoleculeForceAction::performCall() {
+  if (const_cast<const World &>(World::getInstance()).beginMoleculeSelection() ==
+      const_cast<const World &>(World::getInstance()).endMoleculeSelection()) {
+    STATUS("You have not selected any molecules.");
+    return Action::failure;
+  }
+  // execute action
+  for (World::MoleculeSelectionConstIterator moliter = World::getInstance().beginMoleculeSelection();
+      moliter != World::getInstance().endMoleculeSelection(); ++moliter) {
+    const molecule * const mol = moliter->second;
+
+    // sum up
+    Vector AverageForce(zeroVec);
+    size_t No = 0;
+    for (molecule::const_iterator atomiter = mol->begin();
+        atomiter != mol->end(); ++atomiter) {
+      AverageForce += (*atomiter)->getAtomicForce();
+      ++No;
+    }
+    AverageForce *= 1./(double)No;
+    LOG(0, "INFO: The average force for molecule " << mol->getName()
+        << " is " << AverageForce);
+  }
+  return Action::success;
+}
+
+ActionState::ptr AnalysisAverageMoleculeForceAction::performUndo(ActionState::ptr _state) {
+  return Action::success;
+}
+
+ActionState::ptr AnalysisAverageMoleculeForceAction::performRedo(ActionState::ptr _state){
+  return Action::success;
+}
+
+bool AnalysisAverageMoleculeForceAction::canUndo() {
+  return true;
+}
+
+bool AnalysisAverageMoleculeForceAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/AnalysisAction/AverageMoleculeForceAction.def
===================================================================
--- src/Actions/AnalysisAction/AverageMoleculeForceAction.def	(revision 5c8807e908af52740778a67bac4173280b6d141b)
+++ src/Actions/AnalysisAction/AverageMoleculeForceAction.def	(revision 5c8807e908af52740778a67bac4173280b6d141b)
@@ -0,0 +1,29 @@
+/*
+ * AverageMoleculeForceAction.def
+ *
+ *  Created on: Aug 26, 2014
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#undef paramtypes
+#undef paramreferences
+#undef paramtokens
+#undef paramdescriptions
+#undef paramdefaults
+#undef paramvalids
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Analysis
+#define MENUNAME "analysis"
+#define MENUPOSITION 5
+#define ACTIONNAME AverageMoleculeForce
+#define TOKEN "average-molecule-force"
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "calculates the average force acting on the atoms of per selected molecule"
+#undef SHORTFORM
Index: src/Actions/AnalysisAction/AverageMoleculeForceAction.hpp
===================================================================
--- src/Actions/AnalysisAction/AverageMoleculeForceAction.hpp	(revision 5c8807e908af52740778a67bac4173280b6d141b)
+++ src/Actions/AnalysisAction/AverageMoleculeForceAction.hpp	(revision 5c8807e908af52740778a67bac4173280b6d141b)
@@ -0,0 +1,21 @@
+/*
+ * AverageMoleculeForceAction.hpp
+ *
+ *  Created on: Aug 26, 2015
+ *      Author: heber
+ */
+
+#ifndef AVERAGEMOLECULEFORCEACTION_HPP_
+#define AVERAGEMOLECULEFORCEACTION_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Actions/Action.hpp"
+
+#include "AverageMoleculeForceAction.def"
+#include "Actions/Action_impl_header.hpp"
+
+#endif /* AVERAGEMOLECULEFORCEACTION_HPP_ */
Index: src/Actions/AtomAction/TranslateToOriginAction.cpp
===================================================================
--- src/Actions/AtomAction/TranslateToOriginAction.cpp	(revision 5c8807e908af52740778a67bac4173280b6d141b)
+++ src/Actions/AtomAction/TranslateToOriginAction.cpp	(revision 5c8807e908af52740778a67bac4173280b6d141b)
@@ -0,0 +1,108 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2014 Frederik Heber. All rights reserved.
+ * 
+ *
+ *   This file is part of MoleCuilder.
+ *
+ *    MoleCuilder is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation, either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    MoleCuilder is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with MoleCuilder.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * TranslateToOriginAction.cpp
+ *
+ *  Created on: Aug 14, 2014
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "CodePatterns/Assert.hpp"
+#include "CodePatterns/Log.hpp"
+#include "Atom/atom.hpp"
+#include "Atom/AtomSet.hpp"
+#include "LinearAlgebra/Vector.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <fstream>
+#include <string>
+
+#include "Actions/AtomAction/TranslateToOriginAction.hpp"
+
+using namespace MoleCuilder;
+
+// and construct the stuff
+#include "TranslateToOriginAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+ActionState::ptr AtomTranslateToOriginAction::performCall() {
+
+  if (World::getInstance().beginAtomSelection() == World::getInstance().endAtomSelection()) {
+    STATUS("No atoms selected.");
+    return Action::failure;
+  }
+
+  // calculate center of selected atoms
+  Vector Translation;
+  size_t No = 0;
+  for (World::AtomSelectionIterator iter = World::getInstance().beginAtomSelection();
+      iter != World::getInstance().endAtomSelection();
+      ++iter, ++No) {
+    Translation += (iter->second)->getPosition();
+  }
+  ASSERT( No != 0, "AtomTranslateToOriginAction::performCall() - No is nonetheless zero?");
+  Translation *= -1./(double)No;
+
+  World::AtomComposite atoms = World::getInstance().getAllAtoms();
+  atoms.translate(Translation);
+  STATUS("Atoms translated by "+toString(Translation));
+
+  return ActionState::ptr(new AtomTranslateToOriginState(Translation, params));
+}
+
+ActionState::ptr AtomTranslateToOriginAction::performUndo(ActionState::ptr _state) {
+  AtomTranslateToOriginState *state = assert_cast<AtomTranslateToOriginState*>(_state.get());
+
+  World::AtomComposite atoms = World::getInstance().getAllAtoms();
+  atoms.translate(-1.*state->Translation);
+  STATUS("Undid translation by "+toString(state->Translation));
+
+  return ActionState::ptr(_state);
+}
+
+ActionState::ptr AtomTranslateToOriginAction::performRedo(ActionState::ptr _state){
+  AtomTranslateToOriginState *state = assert_cast<AtomTranslateToOriginState*>(_state.get());
+
+  World::AtomComposite atoms = World::getInstance().getAllAtoms();
+  atoms.translate(state->Translation);
+  STATUS("Redid translation by "+toString(state->Translation));
+
+  return ActionState::ptr(_state);
+}
+
+bool AtomTranslateToOriginAction::canUndo() {
+  return true;
+}
+
+bool AtomTranslateToOriginAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/AtomAction/TranslateToOriginAction.def
===================================================================
--- src/Actions/AtomAction/TranslateToOriginAction.def	(revision 5c8807e908af52740778a67bac4173280b6d141b)
+++ src/Actions/AtomAction/TranslateToOriginAction.def	(revision 5c8807e908af52740778a67bac4173280b6d141b)
@@ -0,0 +1,34 @@
+/*
+ * TranslateToOriginAction.def
+ *
+ *  Created on: Aug 14, 2014
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+#include "LinearAlgebra/Vector.hpp"
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
+#undef paramtypes
+#undef paramtokens
+#undef paramdescriptions
+#undef paramreferences
+#undef paramdefaults
+#undef paramvalids
+
+#define statetypes (Vector)
+#define statereferences (Translation)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Atom
+#define MENUNAME "atom"
+#define MENUPOSITION 5
+#define ACTIONNAME TranslateToOrigin
+#define TOKEN "translate-to-origin"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "translate origin of domain to weighted center of all selected atoms"
+#undef SHORTFORM
Index: src/Actions/AtomAction/TranslateToOriginAction.hpp
===================================================================
--- src/Actions/AtomAction/TranslateToOriginAction.hpp	(revision 5c8807e908af52740778a67bac4173280b6d141b)
+++ src/Actions/AtomAction/TranslateToOriginAction.hpp	(revision 5c8807e908af52740778a67bac4173280b6d141b)
@@ -0,0 +1,22 @@
+/*
+ * TranslateToOriginAction.hpp
+ *
+ *  Created on: Aug 14, 2014
+ *      Author: heber
+ */
+
+#ifndef TRANSLATETOORIGINACTION_HPP
+#define TRANSLATETOORIGINACTION_HPP
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#include "Actions/Action.hpp"
+
+#include "TranslateToOriginAction.def"
+#include "Action_impl_header.hpp"
+
+#endif // TRANSLATETOORIGINACTION_HPP
Index: src/Actions/GlobalListOfActions.hpp
===================================================================
--- src/Actions/GlobalListOfActions.hpp	(revision b119a092aa1848936f8c80974f857ded3c098885)
+++ src/Actions/GlobalListOfActions.hpp	(revision 5c8807e908af52740778a67bac4173280b6d141b)
@@ -22,4 +22,5 @@
 #define GLOBALLISTOFACTIONS_initial \
   (Redo) \
+  (AnalysisAverageMoleculeForce) \
   (AnalysisDipoleAngularCorrelation) \
   (AnalysisDipoleCorrelation) \
@@ -36,4 +37,5 @@
   (AtomSaveSelectedAtoms) \
   (AtomTranslate) \
+  (AtomTranslateToOrigin) \
   (BondAdd) \
   (BondRemove) \
Index: src/Actions/Makefile.am
===================================================================
--- src/Actions/Makefile.am	(revision b119a092aa1848936f8c80974f857ded3c098885)
+++ src/Actions/Makefile.am	(revision 5c8807e908af52740778a67bac4173280b6d141b)
@@ -117,4 +117,5 @@
 
 ANALYSISACTIONSOURCE = \
+  Actions/AnalysisAction/AverageMoleculeForceAction.cpp \
   Actions/AnalysisAction/DipoleAngularCorrelationAction.cpp \
   Actions/AnalysisAction/DipoleCorrelationAction.cpp \
@@ -125,4 +126,5 @@
   Actions/AnalysisAction/SurfaceCorrelationAction.cpp
 ANALYSISACTIONHEADER = \
+  Actions/AnalysisAction/AverageMoleculeForceAction.hpp \
   Actions/AnalysisAction/DipoleAngularCorrelationAction.hpp \
   Actions/AnalysisAction/DipoleCorrelationAction.hpp \
@@ -133,4 +135,5 @@
   Actions/AnalysisAction/SurfaceCorrelationAction.hpp
 ANALYSISACTIONDEFS = \
+  Actions/AnalysisAction/AverageMoleculeForceAction.def \
   Actions/AnalysisAction/DipoleAngularCorrelationAction.def \
   Actions/AnalysisAction/DipoleCorrelationAction.def \
@@ -148,5 +151,6 @@
   Actions/AtomAction/RotateAroundOriginByAngleAction.cpp \
   Actions/AtomAction/SaveSelectedAtomsAction.cpp \
-  Actions/AtomAction/TranslateAction.cpp
+  Actions/AtomAction/TranslateAction.cpp \
+  Actions/AtomAction/TranslateToOriginAction.cpp
 ATOMACTIONHEADER = \
   Actions/AtomAction/AddAction.hpp \
@@ -156,5 +160,6 @@
   Actions/AtomAction/RotateAroundOriginByAngleAction.hpp \
   Actions/AtomAction/SaveSelectedAtomsAction.hpp \
-  Actions/AtomAction/TranslateAction.hpp
+  Actions/AtomAction/TranslateAction.hpp \
+  Actions/AtomAction/TranslateToOriginAction.hpp
 ATOMACTIONDEFS = \
   Actions/AtomAction/AddAction.def \
@@ -164,5 +169,6 @@
   Actions/AtomAction/RotateAroundOriginByAngleAction.def \
   Actions/AtomAction/SaveSelectedAtomsAction.def \
-  Actions/AtomAction/TranslateAction.def
+  Actions/AtomAction/TranslateAction.def \
+  Actions/AtomAction/TranslateToOriginAction.def
 
 BONDACTIONSOURCE = \
Index: tests/regression/Atoms/TranslationToOrigin/post/test-shifted-weighted.xyz
===================================================================
--- tests/regression/Atoms/TranslationToOrigin/post/test-shifted-weighted.xyz	(revision 5c8807e908af52740778a67bac4173280b6d141b)
+++ tests/regression/Atoms/TranslationToOrigin/post/test-shifted-weighted.xyz	(revision 5c8807e908af52740778a67bac4173280b6d141b)
@@ -0,0 +1,5 @@
+3
+	Created for TranslateToOrigin regression test
+H	1	-0.5	0
+H	-1	0.5	0
+H	0	0.5	1
Index: tests/regression/Atoms/TranslationToOrigin/post/test-shifted.xyz
===================================================================
--- tests/regression/Atoms/TranslationToOrigin/post/test-shifted.xyz	(revision 5c8807e908af52740778a67bac4173280b6d141b)
+++ tests/regression/Atoms/TranslationToOrigin/post/test-shifted.xyz	(revision 5c8807e908af52740778a67bac4173280b6d141b)
@@ -0,0 +1,5 @@
+3
+	Created for TranslateToOrigin regression test
+H	0	0	0
+H	-2	1	0
+H	-1	1	1
Index: tests/regression/Atoms/TranslationToOrigin/post/test.xyz
===================================================================
--- tests/regression/Atoms/TranslationToOrigin/post/test.xyz	(revision 5c8807e908af52740778a67bac4173280b6d141b)
+++ tests/regression/Atoms/TranslationToOrigin/post/test.xyz	(revision 5c8807e908af52740778a67bac4173280b6d141b)
@@ -0,0 +1,5 @@
+3
+	Created for TranslateToOrigin regression test
+H	1	-1	0
+H	-1	0	0
+H	0	0	1
Index: tests/regression/Atoms/TranslationToOrigin/pre/test.xyz
===================================================================
--- tests/regression/Atoms/TranslationToOrigin/pre/test.xyz	(revision 5c8807e908af52740778a67bac4173280b6d141b)
+++ tests/regression/Atoms/TranslationToOrigin/pre/test.xyz	(revision 5c8807e908af52740778a67bac4173280b6d141b)
@@ -0,0 +1,5 @@
+3
+	Created for TranslateToOrigin regression test
+H	1.	-1.	0
+H	-1.	0.	0
+H	0.	0.	1.
Index: tests/regression/Atoms/TranslationToOrigin/testsuite-atoms-translation-to-origin.at
===================================================================
--- tests/regression/Atoms/TranslationToOrigin/testsuite-atoms-translation-to-origin.at	(revision 5c8807e908af52740778a67bac4173280b6d141b)
+++ tests/regression/Atoms/TranslationToOrigin/testsuite-atoms-translation-to-origin.at	(revision 5c8807e908af52740778a67bac4173280b6d141b)
@@ -0,0 +1,65 @@
+#
+#    MoleCuilder - creates and alters molecular systems
+#    Copyright (C) 2008-2012 University of Bonn
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation, either version 3 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+### translation
+
+AT_SETUP([Atoms - Translation to origin])
+AT_KEYWORDS([atoms translate-to-origin])
+
+file=test.xyz
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Atoms/TranslationToOrigin/pre/test.xyz $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder -i $file --select-atom-by-id 0 --translate-to-origin], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created.*' $file ${abs_top_srcdir}/tests/regression/Atoms/TranslationToOrigin/post/test-shifted.xyz], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Atoms/TranslationToOrigin/pre/test.xyz $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder -i $file --select-atom-by-id 0 1 --translate-to-origin], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created.*' $file ${abs_top_srcdir}/tests/regression/Atoms/TranslationToOrigin/post/test-shifted-weighted.xyz], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+
+AT_SETUP([Atoms - Translation to origin with Undo])
+AT_KEYWORDS([atoms translate-to-origin undo])
+
+file=test.xyz
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Atoms/TranslationToOrigin/pre/test.xyz $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder -i $file --select-atom-by-id 0 --translate-to-origin --undo], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created.*' $file ${abs_top_srcdir}/tests/regression/Atoms/TranslationToOrigin/post/test.xyz], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Atoms/TranslationToOrigin/pre/test.xyz $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder -i $file --select-atom-by-id 0 1 --translate-to-origin --undo], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created.*' $file ${abs_top_srcdir}/tests/regression/Atoms/TranslationToOrigin/post/test.xyz], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+
+AT_SETUP([Atoms - Translation to origin with Redo])
+AT_KEYWORDS([atoms translate-to-origin redo])
+
+file=test.xyz
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Atoms/TranslationToOrigin/pre/test.xyz $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder -i $file --select-atom-by-id 0 --translate-to-origin --undo --redo], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created.*' $file ${abs_top_srcdir}/tests/regression/Atoms/TranslationToOrigin/post/test-shifted.xyz], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Atoms/TranslationToOrigin/pre/test.xyz $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder -i $file --select-atom-by-id 0 1 --translate-to-origin --undo --redo], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created.*' $file ${abs_top_srcdir}/tests/regression/Atoms/TranslationToOrigin/post/test-shifted-weighted.xyz], 0, [ignore], [ignore])
+
+AT_CLEANUP
Index: tests/regression/Atoms/testsuite-atoms.at
===================================================================
--- tests/regression/Atoms/testsuite-atoms.at	(revision b119a092aa1848936f8c80974f857ded3c098885)
+++ tests/regression/Atoms/testsuite-atoms.at	(revision 5c8807e908af52740778a67bac4173280b6d141b)
@@ -39,4 +39,7 @@
 m4_include([Atoms/Translation/testsuite-atoms-translation.at])
 
+# translate to origin
+m4_include([Atoms/TranslationToOrigin/testsuite-atoms-translation-to-origin.at])
+
 # mirror atoms
 m4_include([Atoms/Mirror/testsuite-atoms-mirror.at])
Index: tests/regression/Makefile.am
===================================================================
--- tests/regression/Makefile.am	(revision b119a092aa1848936f8c80974f857ded3c098885)
+++ tests/regression/Makefile.am	(revision 5c8807e908af52740778a67bac4173280b6d141b)
@@ -41,4 +41,5 @@
 	$(srcdir)/Atoms/SaveSelectedAtoms/testsuite-atoms-save-selected-atoms.at \
 	$(srcdir)/Atoms/Translation/testsuite-atoms-translation.at \
+	$(srcdir)/Atoms/TranslationToOrigin/testsuite-atoms-translation-to-origin.at \
 	$(srcdir)/Bond/testsuite-bond.at \
 	$(srcdir)/Bond/Add/testsuite-bond-add.at \
