Index: src/Actions/ParserAction/SetOutputFormatsAction.cpp
===================================================================
--- src/Actions/ParserAction/SetOutputFormatsAction.cpp	(revision 851be8001d3ee00fa3ac2cfd8ae65a67a8bced04)
+++ src/Actions/ParserAction/SetOutputFormatsAction.cpp	(revision 09183883c4af7885de0d266ede8f220dc680b30a)
@@ -45,4 +45,6 @@
     if (!FormatParserStorage::getInstance().add(*iter)) {
       DoeLog(1) && (eLog() << Verbose(1) << "Unknown parser format in ParserSetOutputFormatsAction: '" << *iter << "'" << endl);
+    } else {
+      FormatParserStorage::getInstance().setOutputFormat(*iter);
     }
   }
Index: src/Actions/WorldAction/InputAction.cpp
===================================================================
--- src/Actions/WorldAction/InputAction.cpp	(revision 851be8001d3ee00fa3ac2cfd8ae65a67a8bced04)
+++ src/Actions/WorldAction/InputAction.cpp	(revision 09183883c4af7885de0d266ede8f220dc680b30a)
@@ -44,4 +44,5 @@
 //  molecule *mol = NULL;
   boost::filesystem::ifstream test;
+  FormatParserStorage &parsers = FormatParserStorage::getInstance();
 
   // obtain information
@@ -62,5 +63,5 @@
 #endif
     DoLog(1) && (Log() << Verbose(1) << "Setting config file name prefix to " << FilenamePrefix << "." << endl);
-    FormatParserStorage::getInstance().SetOutputPrefixForAll(FilenamePrefix);
+    parsers.SetOutputPrefixForAll(FilenamePrefix);
   } else {
     DoeLog(1) && (eLog() << Verbose(1) << "Input file does not have a suffix, cannot recognize format." << endl);
@@ -72,4 +73,6 @@
     DoLog(1) && (Log() << Verbose(1) << "Specified config file " << params.filename << " not found." << endl);
     // DONT FAIL: it's just empty and we use the name. // return Action::failure;
+    // nonetheless, add to output formats
+    parsers.setOutputFormat( parsers.getTypeFromSuffix(FilenameSuffix) );
   } else {
     DoLog(1) && (Log() << Verbose(1) << "Specified config file found, parsing ... ");
@@ -77,5 +80,6 @@
     // parse the file
     test.open(params.filename);
-    FormatParserStorage::getInstance().load(test, FilenameSuffix);
+    parsers.load(test, FilenameSuffix);
+    parsers.setOutputFormat( parsers.getTypeFromSuffix(FilenameSuffix) );
     test.close();
 
Index: src/Parser/FormatParserStorage.cpp
===================================================================
--- src/Parser/FormatParserStorage.cpp	(revision 851be8001d3ee00fa3ac2cfd8ae65a67a8bced04)
+++ src/Parser/FormatParserStorage.cpp	(revision 09183883c4af7885de0d266ede8f220dc680b30a)
@@ -49,4 +49,5 @@
   ParserStream.resize(ParserTypes_end, NULL);
   ParserPresent.resize(ParserTypes_end, false);
+  ParserDesiredOutputFormat.resize(ParserTypes_end, false);
 
 #include "ParserTypes.def"
@@ -122,7 +123,9 @@
   for (ParserTypes iter = ParserTypes_begin; iter < ParserTypes_end; ++iter)
     if (ParserPresent[iter]) {
-      if (ParserStream[iter]->is_open())
-        ParserStream[iter]->close();
-      delete ParserStream[iter];
+      if (ParserStream[iter] != NULL) {
+        if (ParserStream[iter]->is_open())
+          ParserStream[iter]->close();
+        delete ParserStream[iter];
+      }
       delete ParserList[iter];
     }
@@ -137,10 +140,34 @@
 };
 
-
+/** Sets \a type as a format to be stored on call of SaveAll.
+ *
+ * @param type type to add to desired output formats
+ */
+void FormatParserStorage::setOutputFormat(ParserTypes type)
+{
+  LOG(0, "STATUS: Adding " << ParserNames[type] << " type to output.");
+  ParserDesiredOutputFormat[type] = true;
+}
+
+/** Sets \a type as a format to be stored on call of SaveAll.
+ *
+ * @param type type to add to desired output formats
+ */
+void FormatParserStorage::setOutputFormat(std::string type)
+{
+  std::map<std::string, ParserTypes>::const_iterator iter = ParserLookupNames.find(type);
+  ASSERT(iter != ParserLookupNames.end(),
+      "FormatParserStorage::setOutputFormat() - output format "+type+" is unknown.");
+  setOutputFormat(iter->second);
+}
+
+/** Saves the world in the desired output formats.
+ *
+ */
 void FormatParserStorage::SaveAll()
 {
   std::string filename;
   for (ParserTypes iter = ParserTypes_begin; iter < ParserTypes_end; ++iter)
-    if (ParserPresent[iter]) {
+    if (ParserPresent[iter] && ParserDesiredOutputFormat[iter]) {
       filename = prefix;
       filename += ".";
@@ -174,5 +201,4 @@
   if (ptype != ParserTypes_end) {
     if (ParserAddFunction.find(ptype) != ParserAddFunction.end()) {
-      LOG(0, "STATUS: Adding " << ParserNames[ptype] << " type to output.");
       (getInstance().*(ParserAddFunction[ptype]))(); // we still need an object to work on ...
       return true;
Index: src/Parser/FormatParserStorage.hpp
===================================================================
--- src/Parser/FormatParserStorage.hpp	(revision 851be8001d3ee00fa3ac2cfd8ae65a67a8bced04)
+++ src/Parser/FormatParserStorage.hpp	(revision 09183883c4af7885de0d266ede8f220dc680b30a)
@@ -41,4 +41,7 @@
   bool saveSelectedMolecules(std::ostream &output, std::string suffix);
   bool saveWorld(std::ostream &output, std::string suffix);
+
+  void setOutputFormat(ParserTypes type);
+  void setOutputFormat(std::string type);
   
   FormatParserInterface &get(ParserTypes _type);
@@ -63,4 +66,7 @@
   // which parser is already present
   std::vector<bool> ParserPresent;
+
+  // which parser is already present
+  std::vector<bool> ParserDesiredOutputFormat;
 
   // default suffix of each parser type
Index: src/Parser/FormatParser_common.cpp
===================================================================
--- src/Parser/FormatParser_common.cpp	(revision 851be8001d3ee00fa3ac2cfd8ae65a67a8bced04)
+++ src/Parser/FormatParser_common.cpp	(revision 09183883c4af7885de0d266ede8f220dc680b30a)
@@ -33,5 +33,6 @@
  */
 FormatParser_common::FormatParser_common(FormatParser_Parameters *_parameters) :
-  Observer("FormatParser_common")
+  Observer("FormatParser_common"),
+  saveStream(NULL)
 {
   parameters = _parameters;
@@ -58,11 +59,8 @@
  */
 void FormatParser_common::update(Observable *publisher) {
-  if (!saveStream) {
-    cerr << "Please invoke setOstream() so the parser knows where to save the World's data." << endl;
-    return;
+  if (saveStream != NULL) { // only store when a saveStream is given
+    std::vector<atom *> atoms = World::getInstance().getAllAtoms();
+    save(saveStream, atoms);
   }
-
-  std::vector<atom *> atoms = World::getInstance().getAllAtoms();
-  save(saveStream, atoms);
 }
 
