Index: tests/GuiChecks/Atoms/RandomPerturbation/testsuite-atoms-random-perturbation.at
===================================================================
--- tests/GuiChecks/Atoms/RandomPerturbation/testsuite-atoms-random-perturbation.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
+++ tests/GuiChecks/Atoms/RandomPerturbation/testsuite-atoms-random-perturbation.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -0,0 +1,49 @@
+#
+#    MoleCuilder - creates and alters molecular systems
+#    Copyright (C) 2017 Frederik Heber
+#
+#    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/>.
+#
+### randomly perturb atom
+
+AT_SETUP([Atoms - random perturbation])
+AT_KEYWORDS([atoms random-perturbation])
+file=water.xyz
+AT_CHECK([cp -f ${abs_top_srcdir}/tests/regression/Atoms/RandomPerturbation/pre/water.xyz $file], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder --dry-run -i water.xyz --set-random-number-distribution "uniform_int" --random-number-distribution-parameters "max=1;" --select-all-atoms --random-perturbation 0.1 --no-dry-run --store-session session-atoms-random-perturbation.py --session-type python], 0, [ignore], [ignore])
+AT_CHECK([grep -v "Command.*DryRun" session-atoms-random-perturbation.py >session-atoms-random-perturbation_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-atoms-random-perturbation_new.py], 0, [ignore], [ignore])
+AT_CHECK([diff -I '.*reated' $file ${abs_top_srcdir}/tests/regression/Atoms/RandomPerturbation/post/water.xyz], 0, [ignore], [ignore])
+AT_CLEANUP
+
+AT_SETUP([Atoms - random perturbation with Undo])
+AT_KEYWORDS([atoms random-perturbation undo])
+file=water.xyz
+AT_CHECK([cp -f ${abs_top_srcdir}/tests/regression/Atoms/RandomPerturbation/pre/water.xyz $file], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder --dry-run -i water.xyz --set-random-number-distribution "uniform_int" --random-number-distribution-parameters "max=1;" --select-all-atoms --random-perturbation 0.1 --undo --no-dry-run --store-session session-atoms-random-perturbation.py --session-type python], 0, [ignore], [ignore])
+AT_CHECK([grep -v "Command.*DryRun" session-atoms-random-perturbation.py >session-atoms-random-perturbation_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-atoms-random-perturbation_new.py], 0, [ignore], [ignore])
+AT_CHECK([diff -I '.*reated' $file ${abs_top_srcdir}/tests/regression/Atoms/RandomPerturbation/pre/water.xyz], 0, [ignore], [ignore])
+AT_CLEANUP
+
+
+AT_SETUP([Atoms - random perturbation with Redo])
+AT_KEYWORDS([atoms random-perturbation redo])
+file=water.xyz
+AT_CHECK([cp -f ${abs_top_srcdir}/tests/regression/Atoms/RandomPerturbation/pre/water.xyz $file], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder --dry-run -i water.xyz --set-random-number-distribution "uniform_int" --random-number-distribution-parameters "max=1;" --select-all-atoms --random-perturbation 0.1 --undo --redo --no-dry-run --store-session session-atoms-random-perturbation.py --session-type python], 0, [ignore], [ignore])
+AT_CHECK([grep -v "Command.*DryRun" session-atoms-random-perturbation.py >session-atoms-random-perturbation_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-atoms-random-perturbation_new.py], 0, [ignore], [ignore])
+AT_CHECK([diff -I '.*reated' $file ${abs_top_srcdir}/tests/regression/Atoms/RandomPerturbation/post/water.xyz], 0, [ignore], [ignore])
+AT_CLEANUP
Index: tests/GuiChecks/Atoms/testsuite-atoms.at
===================================================================
--- tests/GuiChecks/Atoms/testsuite-atoms.at	(revision 5776cb0f27dcdb2e719693aab2e577ec2128b0af)
+++ tests/GuiChecks/Atoms/testsuite-atoms.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -49,2 +49,5 @@
 m4_include([Atoms/Saturate/testsuite-atoms-saturate-atoms-nitrogen.at])
 m4_include([Atoms/Saturate/testsuite-atoms-saturate-atoms-bonded_atoms.at])
+
+# mirror atoms
+m4_include([Atoms/RandomPerturbation/testsuite-atoms-random-perturbation.at])
Index: tests/GuiChecks/Fragmentation/ParseSaveFragmentResults/testsuite-fragmentation-parse-save-fragment-results.at
===================================================================
--- tests/GuiChecks/Fragmentation/ParseSaveFragmentResults/testsuite-fragmentation-parse-save-fragment-results.at	(revision 5776cb0f27dcdb2e719693aab2e577ec2128b0af)
+++ tests/GuiChecks/Fragmentation/ParseSaveFragmentResults/testsuite-fragmentation-parse-save-fragment-results.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -35,7 +35,7 @@
 AT_CHECK([../../molecuilderguitest session-fragmentation-parse-save-fragment-results_new.py], 0, [ignore], [ignore])
 # we ignore white space changes (also missing new line on end of last line)
-AT_CHECK([diff -Z $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_longrange_enabled.dat], 0, [ignore], [ignore], [
-	AT_CHECK([diff -Z $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_longrange_disabled.dat], 0, [ignore], [ignore], [
-		AT_CHECK([diff -Z $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_jobmarkt_disabled.dat], 0, [ignore], [ignore])
+AT_CHECK([../../difffragmentresultcontainer $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_longrange_enabled.dat], 0, [ignore], [ignore], [
+	AT_CHECK([../../difffragmentresultcontainer $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_longrange_disabled.dat], 0, [ignore], [ignore], [
+		AT_CHECK([../../difffragmentresultcontainer $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_jobmarkt_disabled.dat], 0, [ignore], [ignore])
 	])
 ])
@@ -49,7 +49,7 @@
 AT_CHECK([grep -v "Command.*DryRun" session-fragmentation-parse-save-fragment-results.py >session-fragmentation-parse-save-fragment-results_new.py], 0, [ignore], [ignore])
 AT_CHECK([../../molecuilderguitest session-fragmentation-parse-save-fragment-results_new.py], 0, [ignore], [ignore])
-AT_CHECK([diff -Z $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_longrange_enabled.dat], 0, [ignore], [ignore], [
-	AT_CHECK([diff -Z $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_longrange_disabled.dat], 0, [ignore], [ignore], [
-		AT_CHECK([diff -Z $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_jobmarkt_disabled.dat], 0, [ignore], [ignore])
+AT_CHECK([../../difffragmentresultcontainer $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_longrange_enabled.dat], 0, [ignore], [ignore], [
+	AT_CHECK([../../difffragmentresultcontainer $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_longrange_disabled.dat], 0, [ignore], [ignore], [
+		AT_CHECK([../../difffragmentresultcontainer $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_jobmarkt_disabled.dat], 0, [ignore], [ignore])
 	])
 ])
@@ -67,7 +67,7 @@
 AT_CHECK([../../molecuilderguitest session-fragmentation-parse-save-fragment-results_new.py], 0, [ignore], [ignore])
 # we ignore white space changes (also missing new line on end of last line)
-AT_CHECK([diff -Z $emptyfile ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_empty_longrange_enabled.dat], 0, [ignore], [ignore], [
-	AT_CHECK([diff -Z $emptyfile ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_empty_longrange_disabled.dat], 0, [ignore], [ignore], [
-		AT_CHECK([diff -Z $emptyfile ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_empty_jobmarkt_disabled.dat], 0, [ignore], [ignore])
+AT_CHECK([../../difffragmentresultcontainer $emptyfile ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_empty_longrange_enabled.dat], 0, [ignore], [ignore], [
+	AT_CHECK([../../difffragmentresultcontainer $emptyfile ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_empty_longrange_disabled.dat], 0, [ignore], [ignore], [
+		AT_CHECK([../../difffragmentresultcontainer $emptyfile ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_empty_jobmarkt_disabled.dat], 0, [ignore], [ignore])
 	])
 ])
@@ -85,7 +85,7 @@
 AT_CHECK([../../molecuilderguitest session-fragmentation-parse-save-fragment-results_new.py], 0, [ignore], [ignore])
 # we ignore white space changes (also missing new line on end of last line)
-AT_CHECK([diff -Z $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_longrange_enabled.dat], 0, [ignore], [ignore], [
-	AT_CHECK([diff -Z $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_longrange_disabled.dat], 0, [ignore], [ignore], [
-		AT_CHECK([diff -Z $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_jobmarkt_disabled.dat], 0, [ignore], [ignore])
+AT_CHECK([../../difffragmentresultcontainer $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_longrange_enabled.dat], 0, [ignore], [ignore], [
+	AT_CHECK([../../difffragmentresultcontainer $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_longrange_disabled.dat], 0, [ignore], [ignore], [
+		AT_CHECK([../../difffragmentresultcontainer $file ${abs_top_srcdir}/tests/regression/Fragmentation/ParseSaveFragmentResults/post/results_jobmarkt_disabled.dat], 0, [ignore], [ignore])
 	])
 ])
Index: tests/GuiChecks/Geometry/testsuite-geometry-common.at
===================================================================
--- tests/GuiChecks/Geometry/testsuite-geometry-common.at	(revision 5776cb0f27dcdb2e719693aab2e577ec2128b0af)
+++ tests/GuiChecks/Geometry/testsuite-geometry-common.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -21,14 +21,14 @@
 AT_SETUP([Geometry - automatically added geometry names])
 AT_KEYWORDS([geometry])
-AT_CHECK([../../molecuilder --dry-run --input-to-vector "zeroVector" --position "0,0,0" --no-dry-run --store-session session-geometry-common.py --session-type python], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder --dry-run --input-to-vector "zeroVector" --coordinates "0,0,0" --no-dry-run --store-session session-geometry-common.py --session-type python], 0, [ignore], [ignore])
 AT_CHECK([grep -v "Command.*DryRun" session-geometry-common.py >session-geometry-common_new.py], 0, [ignore], [ignore])
 AT_CHECK([../../molecuilderguitest session-geometry-common_new.py], 5, [ignore], [ignore])
-AT_CHECK([../../molecuilder --dry-run --input-to-vector "unitVectorX" --position "1,0,0" --no-dry-run --store-session session-geometry-common.py --session-type python], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder --dry-run --input-to-vector "unitVectorX" --coordinates "1,0,0" --no-dry-run --store-session session-geometry-common.py --session-type python], 0, [ignore], [ignore])
 AT_CHECK([grep -v "Command.*DryRun" session-geometry-common.py >session-geometry-common_new.py], 0, [ignore], [ignore])
 AT_CHECK([../../molecuilderguitest session-geometry-common_new.py], 5, [ignore], [ignore])
-AT_CHECK([../../molecuilder --dry-run --input-to-vector "unitVectorY" --position "0,1,0" --no-dry-run --store-session session-geometry-common.py --session-type python], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder --dry-run --input-to-vector "unitVectorY" --coordinates "0,1,0" --no-dry-run --store-session session-geometry-common.py --session-type python], 0, [ignore], [ignore])
 AT_CHECK([grep -v "Command.*DryRun" session-geometry-common.py >session-geometry-common_new.py], 0, [ignore], [ignore])
 AT_CHECK([../../molecuilderguitest session-geometry-common_new.py], 5, [ignore], [ignore])
-AT_CHECK([../../molecuilder --dry-run --input-to-vector "unitVectorZ" --position "0,0,1" --no-dry-run --store-session session-geometry-common.py --session-type python], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder --dry-run --input-to-vector "unitVectorZ" --coordinates "0,0,1" --no-dry-run --store-session session-geometry-common.py --session-type python], 0, [ignore], [ignore])
 AT_CHECK([grep -v "Command.*DryRun" session-geometry-common.py >session-geometry-common_new.py], 0, [ignore], [ignore])
 AT_CHECK([../../molecuilderguitest session-geometry-common_new.py], 5, [ignore], [ignore])
@@ -38,8 +38,8 @@
 AT_SETUP([Geometry - illegal geometry names])
 AT_KEYWORDS([geometry])
-AT_CHECK([../../molecuilder --dry-run --input-to-vector "0,0,0" --position "0,0,0" --no-dry-run --store-session session-geometry-common.py --session-type python], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder --dry-run --input-to-vector "0,0,0" --coordinates "0,0,0" --no-dry-run --store-session session-geometry-common.py --session-type python], 0, [ignore], [ignore])
 AT_CHECK([grep -v "Command.*DryRun" session-geometry-common.py >session-geometry-common_new.py], 0, [ignore], [ignore])
 AT_CHECK([../../molecuilderguitest session-geometry-common_new.py], 5, [ignore], [ignore])
-AT_CHECK([../../molecuilder --dry-run --input-to-vector "1" --position "1,0,0" --no-dry-run --store-session session-geometry-common.py --session-type python], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder --dry-run --input-to-vector "1" --coordinates "1,0,0" --no-dry-run --store-session session-geometry-common.py --session-type python], 0, [ignore], [ignore])
 AT_CHECK([grep -v "Command.*DryRun" session-geometry-common.py >session-geometry-common_new.py], 0, [ignore], [ignore])
 AT_CHECK([../../molecuilderguitest session-geometry-common_new.py], 5, [ignore], [ignore])
Index: tests/GuiChecks/Makefile.am
===================================================================
--- tests/GuiChecks/Makefile.am	(revision 5776cb0f27dcdb2e719693aab2e577ec2128b0af)
+++ tests/GuiChecks/Makefile.am	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -25,4 +25,5 @@
 	$(srcdir)/./Atoms/RemoveCuboid/testsuite-atoms-remove-cuboid.at \
 	$(srcdir)/./Atoms/TranslationToOrigin/testsuite-atoms-translation-to-origin.at \
+	$(srcdir)/./Atoms/RandomPerturbation/testsuite-atoms-random-perturbation.at \
 	$(srcdir)/./Atoms/Saturate/testsuite-atoms-saturate-atoms-bonded_atoms.at \
 	$(srcdir)/./Atoms/Saturate/testsuite-atoms-saturate-atoms-carbon.at \
@@ -78,4 +79,5 @@
 	$(srcdir)/./Parser/Pdb/testsuite-parser-pdb-save.at \
 	$(srcdir)/./Parser/Tremolo/testsuite-parser-tremolo-load.at \
+	$(srcdir)/./Parser/Tremolo/testsuite-parser-tremolo-load-multiple-timesteps.at \
 	$(srcdir)/./Parser/Tremolo/testsuite-parser-tremolo-load-multiply.at \
 	$(srcdir)/./Parser/Tremolo/testsuite-parser-tremolo-save-unique_usedfields.at \
@@ -105,4 +107,6 @@
 	$(srcdir)/./Domain/AddEmptyBoundary/testsuite-domain-add-empty-boundary.at \
 	$(srcdir)/./Selection/Atoms/testsuite-selection-atoms.at \
+	$(srcdir)/./Selection/Atoms/AtomByName/testsuite-selection-unselect-atoms-by-name.at \
+	$(srcdir)/./Selection/Atoms/AtomByName/testsuite-selection-select-atoms-by-name.at \
 	$(srcdir)/./Selection/Atoms/AtomById/testsuite-selection-unselect-atom-by-id.at \
 	$(srcdir)/./Selection/Atoms/AtomById/testsuite-selection-select-atom-by-id.at \
@@ -184,8 +188,10 @@
 	$(srcdir)/./Molecules/SaveTemperature/testsuite-molecules-save-temperature.at \
 	$(srcdir)/./Molecules/RotateAroundSelf/testsuite-molecules-rotate-around-self.at \
+	$(srcdir)/./Molecules/RotateAroundBond/testsuite-molecules-rotate-around-bond.at \
 	$(srcdir)/./Molecules/SaveAdjacency/testsuite-molecules-save-adjacency.at \
 	$(srcdir)/./Molecules/Translation-Periodic/testsuite-molecules-translation-periodic.at \
 	$(srcdir)/./Molecules/VerletIntegration/testsuite-molecules-verlet-integration.at \
 	$(srcdir)/./Molecules/Copy/testsuite-molecules-copy-molecule.at \
+	$(srcdir)/./Molecules/StretchBond/testsuite-molecules-stretch-bond-cyclic_bond.at \
 	$(srcdir)/./Molecules/StretchBond/testsuite-molecules-stretch-bond.at \
 	$(srcdir)/./Molecules/RotateAroundOrigin/testsuite-molecules-rotate-around-origin.at \
@@ -232,5 +238,5 @@
 max_jobs = 8
  
-guicheck: adjacencymatcher atlocal package.m4 molecuilder molecuilderguitest trianglematcher $(TESTSUITE)
+guicheck: adjacencymatcher atlocal difffragmentresultcontainer molecuilder molecuilderguitest trianglematcher $(TESTSUITE)
 	nrjobs=; \
 	for flag in $$MAKEFLAGS; do \
@@ -242,5 +248,5 @@
 	$(SHELL) '$(TESTSUITE)' $$nrjobs AUTOTEST_PATH='$(abs_top_builddir)/src' $(TESTSUITEFLAGS)
 
-installguicheck: adjacencymatcher atconfig atlocal molecuilder molecuilderguitest trianglematcher $(TESTSUITE)
+installguicheck: adjacencymatcher atconfig atlocal difffragmentresultcontainer molecuilder molecuilderguitest trianglematcher $(TESTSUITE)
 	nrjobs=; \
 	for flag in $$MAKEFLAGS; do \
Index: tests/GuiChecks/Molecules/RotateAroundBond/testsuite-molecules-rotate-around-bond.at
===================================================================
--- tests/GuiChecks/Molecules/RotateAroundBond/testsuite-molecules-rotate-around-bond.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
+++ tests/GuiChecks/Molecules/RotateAroundBond/testsuite-molecules-rotate-around-bond.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -0,0 +1,116 @@
+#
+#    MoleCuilder - creates and alters molecular systems
+#    Copyright (C) 2017 Frederik Heber
+#
+#    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/>.
+#
+### Rotate around bond
+
+AT_SETUP([Molecules - Rotate around bond])
+AT_KEYWORDS([molecules rotate-around-bond])
+
+file=test-90-true.pdb
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Molecules/RotateAroundBond/pre/test.pdb $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file --select-atom-by-element C --rotate-around-bond 90. --no-dry-run --store-session session-molecules-rotate-around-bond.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-molecules-rotate-around-bond.py >session-molecules-rotate-around-bond_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-molecules-rotate-around-bond_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*reated by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Molecules/RotateAroundBond/post/$file], 0, [ignore], [ignore])
+
+file=test-195-true.pdb
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Molecules/RotateAroundBond/pre/test.pdb $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file --select-atom-by-element C --rotate-around-bond 195. --no-dry-run --store-session session-molecules-rotate-around-bond.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-molecules-rotate-around-bond.py >session-molecules-rotate-around-bond_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-molecules-rotate-around-bond_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*reated by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Molecules/RotateAroundBond/post/$file], 0, [ignore], [ignore])
+
+file=test-95-false.pdb
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Molecules/RotateAroundBond/pre/test.pdb $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file --select-atom-by-element C --rotate-around-bond 95. --bondside 0 --no-dry-run --store-session session-molecules-rotate-around-bond.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-molecules-rotate-around-bond.py >session-molecules-rotate-around-bond_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-molecules-rotate-around-bond_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*reated by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Molecules/RotateAroundBond/post/$file], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+
+AT_SETUP([Molecules - Rotate around bond with Undo])
+AT_KEYWORDS([molecules rotate-around-bond undo])
+
+file=test.pdb
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Molecules/RotateAroundBond/pre/test.pdb $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file --select-atom-by-element C --rotate-around-bond 90. --undo --no-dry-run --store-session session-molecules-rotate-around-bond.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-molecules-rotate-around-bond.py >session-molecules-rotate-around-bond_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-molecules-rotate-around-bond_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*reated by molecuilder.*' -I 'CONECT.*' $file ${abs_top_srcdir}/tests/regression/Molecules/RotateAroundBond/pre/test.pdb], 0, [ignore], [ignore])
+
+file=test-95-false.pdb
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Molecules/RotateAroundBond/pre/test.pdb $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file --select-atom-by-element C --rotate-around-bond 95. --bondside 0 --undo --no-dry-run --store-session session-molecules-rotate-around-bond.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-molecules-rotate-around-bond.py >session-molecules-rotate-around-bond_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-molecules-rotate-around-bond_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*reated by molecuilder.*' -I 'CONECT.*'  $file ${abs_top_srcdir}/tests/regression/Molecules/RotateAroundBond/pre/test.pdb], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+
+AT_SETUP([Molecules - Rotate around bond with Redo])
+AT_KEYWORDS([molecules rotate-around-bond redo])
+
+file=test-90-true.pdb
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Molecules/RotateAroundBond/pre/test.pdb $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file --select-atom-by-element C --rotate-around-bond 90. --undo --redo --no-dry-run --store-session session-molecules-rotate-around-bond.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-molecules-rotate-around-bond.py >session-molecules-rotate-around-bond_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-molecules-rotate-around-bond_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*reated by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Molecules/RotateAroundBond/post/$file], 0, [ignore], [ignore])
+
+file=test-95-false.pdb
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Molecules/RotateAroundBond/pre/test.pdb $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file --select-atom-by-element C --rotate-around-bond 95. --bondside 0 --undo --redo --no-dry-run --store-session session-molecules-rotate-around-bond.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-molecules-rotate-around-bond.py >session-molecules-rotate-around-bond_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-molecules-rotate-around-bond_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*reated by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Molecules/RotateAroundBond/post/$file], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+AT_SETUP([Molecules - Rotate around bond fails for cycles])
+AT_KEYWORDS([molecules rotate-around-bond cycle])
+
+file=test_cycle.pdb
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Molecules/RotateAroundBond/pre/test_cycle.pdb $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file --select-atom-by-id 1 2 --rotate-around-bond 90. --no-dry-run --store-session session-molecules-rotate-around-bond.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-molecules-rotate-around-bond.py >session-molecules-rotate-around-bond_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-molecules-rotate-around-bond_new.py], 5, [stdout], [stderr])
+
+AT_CLEANUP
+
+AT_SETUP([Molecules - Rotate around bond on almost complete cycle])
+AT_KEYWORDS([molecules rotate-around-bond])
+
+file=benzene_90degree.pdb
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Molecules/RotateAroundBond/pre/benzene.pdb $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file --select-atom-by-order -1 -6 --remove-atom --select-atom-by-id 3 5 --rotate-around-bond 90. --no-dry-run --store-session session-molecules-rotate-around-bond.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-molecules-rotate-around-bond.py >session-molecules-rotate-around-bond_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-molecules-rotate-around-bond_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*reated by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Molecules/RotateAroundBond/post/$file], 0, [ignore], [ignore])
+
+AT_CLEANUP
Index: tests/GuiChecks/Molecules/RotateToPrincipalAxisSystem/testsuite-molecules-rotate-to-principal-axis-system.at
===================================================================
--- tests/GuiChecks/Molecules/RotateToPrincipalAxisSystem/testsuite-molecules-rotate-to-principal-axis-system.at	(revision 5776cb0f27dcdb2e719693aab2e577ec2128b0af)
+++ tests/GuiChecks/Molecules/RotateToPrincipalAxisSystem/testsuite-molecules-rotate-to-principal-axis-system.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -57,5 +57,4 @@
 
 AT_SETUP([Molecules - Rotate to PAS with Undo])
-AT_XFAIL_IF([/bin/true])
 AT_KEYWORDS([molecules rotate-to-principal-axis-system undo])
 
@@ -96,5 +95,4 @@
 
 AT_SETUP([Molecules - Rotate to PAS with Redo])
-AT_XFAIL_IF([/bin/true])
 AT_KEYWORDS([molecules rotate-to-principal-axis-system redo])
 
Index: tests/GuiChecks/Molecules/StretchBond/testsuite-molecules-stretch-bond-cyclic_bond.at
===================================================================
--- tests/GuiChecks/Molecules/StretchBond/testsuite-molecules-stretch-bond-cyclic_bond.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
+++ tests/GuiChecks/Molecules/StretchBond/testsuite-molecules-stretch-bond-cyclic_bond.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -0,0 +1,57 @@
+#
+#    MoleCuilder - creates and alters molecular systems
+#    Copyright (C) 2017 Frederik Heber
+#
+#    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/>.
+#
+### stretching cyclic bond
+
+AT_SETUP([Molecules - Stretching cyclic bond])
+AT_KEYWORDS([molecules stretch-bond])
+
+file=benzene.pdb
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Molecules/StretchBond/pre/$file $file], 0)
+AT_CHECK([chmod +w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file --select-atom-by-id 2 3 --stretch-bond 2. --no-dry-run --store-session session-molecules-stretch-bond-cyclic_bond.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-molecules-stretch-bond-cyclic_bond.py >session-molecules-stretch-bond-cyclic_bond_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-molecules-stretch-bond-cyclic_bond_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*reated by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Molecules/StretchBond/post/$file], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+AT_SETUP([Molecules - Stretching cyclic bond with Undo])
+AT_KEYWORDS([molecules stretch-bond undo])
+
+file=benzene.pdb
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Molecules/StretchBond/pre/$file $file], 0)
+AT_CHECK([chmod +w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file --select-atom-by-id 2 3 --stretch-bond 2. --undo --no-dry-run --store-session session-molecules-stretch-bond-cyclic_bond.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-molecules-stretch-bond-cyclic_bond.py >session-molecules-stretch-bond-cyclic_bond_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-molecules-stretch-bond-cyclic_bond_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*reated by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Molecules/StretchBond/pre/$file], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+AT_SETUP([Molecules - Stretching cyclic bond with Redo])
+AT_KEYWORDS([molecules stretch-bond redo])
+
+file=benzene.pdb
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Molecules/StretchBond/pre/$file $file], 0)
+AT_CHECK([chmod +w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file --select-atom-by-id 2 3 --stretch-bond 2. --undo --redo --no-dry-run --store-session session-molecules-stretch-bond-cyclic_bond.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-molecules-stretch-bond-cyclic_bond.py >session-molecules-stretch-bond-cyclic_bond_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-molecules-stretch-bond-cyclic_bond_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*reated by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Molecules/StretchBond/post/$file], 0, [ignore], [ignore])
+
+AT_CLEANUP
Index: tests/GuiChecks/Molecules/testsuite-molecules.at
===================================================================
--- tests/GuiChecks/Molecules/testsuite-molecules.at	(revision 5776cb0f27dcdb2e719693aab2e577ec2128b0af)
+++ tests/GuiChecks/Molecules/testsuite-molecules.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -60,4 +60,7 @@
 m4_include([Molecules/RotateToPrincipalAxisSystem/testsuite-molecules-rotate-to-principal-axis-system.at])
 
+# rotate around one of its bond
+m4_include([Molecules/RotateAroundBond/testsuite-molecules-rotate-around-bond.at])
+
 # Rotate around origin
 m4_include([Molecules/RotateAroundOrigin/testsuite-molecules-rotate-around-origin.at])
@@ -68,4 +71,5 @@
 # stretch one of its bond
 m4_include([Molecules/StretchBond/testsuite-molecules-stretch-bond.at])
+m4_include([Molecules/StretchBond/testsuite-molecules-stretch-bond-cyclic_bond.at])
 
 # anneal forces by one step
Index: tests/GuiChecks/Parser/Tremolo/testsuite-parser-tremolo-load-multiple-timesteps.at
===================================================================
--- tests/GuiChecks/Parser/Tremolo/testsuite-parser-tremolo-load-multiple-timesteps.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
+++ tests/GuiChecks/Parser/Tremolo/testsuite-parser-tremolo-load-multiple-timesteps.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -0,0 +1,67 @@
+#
+#    MoleCuilder - creates and alters molecular systems
+#    Copyright (C) 2017 Frederik Heber
+#
+#    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/>.
+#
+### parsing tremolo
+
+
+AT_SETUP([Parser - loading tremolo file with multiple timesteps])
+AT_KEYWORDS([parser load tremolo timesteps])
+
+file=water_multipletimesteps.data
+AT_CHECK([../../molecuilder --dry-run -i $file -o tremolo -l ${abs_top_srcdir}/tests/regression/Parser/Tremolo/pre/$file --no-dry-run --store-session session-parser-tremolo-load-multiple-timesteps.py --session-type python], 0, [ignore], [ignore])
+AT_CHECK([grep -v "Command.*DryRun" session-parser-tremolo-load-multiple-timesteps.py >session-parser-tremolo-load-multiple-timesteps_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-parser-tremolo-load-multiple-timesteps_new.py], 0, [ignore], [ignore])
+AT_CHECK([diff -w -I '#.*' $file ${abs_top_srcdir}/tests/regression/Parser/Tremolo/post/$file], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+
+AT_SETUP([Parser - loading tremolo file with multiple timesteps with Undo])
+AT_KEYWORDS([parser load tremolo timesteps undo])
+
+file=water_multipletimesteps.data
+AT_CHECK([../../molecuilder --dry-run -i $file -o tremolo -l ${abs_top_srcdir}/tests/regression/Parser/Tremolo/pre/$file --undo --no-dry-run --store-session session-parser-tremolo-load-multiple-timesteps.py --session-type python], 0, [ignore], [ignore])
+AT_CHECK([grep -v "Command.*DryRun" session-parser-tremolo-load-multiple-timesteps.py >session-parser-tremolo-load-multiple-timesteps_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-parser-tremolo-load-multiple-timesteps_new.py], 0, [ignore], [ignore])
+AT_CHECK([diff -w -I '#.*' $file ${abs_top_srcdir}/tests/regression/Parser/Tremolo/post/empty.data], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+
+AT_SETUP([Parser - loading tremolo file with multiple timesteps with Redo])
+AT_KEYWORDS([parser load tremolo redo])
+
+file=water_multipletimesteps.data
+AT_CHECK([../../molecuilder --dry-run -i $file -o tremolo -l ${abs_top_srcdir}/tests/regression/Parser/Tremolo/pre/$file --undo --redo --no-dry-run --store-session session-parser-tremolo-load-multiple-timesteps.py --session-type python], 0, [ignore], [ignore])
+AT_CHECK([grep -v "Command.*DryRun" session-parser-tremolo-load-multiple-timesteps.py >session-parser-tremolo-load-multiple-timesteps_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-parser-tremolo-load-multiple-timesteps_new.py], 0, [ignore], [ignore])
+AT_CHECK([diff -w -I '#.*' $file ${abs_top_srcdir}/tests/regression/Parser/Tremolo/post/$file], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+AT_SETUP([Parser - loading tremolo file with multiple timesteps fail])
+AT_KEYWORDS([parser load tremolo timesteps])
+
+file=water_multipletimesteps_fail.data
+AT_CHECK([../../molecuilder --dry-run -i $file -o tremolo -l ${abs_top_srcdir}/tests/regression/Parser/Tremolo/pre/$file --no-dry-run --store-session session-parser-tremolo-load-multiple-timesteps.py --session-type python], 0, [ignore], [ignore])
+AT_CHECK([grep -v "Command.*DryRun" session-parser-tremolo-load-multiple-timesteps.py >session-parser-tremolo-load-multiple-timesteps_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-parser-tremolo-load-multiple-timesteps_new.py], 0, [ignore], [ignore])
+AT_CHECK([diff -w -I '#.*' $file ${abs_top_srcdir}/tests/regression/Parser/Tremolo/post/$file], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+
Index: tests/GuiChecks/Parser/testsuite-parser.at
===================================================================
--- tests/GuiChecks/Parser/testsuite-parser.at	(revision 5776cb0f27dcdb2e719693aab2e577ec2128b0af)
+++ tests/GuiChecks/Parser/testsuite-parser.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -66,4 +66,5 @@
 m4_include([Parser/Tremolo/testsuite-parser-tremolo-improper.at])
 m4_include([Parser/Tremolo/testsuite-parser-tremolo-load.at])
+m4_include([Parser/Tremolo/testsuite-parser-tremolo-load-multiple-timesteps.at])
 m4_include([Parser/Tremolo/testsuite-parser-tremolo-load-multiply.at])
 m4_include([Parser/Tremolo/testsuite-parser-tremolo-save.at])
Index: tests/GuiChecks/Selection/Atoms/AtomByName/testsuite-selection-select-atoms-by-name.at
===================================================================
--- tests/GuiChecks/Selection/Atoms/AtomByName/testsuite-selection-select-atoms-by-name.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
+++ tests/GuiChecks/Selection/Atoms/AtomByName/testsuite-selection-select-atoms-by-name.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -0,0 +1,59 @@
+#
+#    MoleCuilder - creates and alters molecular systems
+#    Copyright (C) 2017 Frederik Heber
+#
+#    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/>.
+#
+### 6. (un)select atoms by name
+
+# select name by atomic number: 1, 4
+AT_SETUP([Selection - All atoms by specific name])
+AT_KEYWORDS([selection atom name select-atom-by-name])
+
+file=ethane-H5_missing.pdb
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByName/pre/ethane.pdb $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file -v 3 --select-atom-by-name H5 -r --no-dry-run --store-session session-selection-select-atoms-by-name.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-selection-select-atoms-by-name.py >session-selection-select-atoms-by-name_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-selection-select-atoms-by-name_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*created by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByName/post/ethane-H5_missing.pdb], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+
+AT_SETUP([Selection - All atoms by specific name with Undo])
+AT_KEYWORDS([selection atom name select-atom-by-name undo])
+
+file=ethane.pdb
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByName/pre/ethane.pdb $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file -v 3 --select-atom-by-name H5 --undo -r --no-dry-run --store-session session-selection-select-atoms-by-name.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-selection-select-atoms-by-name.py >session-selection-select-atoms-by-name_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-selection-select-atoms-by-name_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*created by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByName/pre/ethane.pdb], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+AT_SETUP([Selection - All atoms by specific name with Redo])
+AT_KEYWORDS([selection atom name select-atom-by-name redo])
+
+file=ethane-H5_missing.pdb
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByName/pre/ethane.pdb $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file -v 3 --select-atom-by-name H5 --undo --redo -r --no-dry-run --store-session session-selection-select-atoms-by-name.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-selection-select-atoms-by-name.py >session-selection-select-atoms-by-name_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-selection-select-atoms-by-name_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*created by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByName/post/ethane-H5_missing.pdb], 0, [ignore], [ignore])
+
+AT_CLEANUP
Index: tests/GuiChecks/Selection/Atoms/AtomByName/testsuite-selection-unselect-atoms-by-name.at
===================================================================
--- tests/GuiChecks/Selection/Atoms/AtomByName/testsuite-selection-unselect-atoms-by-name.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
+++ tests/GuiChecks/Selection/Atoms/AtomByName/testsuite-selection-unselect-atoms-by-name.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -0,0 +1,84 @@
+#
+#    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/>.
+#
+### 5. (un)select atoms by element
+
+
+# select element by atomic number: 1, 4
+AT_SETUP([Unselection - All atoms with specific element by atomic number])
+AT_KEYWORDS([unselection atom element unselect-atom-by-element])
+
+file=test-H_present.xyz
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByElement/pre/test.xyz $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file -v 3 --select-all-atoms --unselect-atom-by-element 1 -r --no-dry-run --store-session session-selection-unselect-atoms-by-name.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-selection-unselect-atoms-by-name.py >session-selection-unselect-atoms-by-name_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-selection-unselect-atoms-by-name_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByElement/post/test-H_present.xyz], 0, [ignore], [ignore])
+
+file=test-Be_present.xyz
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByElement/pre/test.xyz $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file -v 3 --select-all-atoms --unselect-atom-by-element 4 -r --no-dry-run --store-session session-selection-unselect-atoms-by-name.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-selection-unselect-atoms-by-name.py >session-selection-unselect-atoms-by-name_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-selection-unselect-atoms-by-name_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByElement/post/test-Be_present.xyz], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+
+AT_SETUP([Unselection - All atoms with specific element by symbol with Undo])
+AT_KEYWORDS([unselection atom element unselect-atom-by-element undo])
+
+file=test.xyz
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByElement/pre/test.xyz $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file -v 3 --select-all-atoms --unselect-atom-by-element 1 --undo -r --no-dry-run --store-session session-selection-unselect-atoms-by-name.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-selection-unselect-atoms-by-name.py >session-selection-unselect-atoms-by-name_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-selection-unselect-atoms-by-name_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByElement/post/empty.xyz], 0, [ignore], [ignore])
+
+file=test.xyz
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByElement/pre/test.xyz $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file -v 3 --select-all-atoms --unselect-atom-by-element 4 --undo -r --no-dry-run --store-session session-selection-unselect-atoms-by-name.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-selection-unselect-atoms-by-name.py >session-selection-unselect-atoms-by-name_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-selection-unselect-atoms-by-name_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByElement/post/empty.xyz], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+AT_SETUP([Unselection - All atoms with specific element by symbol with Redo])
+AT_KEYWORDS([unselection atom element unselect-atom-by-element redo])
+
+file=test-H_present.xyz
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByElement/pre/test.xyz $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file -v 3 --select-all-atoms --unselect-atom-by-element 1 --undo --redo -r --no-dry-run --store-session session-selection-unselect-atoms-by-name.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-selection-unselect-atoms-by-name.py >session-selection-unselect-atoms-by-name_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-selection-unselect-atoms-by-name_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByElement/post/test-H_present.xyz], 0, [ignore], [ignore])
+
+file=test-Be_present.xyz
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByElement/pre/test.xyz $file], 0)
+AT_CHECK([chmod u+w $file], 0)
+AT_CHECK([../../molecuilder --dry-run -i $file -v 3 --select-all-atoms --unselect-atom-by-element 4 --undo --redo -r --no-dry-run --store-session session-selection-unselect-atoms-by-name.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([grep -v "Command.*DryRun" session-selection-unselect-atoms-by-name.py >session-selection-unselect-atoms-by-name_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-selection-unselect-atoms-by-name_new.py], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/tests/regression/Selection/Atoms/AtomByElement/post/test-Be_present.xyz], 0, [ignore], [ignore])
+
+AT_CLEANUP
Index: tests/GuiChecks/Selection/Atoms/testsuite-selection-atoms.at
===================================================================
--- tests/GuiChecks/Selection/Atoms/testsuite-selection-atoms.at	(revision 5776cb0f27dcdb2e719693aab2e577ec2128b0af)
+++ tests/GuiChecks/Selection/Atoms/testsuite-selection-atoms.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -38,4 +38,8 @@
 m4_include(Selection/Atoms/AtomById/testsuite-selection-unselect-atom-by-id-multiple.at)
 
+# (un)select atoms by name
+m4_include(Selection/Atoms/AtomByName/testsuite-selection-select-atoms-by-name.at)
+m4_include(Selection/Atoms/AtomByName/testsuite-selection-unselect-atoms-by-name.at)
+
 # (un)select atom by order
 m4_include(Selection/Atoms/AtomByOrder/testsuite-selection-select-atom-by-order.at)
Index: tests/GuiChecks/WorldTime/StepWorldTime/testsuite-worldtime-step-world-time.at
===================================================================
--- tests/GuiChecks/WorldTime/StepWorldTime/testsuite-worldtime-step-world-time.at	(revision 5776cb0f27dcdb2e719693aab2e577ec2128b0af)
+++ tests/GuiChecks/WorldTime/StepWorldTime/testsuite-worldtime-step-world-time.at	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -21,12 +21,12 @@
 AT_KEYWORDS([worldtime step-world-time set-world-time])
 
-AT_CHECK([../../molecuilder --dry-run --step-world-time --steps-forward 1 --no-dry-run --store-session session-worldtime-step-world-time.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([../../molecuilder --dry-run --step-world-time 1 --no-dry-run --store-session session-worldtime-step-world-time.py --session-type python], 0, [stdout], [stderr])
 AT_CHECK([grep -v "Command.*DryRun" session-worldtime-step-world-time.py >session-worldtime-step-world-time_new.py], 0, [ignore], [ignore])
 AT_CHECK([../../molecuilderguitest session-worldtime-step-world-time_new.py], 0, [stdout], [stderr])
-AT_CHECK([../../molecuilder --dry-run --set-world-time 4 --step-world-time --steps-backward 2 --no-dry-run --store-session session-worldtime-step-world-time.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([../../molecuilder --dry-run --set-world-time 4 --step-world-time -2 --no-dry-run --store-session session-worldtime-step-world-time.py --session-type python], 0, [stdout], [stderr])
 AT_CHECK([grep -v "Command.*DryRun" session-worldtime-step-world-time.py >session-worldtime-step-world-time_new.py], 0, [ignore], [ignore])
 AT_CHECK([../../molecuilderguitest session-worldtime-step-world-time_new.py], 0, [stdout], [stderr])
 # stepping back too far fails
-AT_CHECK([../../molecuilder --dry-run --set-world-time 1 --step-world-time --steps-backward 2 --no-dry-run --store-session session-worldtime-step-world-time.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([../../molecuilder --dry-run --set-world-time 1 --step-world-time -2 --no-dry-run --store-session session-worldtime-step-world-time.py --session-type python], 0, [stdout], [stderr])
 AT_CHECK([grep -v "Command.*DryRun" session-worldtime-step-world-time.py >session-worldtime-step-world-time_new.py], 0, [ignore], [ignore])
 AT_CHECK([../../molecuilderguitest session-worldtime-step-world-time_new.py], 5, [stdout], [stderr])
@@ -38,5 +38,5 @@
 AT_KEYWORDS([worldtime step-world-time set-world-time undo])
 
-AT_CHECK([../../molecuilder --dry-run --set-world-time 2 --step-world-time --steps-backward  1 --undo --no-dry-run --store-session session-worldtime-step-world-time.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([../../molecuilder --dry-run --set-world-time 2 --step-world-time -1 --undo --no-dry-run --store-session session-worldtime-step-world-time.py --session-type python], 0, [stdout], [stderr])
 AT_CHECK([grep -v "Command.*DryRun" session-worldtime-step-world-time.py >session-worldtime-step-world-time_new.py], 0, [ignore], [ignore])
 AT_CHECK([../../molecuilderguitest session-worldtime-step-world-time_new.py], 0, [stdout], [stderr])
@@ -47,5 +47,5 @@
 AT_KEYWORDS([worldtime step-world-time set-world-time undo redo])
 
-AT_CHECK([../../molecuilder --dry-run --set-world-time 2 --step-world-time --steps-backward 1 --undo --redo --no-dry-run --store-session session-worldtime-step-world-time.py --session-type python], 0, [stdout], [stderr])
+AT_CHECK([../../molecuilder --dry-run --set-world-time 2 --step-world-time -1 --undo --redo --no-dry-run --store-session session-worldtime-step-world-time.py --session-type python], 0, [stdout], [stderr])
 AT_CHECK([grep -v "Command.*DryRun" session-worldtime-step-world-time.py >session-worldtime-step-world-time_new.py], 0, [ignore], [ignore])
 AT_CHECK([../../molecuilderguitest session-worldtime-step-world-time_new.py], 0, [stdout], [stderr])
Index: tests/GuiChecks/atlocal.in
===================================================================
--- tests/GuiChecks/atlocal.in	(revision 5776cb0f27dcdb2e719693aab2e577ec2128b0af)
+++ tests/GuiChecks/atlocal.in	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -1,2 +1,3 @@
 abs_top_srcdir='@abs_top_srcdir@'
+topdir='@abs_top_builddir@'
 valgrind='@VALGRIND@'
Index: tests/GuiChecks/difffragmentresultcontainer.in
===================================================================
--- tests/GuiChecks/difffragmentresultcontainer.in	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
+++ tests/GuiChecks/difffragmentresultcontainer.in	(revision 7516f6d747582ecfc4da7720455bf8d2cded5413)
@@ -0,0 +1,31 @@
+#!/bin/sh
+#
+# wrapper for testing with DiffFragmentResultContainer
+
+. ../../atlocal
+
+if test ! -z ${valgrind}
+then
+G_SLICE=always-malloc G_DEBUG=gc-friendly \
+libtool --mode=execute \
+${valgrind} -v \
+--log-file=valgrind.log \
+--xml=yes \
+--xml-file=valgrind.err \
+--time-stamp=yes \
+--error-exitcode=255 \
+--leak-check=full \
+--leak-resolution=high \
+--num-callers=20 \
+--track-origins=yes \
+--show-reachable=yes \
+"${topdir}/tests/regression/DiffFragmentResultContainer" \
+${1+"$@"}
+else
+"${topdir}/tests/regression/DiffFragmentResultContainer" \
+${1+"$@"}
+fi
+
+status=$?
+
+exit $status
