Index: src/Actions/ParserAction/LoadXyzAction.cpp
===================================================================
--- src/Actions/ParserAction/LoadXyzAction.cpp	(revision bcd16af2f919ca538832e3da2a39a8dcb526001b)
+++ src/Actions/ParserAction/LoadXyzAction.cpp	(revision 0454de24d7826c743e8bf72803de5150dcaad02e)
@@ -21,5 +21,5 @@
 #include "UIElements/UIFactory.hpp"
 #include "UIElements/Dialog.hpp"
-#include "Actions/MapOfActions.hpp"
+#include "UIElements/ValueStorage.hpp"
 
 #include "atom.hpp"
@@ -52,51 +52,55 @@
 {}
 
+Dialog* ParserLoadXyzAction::createDialog() {
+  Dialog *dialog = UIFactory::getInstance().makeDialog();
+
+  dialog->queryString(NAME, ValueStorage::getInstance().getDescription(NAME));
+
+  return dialog;
+}
+
 Action::state_ptr ParserLoadXyzAction::performCall() {
   string filename;
-  Dialog *dialog = UIFactory::getInstance().makeDialog();
 
-  dialog->queryString(NAME,&filename, NAME);
+  ValueStorage::getInstance().queryCurrentValue(NAME, filename);
 
-  if(dialog->display()) {
-    DoLog(1) && (Log() << Verbose(1) << "Parsing xyz file for new atoms." << endl);
-    // parse xyz file
-    ifstream input;
-    input.open(filename.c_str());
-    if (!input.fail()) {
-      // TODO: Remove the insertion into molecule when saving does not depend on them anymore. Also, remove molecule.hpp include
-      set <atom*> UniqueList;
-      {
-        vector<atom *> ListBefore = World::getInstance().getAllAtoms();
-        for (vector<atom *>::iterator runner = ListBefore.begin();runner != ListBefore.end(); ++runner)
-          UniqueList.insert(*runner);
+  DoLog(1) && (Log() << Verbose(1) << "Parsing xyz file for new atoms." << endl);
+  // parse xyz file
+  ifstream input;
+  input.open(filename.c_str());
+  if (!input.fail()) {
+    // TODO: Remove the insertion into molecule when saving does not depend on them anymore. Also, remove molecule.hpp include
+    set <atom*> UniqueList;
+    {
+      vector<atom *> ListBefore = World::getInstance().getAllAtoms();
+      for (vector<atom *>::iterator runner = ListBefore.begin();runner != ListBefore.end(); ++runner)
+        UniqueList.insert(*runner);
+    }
+    XyzParser parser; // briefly instantiate a parser which is removed at end of focus
+    parser.load(&input);
+    {
+      vector<atom *> ListAfter = World::getInstance().getAllAtoms();
+      pair< set<atom *>::iterator, bool > Inserter;
+      if (UniqueList.size() != ListAfter.size()) { // only create if new atoms have been parsed
+        MoleculeListClass *molecules = World::getInstance().getMolecules();
+        molecule *mol = World::getInstance().createMolecule();
+        molecules->insert(mol);
+        for (vector<atom *>::iterator runner = ListAfter.begin(); runner != ListAfter.end(); ++runner) {
+          Inserter = UniqueList.insert(*runner);
+          if (Inserter.second) { // if not present, then new (just parsed) atom, add ...
+            cout << "Adding new atom " << **runner << " to new mol." << endl;
+            mol->AddAtom(*runner);
+          }
+        }
+        mol->doCountAtoms();
+      } else {
+        cout << "No atoms parsed?" << endl;
       }
-      XyzParser parser; // briefly instantiate a parser which is removed at end of focus
-      parser.load(&input);
-      {
-        vector<atom *> ListAfter = World::getInstance().getAllAtoms();
-        pair< set<atom *>::iterator, bool > Inserter;
-        if (UniqueList.size() != ListAfter.size()) { // only create if new atoms have been parsed
-          MoleculeListClass *molecules = World::getInstance().getMolecules();
-          molecule *mol = World::getInstance().createMolecule();
-          molecules->insert(mol);
-          for (vector<atom *>::iterator runner = ListAfter.begin(); runner != ListAfter.end(); ++runner) {
-            Inserter = UniqueList.insert(*runner);
-            if (Inserter.second) { // if not present, then new (just parsed) atom, add ...
-              cout << "Adding new atom " << **runner << " to new mol." << endl;
-              mol->AddAtom(*runner);
-            }
-          }
-          mol->doCountAtoms();
-        } else {
-          cout << "No atoms parsed?" << endl;
-        }
-      }
-    } else {
-      DoeLog(1) && (eLog() << Verbose(1) << "Could not open file " << filename << "." << endl);
     }
-    input.close();
+  } else {
+    DoeLog(1) && (eLog() << Verbose(1) << "Could not open file " << filename << "." << endl);
   }
-  delete dialog;
-  return Action::failure;
+  input.close();
+  return Action::success;
 }
 
Index: src/Actions/ParserAction/LoadXyzAction.hpp
===================================================================
--- src/Actions/ParserAction/LoadXyzAction.hpp	(revision bcd16af2f919ca538832e3da2a39a8dcb526001b)
+++ src/Actions/ParserAction/LoadXyzAction.hpp	(revision 0454de24d7826c743e8bf72803de5150dcaad02e)
@@ -22,4 +22,5 @@
   virtual const std::string getName();
 private:
+  virtual Dialog * createDialog();
   virtual Action::state_ptr performCall();
   virtual Action::state_ptr performUndo(Action::state_ptr);
