Index: src/Actions/MapOfActions.cpp
===================================================================
--- src/Actions/MapOfActions.cpp	(revision 6f5dfe559a8279d64fa1e293a546f8d74ece2ef3)
+++ src/Actions/MapOfActions.cpp	(revision bd239098c2f3804d7b8294ca80990baa48c79c2e)
@@ -191,4 +191,20 @@
   BV.zz = boost::lexical_cast<double>(components.at(5));
   v = boost::any(BoxValue(BV));
+}
+
+void validate(boost::any& v, const std::vector<std::string>& values, boost::filesystem::path *, int)
+{
+  boost::filesystem::path filename;
+  std::vector<std::string> components;
+
+  std::cout << "boost::filesystem::path validator used." << std::endl;
+
+  // split comma-separated values
+  if (values.size() != 1) {
+    cerr <<  "Not one file but " << components.size() << " given " << endl;
+    throw boost::program_options::validation_error("Unequal to one file given");
+  }
+  filename = values.at(0);
+  v = boost::any(boost::filesystem::path(filename));
 }
 
@@ -447,4 +463,5 @@
   TypeEnumMap[&typeid(bool)] = Boolean;
   TypeEnumMap[&typeid(int)] = Integer;
+  TypeEnumMap[&typeid(boost::filesystem::path)] = File;
   TypeEnumMap[&typeid(std::vector<int>)] = ListOfIntegers;
   TypeEnumMap[&typeid(double)] = Double;
@@ -1078,4 +1095,11 @@
               ;
             break;
+          case File:
+            ListRunner->second->add_options()
+              (getKeyAndShortForm(*OptionRunner).c_str(),
+                  po::value< boost::filesystem::path >(),
+                  getDescription(*OptionRunner).c_str())
+              ;
+            break;
           case Integer:
             ListRunner->second->add_options()
Index: src/Actions/MapOfActions.hpp
===================================================================
--- src/Actions/MapOfActions.hpp	(revision 6f5dfe559a8279d64fa1e293a546f8d74ece2ef3)
+++ src/Actions/MapOfActions.hpp	(revision bd239098c2f3804d7b8294ca80990baa48c79c2e)
@@ -138,5 +138,5 @@
   friend class MapOfActionsTest;
 public:
-  enum OptionTypes { None, Boolean, Integer, ListOfIntegers, Double, ListOfDoubles, String, ListOfStrings, Vector, ListOfVectors, Box, Molecule, ListOfMolecules, Atom, ListOfAtoms, Element, ListOfElements };
+  enum OptionTypes { None, Boolean, Integer, File, ListOfIntegers, Double, ListOfDoubles, String, ListOfStrings, Vector, ListOfVectors, Box, Molecule, ListOfMolecules, Atom, ListOfAtoms, Element, ListOfElements };
 
   // getter for the action descriptions and short forms
Index: src/Actions/WorldAction/InputAction.cpp
===================================================================
--- src/Actions/WorldAction/InputAction.cpp	(revision 6f5dfe559a8279d64fa1e293a546f8d74ece2ef3)
+++ src/Actions/WorldAction/InputAction.cpp	(revision bd239098c2f3804d7b8294ca80990baa48c79c2e)
@@ -49,41 +49,36 @@
 
   DoLog(0) && (Log() << Verbose(0) << "Config file given " << params.filename << "." << endl);
+  // using the filename as prefix for all parsers
+  std::string FilenameSuffix;
+  std::string FilenamePrefix;
+  if (params.filename.has_filename()) {
+    // get suffix
+    FilenameSuffix = params.filename.extension().substr(1); // remove the prefixed "."
+    FilenamePrefix = params.filename.stem();
+    DoLog(1) && (Log() << Verbose(1) << "Setting config file name prefix to " << FilenamePrefix << "." << endl);
+    FormatParserStorage::getInstance().SetOutputPrefixForAll(FilenamePrefix);
+  } else {
+    DoeLog(1) && (eLog() << Verbose(1) << "Input file does not have a suffix, cannot recognize format." << endl);
+    return Action::failure;
+  }
+
+  // parsing file if present
   if (!boost::filesystem::exists(params.filename)) {
     DoLog(1) && (Log() << Verbose(1) << "Specified config file " << params.filename << " not found." << endl);
-    return Action::failure;
+    // DONT FAIL: it's just empty and we use the name. // return Action::failure;
   } else {
     DoLog(1) && (Log() << Verbose(1) << "Specified config file found, parsing ... ");
-    if (params.filename.has_filename()) {
-      // get suffix
-      std::string FilenameSuffix = params.filename.extension();
-      std::string FilenamePrefix = params.filename.stem();
-      DoLog(1) && (Log() << Verbose(1) << "Setting config file name prefix to " << FilenamePrefix << "." << endl);
-      FormatParserStorage::getInstance().SetOutputPrefixForAll(FilenamePrefix);
 
-      // parse the file
-      test.open(params.filename);
-      FormatParserStorage::getInstance().get(test, FilenameSuffix);
-      test.close();
-//
-//      // set mol to first active molecule
-//      if (molecules->ListOfMolecules.size() != 0) {
-//        for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
-//          if ((*ListRunner)->ActiveFlag) {
-//            mol = *ListRunner;
-//            break;
-//          }
-//      }
-//      if (mol == NULL) {
-//        mol = World::getInstance().createMolecule();
-//        mol->ActiveFlag = true;
-//        molecules->insert(mol);
-//      }
-//      mol->SetNameFromFilename(params.filename.substr(0,params.filename.find('.')).c_str());
-      return Action::success;
-    } else {
-      DoeLog(1) && (eLog() << Verbose(1) << "Input file does not have a suffix, cannot recognize format." << endl);
-      return Action::failure;
-    }
+    // parse the file
+    test.open(params.filename);
+    FormatParserStorage::getInstance().get(test, FilenameSuffix);
+    test.close();
+
+    // set file name of last molecule
+    MoleculeList::const_iterator iter = World::getInstance().getMolecules()->ListOfMolecules.end();
+    iter--;
+    (*iter)->SetNameFromFilename(FilenamePrefix.c_str());
   }
+  return Action::success;
 }
 
Index: src/Parser/MpqcParser.cpp
===================================================================
--- src/Parser/MpqcParser.cpp	(revision 6f5dfe559a8279d64fa1e293a546f8d74ece2ef3)
+++ src/Parser/MpqcParser.cpp	(revision bd239098c2f3804d7b8294ca80990baa48c79c2e)
@@ -49,5 +49,6 @@
 void MpqcParser::load(istream *file)
 {
-  DoeLog(0) && (Log() << Verbose(0) << "Not yet implemented" << endl) ;
+  // TODO: MpqcParser::load implementation
+  ASSERT(false, "Not implemented yet");
 }
 
Index: src/Parser/PcpParser.cpp
===================================================================
--- src/Parser/PcpParser.cpp	(revision 6f5dfe559a8279d64fa1e293a546f8d74ece2ef3)
+++ src/Parser/PcpParser.cpp	(revision bd239098c2f3804d7b8294ca80990baa48c79c2e)
@@ -355,10 +355,8 @@
   // 3. parse the molecule in
   molecule *mol = World::getInstance().createMolecule();
-  MoleculeListClass *molecules = World::getInstance().getMolecules();
-  molecules->insert(mol);
+  mol->ActiveFlag = true;
+  // TODO: Remove the insertion into molecule when saving does not depend on them anymore. Also, remove molecule.hpp include
+  World::getInstance().getMolecules()->insert(mol);
   LoadMolecule(mol, FileBuffer, World::getInstance().getPeriode(), FastParsing);
-  //mol->SetNameFromFilename(filename);
-  mol->ActiveFlag = true;
-  //MolList->insert(mol);
 
   // 4. dissect the molecule into connected subgraphs
Index: src/Parser/PdbParser.cpp
===================================================================
--- src/Parser/PdbParser.cpp	(revision 6f5dfe559a8279d64fa1e293a546f8d74ece2ef3)
+++ src/Parser/PdbParser.cpp	(revision bd239098c2f3804d7b8294ca80990baa48c79c2e)
@@ -74,4 +74,6 @@
  */
 void PdbParser::load(istream* file) {
+  // TODO: PdbParser::load implementation
+  ASSERT(false, "Not implemented yet");
 //  string line;
 //  string::size_type location;
@@ -132,6 +134,6 @@
       elementNo[Z] = (elementNo[Z]+1) % 100;   // confine to two digits
       const molecule *mol = (*atomIt)->getMolecule();
-      if (mol == NULL) {  // for homeless atoms, MolNo = 0 is reserved
-        MolNo = 0;
+      if (mol == NULL) {  // for homeless atoms, MolNo = -1 is reserved
+        MolNo = -1;
       } else {
         MolNo = mol->getId();
Index: src/Parser/TremoloParser.cpp
===================================================================
--- src/Parser/TremoloParser.cpp	(revision 6f5dfe559a8279d64fa1e293a546f8d74ece2ef3)
+++ src/Parser/TremoloParser.cpp	(revision bd239098c2f3804d7b8294ca80990baa48c79c2e)
@@ -92,4 +92,7 @@
   usedFields.clear();
   molecule *newmol = World::getInstance().createMolecule();
+  newmol->ActiveFlag = true;
+  // TODO: Remove the insertion into molecule when saving does not depend on them anymore. Also, remove molecule.hpp include
+  World::getInstance().getMolecules()->insert(newmol);
   while (file->good()) {
     std::getline(*file, line, '\n');
Index: src/UIElements/CommandLineUI/CommandLineDialog.cpp
===================================================================
--- src/UIElements/CommandLineUI/CommandLineDialog.cpp	(revision 6f5dfe559a8279d64fa1e293a546f8d74ece2ef3)
+++ src/UIElements/CommandLineUI/CommandLineDialog.cpp	(revision bd239098c2f3804d7b8294ca80990baa48c79c2e)
@@ -470,5 +470,5 @@
 bool CommandLineDialog::FileCommandLineQuery::handle() {
   if (CommandLineParser::getInstance().vm.count(getTitle())) {
-    tmp = CommandLineParser::getInstance().vm[getTitle()].as<string>();
+    tmp = CommandLineParser::getInstance().vm[getTitle()].as< boost::filesystem::path >();
     return true;
   } else {
