Index: src/Actions/WorldAction/SetOutputFormatsAction.cpp
===================================================================
--- src/Actions/WorldAction/SetOutputFormatsAction.cpp	(revision 3ae731331613c6806f4a83a01d7417d215c6877a)
+++ src/Actions/WorldAction/SetOutputFormatsAction.cpp	(revision 5c6946cfd5f8773c487f84e0b4a983678eec8c83)
@@ -42,18 +42,6 @@
 
   for (vector<std::string>::iterator iter = params.FormatList.begin(); iter != params.FormatList.end(); ++iter) {
-    if (*iter == "mpqc") {
-      FormatParserStorage::getInstance().addMpqc();
-      DoLog(0) && (Log() << Verbose(0) << "Adding mpqc type to output." << endl);
-    } else if (*iter == "pcp") {
-      FormatParserStorage::getInstance().addPcp();
-      DoLog(0) && (Log() << Verbose(0) << "Adding pcp type to output." << endl);
-    } else if (*iter == "tremolo") {
-      FormatParserStorage::getInstance().addTremolo();
-      DoLog(0) && (Log() << Verbose(0) << "Adding tremolo type to output." << endl);
-    } else if (*iter == "xyz") {
-      FormatParserStorage::getInstance().addXyz();
-      DoLog(0) && (Log() << Verbose(0) << "Adding xyz type to output." << endl);
-    } else {
-      DoeLog(1) && (eLog() << Verbose(1) << "Unknown format:" << *iter << endl);
+    if (!FormatParserStorage::getInstance().add(*iter)) {
+      DoeLog(1) && (eLog() << Verbose(1) << "Unknown parser format in WorldSetOutputFormatsAction:" << *iter << endl);
     }
   }
Index: src/Parser/FormatParserStorage.cpp
===================================================================
--- src/Parser/FormatParserStorage.cpp	(revision 3ae731331613c6806f4a83a01d7417d215c6877a)
+++ src/Parser/FormatParserStorage.cpp	(revision 5c6946cfd5f8773c487f84e0b4a983678eec8c83)
@@ -56,8 +56,21 @@
   ParserSuffix.resize(ParserTypes_end, "");
 
+  ParserNames[mpqc] = "mpqc";
+  ParserNames[pcp] = "pcp";
+  ParserNames[tremolo] = "tremolo";
+  ParserNames[xyz] = "xyz";
+
+  for (std::map<ParserTypes, std::string>::const_iterator it = ParserNames.begin(); it != ParserNames.end(); ++it)
+    ParserLookupNames.insert(pair<std::string, ParserTypes>(it->second,it->first) );
+
   ParserSuffix[mpqc] = "in";
   ParserSuffix[pcp] = "conf";
   ParserSuffix[tremolo] = "data";
   ParserSuffix[xyz] = "xyz";
+
+  ParserAddFunction[mpqc] = &FormatParserStorage::addMpqc;
+  ParserAddFunction[pcp] = &FormatParserStorage::addPcp;
+  ParserAddFunction[tremolo] = &FormatParserStorage::addTremolo;
+  ParserAddFunction[xyz] = &FormatParserStorage::addXyz;
 }
 
@@ -112,4 +125,5 @@
 }
 
+
 /** Adds an PcpParser to the storage.
  */
@@ -146,4 +160,35 @@
     DoeLog(1) && (eLog() << Verbose(1) << "Parser xyz is already present." << endl);
 }
+
+ParserTypes FormatParserStorage::getType(std::string type)
+{
+  if (ParserLookupNames.find(type) == ParserLookupNames.end()) {
+    DoeLog(1) && (eLog() << Verbose(1) << "Unknown type " << type << "." << endl);
+    return ParserTypes_end;
+  } else
+    return ParserLookupNames[type];
+}
+
+bool FormatParserStorage::add(ParserTypes ptype)
+{
+  if (ptype != ParserTypes_end) {
+    if (ParserAddFunction.find(ptype) != ParserAddFunction.end()) {
+      DoLog(0) && (Log() << Verbose(0) << "Adding " << ParserNames[ptype] << " type to output." << endl);
+      (getInstance().*(ParserAddFunction[ptype]))(); // we still need an object to work on ...
+      return true;
+    } else {
+      DoeLog(1) && (eLog() << Verbose(1) << "No parser to add for this known type " << ParserNames[ptype] << ", not implemented?" << endl);
+      return false;
+    }
+  } else {
+    return false;
+  }
+}
+
+bool FormatParserStorage::add(std::string type)
+{
+  return add(getType(type));
+}
+
 
 /** Parses an istream depending on its suffix
@@ -163,5 +208,5 @@
     getXyz().load(&input);
   } else {
-    DoeLog(1) && (eLog() << Verbose(1) << "Unknown suffix to for FormatParserStorage::get()." << endl);
+    DoeLog(1) && (eLog() << Verbose(1) << "Unknown suffix " << suffix << " to for FormatParserStorage::get()." << endl);
     return false;
   }
Index: src/Parser/FormatParserStorage.hpp
===================================================================
--- src/Parser/FormatParserStorage.hpp	(revision 3ae731331613c6806f4a83a01d7417d215c6877a)
+++ src/Parser/FormatParserStorage.hpp	(revision 5c6946cfd5f8773c487f84e0b4a983678eec8c83)
@@ -17,4 +17,5 @@
 
 #include <string>
+#include <map>
 #include <vector>
 
@@ -35,9 +36,10 @@
 public:
 
-
   void addMpqc();
   void addPcp();
   void addTremolo();
   void addXyz();
+  bool add(std::string type);
+  bool add(ParserTypes type);
 
   bool get(std::istream &input, std::string suffix);
@@ -46,4 +48,6 @@
   TremoloParser &getTremolo();
   XyzParser &getXyz();
+
+  ParserTypes getType(std::string type);
 
   void SetOutputPrefixForAll(std::string &_prefix);
@@ -67,4 +71,12 @@
   std::vector<std::string> ParserSuffix;
 
+  // function pointers to each add...()
+  std::map< ParserTypes, void (FormatParserStorage::*)() > ParserAddFunction;
+
+  // type name of each parser type and reverse lookup
+  std::map<ParserTypes, std::string> ParserNames;
+  std::map<std::string, ParserTypes> ParserLookupNames;
+
+
   // prefix of the filenames to use on save
   std::string prefix;
