Index: src/Fragmentation/Fragmentation.cpp
===================================================================
--- src/Fragmentation/Fragmentation.cpp	(revision 09183883c4af7885de0d266ede8f220dc680b30a)
+++ src/Fragmentation/Fragmentation.cpp	(revision babcc1820497b0340a453fa9b4442f2e06d4da34)
@@ -39,4 +39,5 @@
 #include "MoleculeLeafClass.hpp"
 #include "MoleculeListClass.hpp"
+#include "Parser/ParserTypes.hpp"
 #include "World.hpp"
 
@@ -215,5 +216,7 @@
 
     DoLog(1) && (Log() << Verbose(1) << "Writing " << BondFragments->ListOfMolecules.size() << " possible bond fragmentation configs" << endl);
-    if (BondFragments->OutputConfigForListOfFragments(prefix, SortIndex))
+    if ((BondFragments->OutputConfigForListOfFragments(prefix, SortIndex, xyz))
+        && (BondFragments->OutputConfigForListOfFragments(prefix, SortIndex, mpqc))
+        && (BondFragments->OutputConfigForListOfFragments(prefix, SortIndex, pcp)))
       DoLog(1) && (Log() << Verbose(1) << "All configs written." << endl);
     else
Index: src/MoleculeListClass.hpp
===================================================================
--- src/MoleculeListClass.hpp	(revision 09183883c4af7885de0d266ede8f220dc680b30a)
+++ src/MoleculeListClass.hpp	(revision babcc1820497b0340a453fa9b4442f2e06d4da34)
@@ -20,4 +20,6 @@
 #include "CodePatterns/ObservedIterator.hpp"
 #include "CodePatterns/Cacheable.hpp"
+
+#include "Parser/ParserTypes.hpp"
 
 class molecule;
@@ -45,5 +47,5 @@
   void erase(molecule *mol);
   molecule * ReturnIndex(int index);
-  bool OutputConfigForListOfFragments(std::string &prefix, int *SortIndex);
+  bool OutputConfigForListOfFragments(std::string &prefix, int *SortIndex, ParserTypes type);
   int NumberOfActiveMolecules();
   void Enumerate(std::ostream *out);
Index: src/Parser/FormatParserStorage.cpp
===================================================================
--- src/Parser/FormatParserStorage.cpp	(revision 09183883c4af7885de0d266ede8f220dc680b30a)
+++ src/Parser/FormatParserStorage.cpp	(revision babcc1820497b0340a453fa9b4442f2e06d4da34)
@@ -41,4 +41,5 @@
 #include "CodePatterns/Singleton_impl.hpp"
 
+const std::string FormatParserStorage::unknownTypeString("unknown");
 
 /** Constructor of class FormatParserStorage.
@@ -195,4 +196,22 @@
   } else
     return ParserLookupSuffixes[type];
+}
+
+const std::string &FormatParserStorage::getNameFromType(ParserTypes type)
+{
+  if (ParserNames.find(type) == ParserNames.end()) {
+    DoeLog(1) && (eLog() << Verbose(1) << "Unknown type " << type << "." << endl);
+    return unknownTypeString;
+  } else
+    return ParserNames[type];
+}
+
+const std::string &FormatParserStorage::getSuffixFromType(ParserTypes type)
+{
+  if (ParserSuffixes.find(type) == ParserSuffixes.end()) {
+    DoeLog(1) && (eLog() << Verbose(1) << "Unknown type " << type << "." << endl);
+    return unknownTypeString;
+  } else
+    return ParserSuffixes[type];
 }
 
Index: src/Parser/FormatParserStorage.hpp
===================================================================
--- src/Parser/FormatParserStorage.hpp	(revision 09183883c4af7885de0d266ede8f220dc680b30a)
+++ src/Parser/FormatParserStorage.hpp	(revision babcc1820497b0340a453fa9b4442f2e06d4da34)
@@ -50,4 +50,7 @@
   ParserTypes getTypeFromSuffix(std::string type);
 
+  const std::string &getSuffixFromType(ParserTypes type);
+  const std::string &getNameFromType(ParserTypes type);
+
   void SetOutputPrefixForAll(std::string &_prefix);
   void SaveAll();
@@ -84,4 +87,6 @@
   std::string prefix;
 
+  static const std::string unknownTypeString;
+
 public:
   template<ParserTypes Ptype> void addParser()
Index: src/moleculelist.cpp
===================================================================
--- src/moleculelist.cpp	(revision 09183883c4af7885de0d266ede8f220dc680b30a)
+++ src/moleculelist.cpp	(revision babcc1820497b0340a453fa9b4442f2e06d4da34)
@@ -514,7 +514,8 @@
  * \param &prefix path and prefix to the fragment config files
  * \param *SortIndex Index to map from the BFS labeling to the sequence how of Ion_Type in the config
+ * \param type desired type to store
  * \return true - success (each file was written), false - something went wrong.
  */
-bool MoleculeListClass::OutputConfigForListOfFragments(std::string &prefix, int *SortIndex)
+bool MoleculeListClass::OutputConfigForListOfFragments(std::string &prefix, int *SortIndex, ParserTypes type)
 {
   ofstream outputFragment;
@@ -534,13 +535,4 @@
   // store the fragments as config and as xyz
   for (MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++) {
-    // save default path as it is changed for each fragment
-    path = World::getInstance().getConfig()->GetDefaultPath();
-    if (path != NULL)
-      strcpy(PathBackup, path);
-    else {
-      ELOG(0, "OutputConfigForListOfFragments: NULL default path obtained from config!");
-      performCriticalExit();
-    }
-
     // correct periodic
     if ((*ListRunner)->ScanForPeriodicCorrection()) {
@@ -559,80 +551,41 @@
 
     {
-      // output xyz file
+      // center on edge
+      (*ListRunner)->CenterEdge(&BoxDimension);
+      for (int k = 0; k < NDIM; k++)  // if one edge is to small, set at least to 1 angstroem
+        if (BoxDimension[k] < 1.)
+          BoxDimension[k] += 1.;
+      (*ListRunner)->SetBoxDimension(&BoxDimension); // update Box of atoms by boundary
+      for (int k = 0; k < NDIM; k++) {
+        BoxDimension[k] = 2.5 * (World::getInstance().getConfig()->GetIsAngstroem() ? 1. : 1. / AtomicLengthToAngstroem);
+        cell_size.at(k,k) = BoxDimension[k] * 2.;
+      }
+      World::getInstance().setDomain(cell_size);
+      (*ListRunner)->Translate(&BoxDimension);
+
+      // output file
+      std::vector<atom *> atoms;
+      for (molecule::const_iterator iter = (*ListRunner)->begin(); iter != (*ListRunner)->end(); ++iter) {
+        atoms.push_back(*iter);
+      }
       FragmentNumber = FixedDigitNumber(ListOfMolecules.size(), FragmentCounter++);
-      FragmentName = prefix + FragmentNumber + ".conf.xyz";
+      FragmentName = prefix + FragmentNumber + "." + FormatParserStorage::getInstance().getSuffixFromType(type);
       outputFragment.open(FragmentName.c_str(), ios::out);
       std::stringstream output;
       output << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as XYZ ... ";
-      if ((intermediateResult = (*ListRunner)->OutputXYZ(&outputFragment)))
+      if ((intermediateResult = FormatParserStorage::getInstance().save(
+          outputFragment,
+          FormatParserStorage::getInstance().getSuffixFromType(type),
+          atoms)))
         output << " done.";
       else
         output << " failed.";
       LOG(3, output.str());
+      delete[](FragmentNumber);
+
       result = result && intermediateResult;
       outputFragment.close();
       outputFragment.clear();
     }
-
-    // center on edge
-    (*ListRunner)->CenterEdge(&BoxDimension);
-    for (int k = 0; k < NDIM; k++)  // if one edge is to small, set at least to 1 angstroem
-      if (BoxDimension[k] < 1.)
-        BoxDimension[k] += 1.;
-    (*ListRunner)->SetBoxDimension(&BoxDimension); // update Box of atoms by boundary
-    for (int k = 0; k < NDIM; k++) {
-      BoxDimension[k] = 2.5 * (World::getInstance().getConfig()->GetIsAngstroem() ? 1. : 1. / AtomicLengthToAngstroem);
-      cell_size.at(k,k) = BoxDimension[k] * 2.;
-    }
-    World::getInstance().setDomain(cell_size);
-    (*ListRunner)->Translate(&BoxDimension);
-
-    // change path in config
-    FragmentName = PathBackup;
-    FragmentName += "/";
-    FragmentName += FRAGMENTPREFIX;
-    FragmentName += FragmentNumber;
-    FragmentName += "/";
-    World::getInstance().getConfig()->SetDefaultPath(FragmentName.c_str());
-
-    {
-      // and save as config
-      FragmentName = prefix + FragmentNumber + ".conf";
-      std::stringstream output;
-      output << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as config ... ";
-      if ((intermediateResult = World::getInstance().getConfig()->Save(FragmentName.c_str(), (*ListRunner)->elemente, (*ListRunner))))
-        output << " done.";
-      else
-        output << " failed.";
-      LOG(3, output.str());
-      result = result && intermediateResult;
-    }
-
-    // restore old config
-    World::getInstance().getConfig()->SetDefaultPath(PathBackup);
-
-    {
-      // and save as mpqc input file
-      stringstream output;
-      FragmentName = prefix + FragmentNumber + ".conf.in";
-      output << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as mpqc input ... ";
-      std::ofstream outfile(FragmentName.c_str());
-      std::vector<atom *> atoms;
-      for (molecule::const_iterator iter = (*ListRunner)->begin(); iter != (*ListRunner)->end(); ++iter)
-        atoms.push_back(*iter);
-//      atoms.resize((*ListRunner)->getAtomCount());
-//      std::copy((*ListRunner)->begin(), (*ListRunner)->end(), atoms.begin());
-      FormatParserStorage::getInstance().get(mpqc).save(&outfile, atoms);
-//      if ((intermediateResult = World::getInstance().getConfig()->SaveMPQC(FragmentName.c_str(), (*ListRunner))))
-        output << " done.";
-//      else
-//        output << " failed.";
-      LOG(3, output.str());
-    }
-
-    result = result && intermediateResult;
-    //outputFragment.close();
-    //outputFragment.clear();
-    delete[](FragmentNumber);
   }
   LOG(0, "STATUS: done.");
