Index: src/Actions/ParserAction/SetTremoloAtomdataAction.cpp
===================================================================
--- src/Actions/ParserAction/SetTremoloAtomdataAction.cpp	(revision 5b0581944c6a32b73762473862229922ce1b40eb)
+++ src/Actions/ParserAction/SetTremoloAtomdataAction.cpp	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
@@ -43,29 +43,43 @@
   LOG(1, "Setting Tremolo's ATOMDATA to: '" << params.atomdata_string.get() << "'");
 
-  parser.setAtomData(params.atomdata_string.get());
+  const std::string old_atomdata = parser.getAtomData();
 
-  return Action::success;
+  if (params.atomdata_reset.get())
+    parser.resetAtomData(params.atomdata_string.get());
+  else
+    parser.setAtomData(params.atomdata_string.get());
+
+  return Action::state_ptr(new ParserSetTremoloAtomdataState(old_atomdata, params));
 }
 
 Action::state_ptr ParserSetTremoloAtomdataAction::performUndo(Action::state_ptr _state) {
-//  ParserLoadXyzState *state = assert_cast<ParserLoadXyzState*>(_state.get());
+  ParserSetTremoloAtomdataState *state = assert_cast<ParserSetTremoloAtomdataState*>(_state.get());
 
-  return Action::failure;
-//  string newName = state->mol->getName();
-//  state->mol->setName(state->lastName);
-//
-//  return Action::state_ptr(new ParserLoadXyzState(state->mol,newName));
+  FormatParser<tremolo> &parser = FormatParserStorage::getInstance().getParser<tremolo>();
+  LOG(1, "INFO: Reverting to 'ATOMDATA " << state->old_atomdata << "'.");
+  parser.resetAtomData(state->old_atomdata);
+
+  return Action::state_ptr(_state);
 }
 
 Action::state_ptr ParserSetTremoloAtomdataAction::performRedo(Action::state_ptr _state){
-  return Action::failure;
+  ParserSetTremoloAtomdataState *state = assert_cast<ParserSetTremoloAtomdataState*>(_state.get());
+
+  FormatParser<tremolo> &parser = FormatParserStorage::getInstance().getParser<tremolo>();
+
+  if (state->params.atomdata_reset.get())
+    parser.resetAtomData(state->params.atomdata_string.get());
+  else
+    parser.setAtomData(state->params.atomdata_string.get());
+
+  return Action::state_ptr(_state);
 }
 
 bool ParserSetTremoloAtomdataAction::canUndo() {
-  return false;
+  return true;
 }
 
 bool ParserSetTremoloAtomdataAction::shouldUndo() {
-  return false;
+  return true;
 }
 /** =========== end of function ====================== */
Index: src/Actions/ParserAction/SetTremoloAtomdataAction.def
===================================================================
--- src/Actions/ParserAction/SetTremoloAtomdataAction.def	(revision 5b0581944c6a32b73762473862229922ce1b40eb)
+++ src/Actions/ParserAction/SetTremoloAtomdataAction.def	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
@@ -9,4 +9,5 @@
 #include <boost/filesystem.hpp>
 
+#include "Parameters/Validators/DummyValidator.hpp"
 #include "Parameters/Validators/Specific/AtomDataValidator.hpp"
 
@@ -14,14 +15,15 @@
 // 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 (std::string)
-#define paramtokens ("set-tremolo-atomdata")
-#define paramdescriptions ("properties to set, space-separated")
-#undef paramdefaults
-#define paramreferences (atomdata_string)
+#define paramtypes (std::string)(bool)
+#define paramtokens ("set-tremolo-atomdata")("reset")
+#define paramdescriptions ("properties to set, space-separated")("whether to append (false) or overwrite (true) with given atomdata")
+#define paramdefaults (NOPARAM_DEFAULT)(PARAM_DEFAULT(true))
+#define paramreferences (atomdata_string)(atomdata_reset)
 #define paramvalids \
-(AtomDataValidator())
+(AtomDataValidator()) \
+(DummyValidator<bool>())
 
-#undef statetypes
-#undef statereferences
+#define statetypes (std::string)
+#define statereferences (old_atomdata)
 
 // some defines for all the names, you may use ACTION, STATE and PARAMS
Index: src/Parser/TremoloParser.cpp
===================================================================
--- src/Parser/TremoloParser.cpp	(revision 5b0581944c6a32b73762473862229922ce1b40eb)
+++ src/Parser/TremoloParser.cpp	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
@@ -41,4 +41,5 @@
 
 #include <algorithm>
+#include <boost/lambda/lambda.hpp>
 #include <boost/lexical_cast.hpp>
 #include <boost/tokenizer.hpp>
@@ -47,4 +48,5 @@
 #include <map>
 #include <sstream>
+#include <string>
 #include <vector>
 
@@ -531,4 +533,25 @@
 }
 
+std::string FormatParser< tremolo >::getAtomData() const
+{
+  std::stringstream output;
+  std::for_each(usedFields_save.begin(), usedFields_save.end(),
+      output << boost::lambda::_1 << " ");
+  const std::string returnstring(output.str());
+  return returnstring.substr(0, returnstring.find_last_of(" "));
+}
+
+/** Appends the properties per atom to print to .data file by parsing line from
+ *  \a atomdata_string.
+ *
+ *  We just call \sa  FormatParser< tremolo >::parseAtomDataKeysLine().
+ *
+ * @param atomdata_string line to parse with space-separated values
+ */
+void FormatParser< tremolo >::setAtomData(const std::string &atomdata_string)
+{
+  parseAtomDataKeysLine(atomdata_string, 0, usedFields_save);
+}
+
 /** Sets the properties per atom to print to .data file by parsing line from
  *  \a atomdata_string.
@@ -539,5 +562,5 @@
  * @param atomdata_string line to parse with space-separated values
  */
-void FormatParser< tremolo >::setAtomData(const std::string &atomdata_string)
+void FormatParser< tremolo >::resetAtomData(const std::string &atomdata_string)
 {
   usedFields_save.clear();
Index: src/Parser/TremoloParser.hpp
===================================================================
--- src/Parser/TremoloParser.hpp	(revision 5b0581944c6a32b73762473862229922ce1b40eb)
+++ src/Parser/TremoloParser.hpp	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
@@ -53,5 +53,7 @@
   void load(std::istream* file);
   void save(std::ostream* file, const std::vector<atom *> &atoms);
+  std::string getAtomData() const;
   void setAtomData(const std::string &atomdata_string);
+  void resetAtomData(const std::string &atomdata_string);
 
 private:
Index: src/Parser/unittests/ParserTremoloUnitTest.cpp
===================================================================
--- src/Parser/unittests/ParserTremoloUnitTest.cpp	(revision 5b0581944c6a32b73762473862229922ce1b40eb)
+++ src/Parser/unittests/ParserTremoloUnitTest.cpp	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
@@ -148,4 +148,27 @@
 }
 
+void ParserTremoloUnitTest::getsetAtomDataTest() {
+  stringstream input;
+  input << Tremolo_Atomdata1;
+  parser->load(&input);
+
+  CPPUNIT_ASSERT_EQUAL( std::string("Id name type x=3"), parser->getAtomData() );
+
+  // overwrite keys
+  const std::string fewkeys("Id type x=3 neighbors=2");
+  parser->resetAtomData(fewkeys);
+  CPPUNIT_ASSERT_EQUAL( fewkeys, parser->getAtomData() );
+
+  // add some keys
+  const std::string morekeys("charge");
+  parser->setAtomData(morekeys);
+  CPPUNIT_ASSERT_EQUAL( fewkeys+std::string(" ")+morekeys, parser->getAtomData() );
+
+  // add similar key
+  const std::string otherkey("neighbors=4");
+  parser->setAtomData(otherkey);
+  CPPUNIT_ASSERT( fewkeys+std::string(" ")+morekeys != parser->getAtomData() );
+}
+
 void ParserTremoloUnitTest::readTremoloCoordinatesTest() {
   stringstream input;
Index: src/Parser/unittests/ParserTremoloUnitTest.hpp
===================================================================
--- src/Parser/unittests/ParserTremoloUnitTest.hpp	(revision 5b0581944c6a32b73762473862229922ce1b40eb)
+++ src/Parser/unittests/ParserTremoloUnitTest.hpp	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
@@ -22,4 +22,5 @@
   CPPUNIT_TEST_SUITE( ParserTremoloUnitTest ) ;
   CPPUNIT_TEST ( readTremoloPreliminaryCommentsTest );
+  CPPUNIT_TEST ( getsetAtomDataTest );
   CPPUNIT_TEST ( readTremoloCoordinatesTest );
   CPPUNIT_TEST ( readTremoloVelocityTest );
@@ -35,4 +36,5 @@
 
   void readTremoloPreliminaryCommentsTest();
+  void getsetAtomDataTest();
   void readTremoloCoordinatesTest();
   void readTremoloVelocityTest();
Index: tests/Python/AllActions/options.dat
===================================================================
--- tests/Python/AllActions/options.dat	(revision 5b0581944c6a32b73762473862229922ce1b40eb)
+++ tests/Python/AllActions/options.dat	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
@@ -123,4 +123,5 @@
 random-number-engine-parameters	"seed=2;"
 repeat-box	"1 1 1"
+reset	1
 rotate-around-origin	"180."
 rotate-around-origin	"20."
Index: tests/regression/Makefile.am
===================================================================
--- tests/regression/Makefile.am	(revision 5b0581944c6a32b73762473862229922ce1b40eb)
+++ tests/regression/Makefile.am	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
@@ -140,4 +140,5 @@
 	$(srcdir)/Parser/Tremolo-Potentials/testsuite-parser-tremolo-potentials-load.at \
 	$(srcdir)/Parser/Tremolo-Potentials/testsuite-parser-tremolo-potentials-save.at \
+	$(srcdir)/Parser/Tremolo-SetAtomdata/testsuite-parser-tremolo-resetatomdata.at \
 	$(srcdir)/Parser/Tremolo-SetAtomdata/testsuite-parser-tremolo-setatomdata.at \
 	$(srcdir)/Parser/Xyz/testsuite-parser-xyz-empty.at \
Index: tests/regression/Parser/Tremolo-SetAtomdata/post/output.data
===================================================================
--- tests/regression/Parser/Tremolo-SetAtomdata/post/output.data	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
+++ tests/regression/Parser/Tremolo-SetAtomdata/post/output.data	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
@@ -0,0 +1,4 @@
+# ATOMDATA	Id	type	x=3
+# Box	20	0	0	0	20	0	0	0	20
+1	Ar	4.72977	8	8	
+2	Ar	7.3	8	8	
Index: tests/regression/Parser/Tremolo-SetAtomdata/post/undo.data
===================================================================
--- tests/regression/Parser/Tremolo-SetAtomdata/post/undo.data	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
+++ tests/regression/Parser/Tremolo-SetAtomdata/post/undo.data	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
@@ -0,0 +1,4 @@
+# ATOMDATA	Id	name	type	x=3
+# Box	20	0	0	0	20	0	0	0	20
+1	Ar1	Ar	4.72977	8	8	
+2	Ar2	Ar	7.3	8	8	
Index: tests/regression/Parser/Tremolo-SetAtomdata/testsuite-parser-tremolo-resetatomdata.at
===================================================================
--- tests/regression/Parser/Tremolo-SetAtomdata/testsuite-parser-tremolo-resetatomdata.at	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
+++ tests/regression/Parser/Tremolo-SetAtomdata/testsuite-parser-tremolo-resetatomdata.at	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
@@ -0,0 +1,34 @@
+### parsing tremolo
+
+AT_SETUP([Parser - set tremolo's atomdata])
+AT_KEYWORDS([parser tremolo set-tremolo-atomdata])
+
+file=argon.data
+AT_CHECK([/bin/cp ${abs_top_srcdir}/tests/regression/Parser/Tremolo-SetAtomdata/pre/argon.data $file], 0, [ignore], [ignore])
+AT_CHECK([chmod u+w $file], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -i argon.data --set-tremolo-atomdata "Id type x=3" --reset 1], 0, [stdout], [ignore])
+AT_CHECK([diff -I '%.*' $file ${abs_top_srcdir}/tests/regression/Parser/Tremolo-SetAtomdata/post/output.data], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+AT_SETUP([Parser - set tremolo's atomdata with Undo])
+AT_KEYWORDS([parser tremolo set-tremolo-atomdata undo])
+
+file=argon.data
+AT_CHECK([/bin/cp ${abs_top_srcdir}/tests/regression/Parser/Tremolo-SetAtomdata/pre/argon.data $file], 0, [ignore], [ignore])
+AT_CHECK([chmod u+w $file], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -i argon.data --set-tremolo-atomdata "Id type x=3" --reset 1 --undo], 0, [stdout], [ignore])
+AT_CHECK([diff -I '%.*' $file ${abs_top_srcdir}/tests/regression/Parser/Tremolo-SetAtomdata/post/undo.data], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+AT_SETUP([Parser - set tremolo's atomdata with Redo])
+AT_KEYWORDS([parser tremolo set-tremolo-atomdata redo])
+
+file=argon.data
+AT_CHECK([/bin/cp ${abs_top_srcdir}/tests/regression/Parser/Tremolo-SetAtomdata/pre/argon.data $file], 0, [ignore], [ignore])
+AT_CHECK([chmod u+w $file], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -i argon.data --set-tremolo-atomdata "Id type x=3" --reset 1 --undo --redo], 0, [stdout], [ignore])
+AT_CHECK([diff -I '%.*' $file ${abs_top_srcdir}/tests/regression/Parser/Tremolo-SetAtomdata/post/output.data], 0, [ignore], [ignore])
+
+AT_CLEANUP
Index: tests/regression/Parser/Tremolo-SetAtomdata/testsuite-parser-tremolo-setatomdata.at
===================================================================
--- tests/regression/Parser/Tremolo-SetAtomdata/testsuite-parser-tremolo-setatomdata.at	(revision 5b0581944c6a32b73762473862229922ce1b40eb)
+++ tests/regression/Parser/Tremolo-SetAtomdata/testsuite-parser-tremolo-setatomdata.at	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
@@ -1,5 +1,5 @@
 ### parsing tremolo
 
-AT_SETUP([Parser - set tremolo's atomdata])
+AT_SETUP([Parser - reset tremolo's atomdata])
 AT_KEYWORDS([parser tremolo set-tremolo-atomdata])
 
@@ -8,5 +8,27 @@
 AT_CHECK([chmod u+w $file], 0, [ignore], [ignore])
 AT_CHECK([../../molecuilder -i argon.data --set-tremolo-atomdata "type x=3"], 0, [stdout], [ignore])
-AT_CHECK([file=argon.data; diff -I '%.*' $file ${abs_top_srcdir}/tests/regression/Parser/Tremolo-SetAtomdata/post/argon.data], 0, [ignore], [ignore])
+AT_CHECK([diff -I '%.*' $file ${abs_top_srcdir}/tests/regression/Parser/Tremolo-SetAtomdata/post/argon.data], 0, [ignore], [ignore])
 
 AT_CLEANUP
+
+AT_SETUP([Parser - reset tremolo's atomdata with Undo])
+AT_KEYWORDS([parser tremolo set-tremolo-atomdata undo])
+
+file=argon.data
+AT_CHECK([/bin/cp ${abs_top_srcdir}/tests/regression/Parser/Tremolo-SetAtomdata/pre/argon.data $file], 0, [ignore], [ignore])
+AT_CHECK([chmod u+w $file], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -i argon.data --set-tremolo-atomdata "type x=3" --undo], 0, [stdout], [ignore])
+AT_CHECK([diff -I '%.*' $file ${abs_top_srcdir}/tests/regression/Parser/Tremolo-SetAtomdata/post/undo.data], 0, [ignore], [ignore])
+
+AT_CLEANUP
+
+AT_SETUP([Parser - reset tremolo's atomdata with Redo])
+AT_KEYWORDS([parser tremolo set-tremolo-atomdata redo])
+
+file=argon.data
+AT_CHECK([/bin/cp ${abs_top_srcdir}/tests/regression/Parser/Tremolo-SetAtomdata/pre/argon.data $file], 0, [ignore], [ignore])
+AT_CHECK([chmod u+w $file], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -i argon.data --set-tremolo-atomdata "type x=3" --undo --redo], 0, [stdout], [ignore])
+AT_CHECK([diff -I '%.*' $file ${abs_top_srcdir}/tests/regression/Parser/Tremolo-SetAtomdata/post/argon.data], 0, [ignore], [ignore])
+
+AT_CLEANUP
Index: tests/regression/Parser/Tremolo/post/water-neighbors.data
===================================================================
--- tests/regression/Parser/Tremolo/post/water-neighbors.data	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
+++ tests/regression/Parser/Tremolo/post/water-neighbors.data	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
@@ -0,0 +1,4 @@
+# ATOMDATA Id name resName resSeq x=3 charge type neighbors=2
+  1  OH2 TIP3  1   1.583   1.785   1.480 -0.8340  O    2   3
+  2  H1  TIP3  1   1.186   1.643   2.213  0.4170  H    1   0
+  3  H2  TIP3  1   2.642   1.896   1.730  0.4170  H    1   0
Index: tests/regression/Parser/testsuite-parser.at
===================================================================
--- tests/regression/Parser/testsuite-parser.at	(revision 5b0581944c6a32b73762473862229922ce1b40eb)
+++ tests/regression/Parser/testsuite-parser.at	(revision ca331ceac7b5334d5556ab0315bbb33b93f58f63)
@@ -59,4 +59,5 @@
 # setting tremolo's atomdata line
 m4_include([Parser/Tremolo-SetAtomdata/testsuite-parser-tremolo-setatomdata.at])
+m4_include([Parser/Tremolo-SetAtomdata/testsuite-parser-tremolo-resetatomdata.at])
 
 # writing and exttypes file
