Index: src/Parameters/Validators/Specific/AtomDataValidator.cpp
===================================================================
--- src/Parameters/Validators/Specific/AtomDataValidator.cpp	(revision 2169e0ab7f139ec7ca71e976f42b6fbc0f912501)
+++ src/Parameters/Validators/Specific/AtomDataValidator.cpp	(revision 5a667d65ddd9600eacfe9936617b6df8681e339d)
@@ -23,7 +23,9 @@
 #include "AtomDataValidator.hpp"
 
+#include "Parser/TremoloParser.hpp"
+
 bool AtomDataValidator::isValid(const std::string & _value) const
 {
-  return true; // TODO
+  return FormatParser< tremolo >::testParseAtomDataKeysLine(_value);
 }
 
Index: src/Parser/TremoloParser.cpp
===================================================================
--- src/Parser/TremoloParser.cpp	(revision 2169e0ab7f139ec7ca71e976f42b6fbc0f912501)
+++ src/Parser/TremoloParser.cpp	(revision 5a667d65ddd9600eacfe9936617b6df8681e339d)
@@ -49,4 +49,7 @@
 #include <vector>
 
+#include <boost/assign/list_of.hpp> // for 'map_list_of()'
+#include <boost/assert.hpp>
+
 // declare specialized static variables
 const std::string FormatParserTrait<tremolo>::name = "tremolo";
@@ -54,4 +57,29 @@
 const ParserTypes FormatParserTrait<tremolo>::type = tremolo;
 
+// static instances
+std::map<std::string, TremoloKey::atomDataKey> FormatParser<tremolo>::knownKeys =
+    boost::assign::map_list_of("x",TremoloKey::x)
+    ("u",TremoloKey::u)
+    ("F",TremoloKey::F)
+    ("stress",TremoloKey::stress)
+    ("Id",TremoloKey::Id)
+    ("neighbors",TremoloKey::neighbors)
+    ("imprData",TremoloKey::imprData)
+    ("GroupMeasureTypeNo",TremoloKey::GroupMeasureTypeNo)
+    ("type",TremoloKey::type)
+    ("extType",TremoloKey::extType)
+    ("name",TremoloKey::name)
+    ("resName",TremoloKey::resName)
+    ("chainID",TremoloKey::chainID)
+    ("resSeq",TremoloKey::resSeq)
+    ("occupancy",TremoloKey::occupancy)
+    ("tempFactor",TremoloKey::tempFactor)
+    ("segID",TremoloKey::segID)
+    ("Charge",TremoloKey::Charge)
+    ("charge",TremoloKey::charge)
+    ("GrpTypeNo",TremoloKey::GrpTypeNo)
+    ("torsion",TremoloKey::torsion)
+    (" ",TremoloKey::noKey); // with this we can detect invalid keys
+
 /**
  * Constructor.
@@ -60,27 +88,4 @@
   FormatParser_common(NULL)
 {
-  knownKeys["x"] = TremoloKey::x;
-  knownKeys["u"] = TremoloKey::u;
-  knownKeys["F"] = TremoloKey::F;
-  knownKeys["stress"] = TremoloKey::stress;
-  knownKeys["Id"] = TremoloKey::Id;
-  knownKeys["neighbors"] = TremoloKey::neighbors;
-  knownKeys["imprData"] = TremoloKey::imprData;
-  knownKeys["GroupMeasureTypeNo"] = TremoloKey::GroupMeasureTypeNo;
-  knownKeys["type"] = TremoloKey::type;
-  knownKeys["extType"] = TremoloKey::extType;
-  knownKeys["name"] = TremoloKey::name;
-  knownKeys["resName"] = TremoloKey::resName;
-  knownKeys["chainID"] = TremoloKey::chainID;
-  knownKeys["resSeq"] = TremoloKey::resSeq;
-  knownKeys["occupancy"] = TremoloKey::occupancy;
-  knownKeys["tempFactor"] = TremoloKey::tempFactor;
-  knownKeys["segID"] = TremoloKey::segID;
-  knownKeys["Charge"] = TremoloKey::Charge;
-  knownKeys["charge"] = TremoloKey::charge;
-  knownKeys["GrpTypeNo"] = TremoloKey::GrpTypeNo;
-  knownKeys["torsion"] = TremoloKey::torsion;
-  knownKeys[" "] = TremoloKey::noKey; // with this we can detect invalid keys
-
   createKnownTypesByIdentity();
 
@@ -92,4 +97,5 @@
 }
 
+
 /**
  * Destructor.
@@ -99,5 +105,4 @@
   usedFields_save.clear();
   additionalAtomData.clear();
-  knownKeys.clear();
 }
 
@@ -441,5 +446,6 @@
     if (knownKeys[keyword.substr(0, keyword.find("="))] == TremoloKey::noKey) {
       // TODO: throw exception about unknown key
-      cout << "Unknown key: " << keyword << " is not part of the tremolo format specification." << endl;
+      cout << "Unknown key: " << keyword.substr(0, keyword.find("=")) << " is not part of the tremolo format specification." << endl;
+      throw IllegalParserKeyException();
       break;
     }
@@ -447,4 +453,31 @@
   }
   //LOG(1, "INFO: " << fields);
+}
+
+/**
+ * Tests whether the keys from the ATOMDATA line can be read correctly.
+ *
+ * \param line to parse the keys from
+ */
+bool FormatParser< tremolo >::testParseAtomDataKeysLine(
+    const std::string &line) {
+  std::string keyword;
+  std::stringstream lineStream;
+
+  // check string after ATOMDATA
+  const std::string AtomData("ATOMDATA");
+  const size_t AtomDataOffset = line.find(AtomData, 0);
+  if (AtomDataOffset == std::string::npos)
+    lineStream << line;
+  else
+    lineStream << line.substr(AtomDataOffset + AtomData.length());
+  while (lineStream.good()) {
+    lineStream >> keyword;
+    //LOG(2, "DEBUG: Checking key " << keyword.substr(0, keyword.find("=")) << ".");
+    if (knownKeys[keyword.substr(0, keyword.find("="))] == TremoloKey::noKey)
+      return false;
+  }
+  //LOG(1, "INFO: " << fields);
+  return true;
 }
 
Index: src/Parser/TremoloParser.hpp
===================================================================
--- src/Parser/TremoloParser.hpp	(revision 2169e0ab7f139ec7ca71e976f42b6fbc0f912501)
+++ src/Parser/TremoloParser.hpp	(revision 5a667d65ddd9600eacfe9936617b6df8681e339d)
@@ -27,4 +27,5 @@
 
 class molecule;
+class AtomDataValidator;
 
 // declaration of specialized FormatParserTrait
@@ -46,4 +47,5 @@
 class FormatParser< tremolo >  : virtual public FormatParserInterface, public FormatParser_common
 {
+  friend class AtomDataValidator;
 public:
   FormatParser();
@@ -92,4 +94,5 @@
   void readAtomDataLine(const std::string &line, molecule *newmol);
   void parseAtomDataKeysLine(const std::string &line, const int offset, usedFields_t &fields);
+  static bool testParseAtomDataKeysLine(const std::string &line);
   void readNeighbors(std::stringstream* line, const int numberOfNeighbors, const int atomId);
   void processNeighborInformation(const std::vector<atomId_t> &atoms);
@@ -108,5 +111,5 @@
    * Map to associate the known keys with numbers.
    */
-  std::map<std::string, TremoloKey::atomDataKey> knownKeys;
+  static std::map<std::string, TremoloKey::atomDataKey> knownKeys;
 
   /**
Index: src/Parser/unittests/ParserTremoloUnitTest.cpp
===================================================================
--- src/Parser/unittests/ParserTremoloUnitTest.cpp	(revision 2169e0ab7f139ec7ca71e976f42b6fbc0f912501)
+++ src/Parser/unittests/ParserTremoloUnitTest.cpp	(revision 5a667d65ddd9600eacfe9936617b6df8681e339d)
@@ -23,4 +23,6 @@
 #include <cppunit/extensions/TestFactoryRegistry.h>
 #include <cppunit/ui/text/TestRunner.h>
+
+#include "CodePatterns/Log.hpp"
 
 #include "Atom/atom.hpp"
@@ -91,4 +93,6 @@
   World::getInstance();
 
+  setVerbosity(5);
+
   parser = new FormatParser<tremolo>();
 
@@ -139,5 +143,5 @@
   // Invalid key in Atomdata line
   input << Tremolo_invalidkey;
-  parser->load(&input);
+  CPPUNIT_ASSERT_THROW( parser->load(&input), IllegalParserKeyException);
   //TODO: prove invalidity
   input.clear();
