Index: src/Actions/Action.cpp
===================================================================
--- src/Actions/Action.cpp	(revision 655c98e8813e3c220ff0aee30f2ab51b12bbf935)
+++ src/Actions/Action.cpp	(revision 4e145c4e099c7b64eef25a68a2f37a14cb86cec0)
@@ -13,5 +13,10 @@
 #include "Actions/ActionRegistry.hpp"
 #include "Actions/ActionHistory.hpp"
+#include "Exceptions/MissingValueException.hpp"
+#include "UIElements/Dialog.hpp"
 #include "Helpers/MemDebug.hpp"
+
+#include "log.hpp"
+#include "verbose.hpp"
 
 using namespace std;
@@ -40,10 +45,23 @@
 }
 
-void Action::call(){
+void Action::call(enum QueryOptions flag){
   if(!isActive()){
     return;
   }
   // forward to private virtual
-  state_ptr state = performCall();
+  if (flag == Interactive) {
+    Dialog* dialog = createDialog();
+    if (dialog != NULL) {
+      dialog->display();
+      delete(dialog);
+    }
+  }
+  state_ptr state = Action::failure;
+  try {
+    state = performCall();
+  } catch(MissingValueException&) {
+    DoeLog(1) && (eLog() << Verbose(1) << "There is a value missing for action " << getName() << endl);
+  };
+
   if(shouldUndo() && state != failure){
     if(canUndo()){
Index: src/Actions/Action.hpp
===================================================================
--- src/Actions/Action.hpp	(revision 655c98e8813e3c220ff0aee30f2ab51b12bbf935)
+++ src/Actions/Action.hpp	(revision 4e145c4e099c7b64eef25a68a2f37a14cb86cec0)
@@ -257,4 +257,6 @@
 public:
 
+  enum QueryOptions {Interactive, NonInteractive};
+
   /**
    * This type is used to store pointers to ActionStates while allowing multiple ownership
@@ -279,6 +281,11 @@
    * If the call needs to undone you have to use the History, to avoid destroying
    * invariants used by the History.
-   */
-  void call();
+   *
+   * Note that this call can be Interactive (i.e. a dialog will ask the user for
+   * necessary information) and NonInteractive (i.e. the information will have to
+   * be present already within the ValueStorage class or else a MissingArgumentException
+   * is thrown)
+   */
+  void call(enum QueryOptions state = NonInteractive);
 
   /**
Index: src/Actions/ActionSequence.cpp
===================================================================
--- src/Actions/ActionSequence.cpp	(revision 655c98e8813e3c220ff0aee30f2ab51b12bbf935)
+++ src/Actions/ActionSequence.cpp	(revision 4e145c4e099c7b64eef25a68a2f37a14cb86cec0)
@@ -45,5 +45,9 @@
     // we want to have a global bookkeeping for all actions in the sequence, so
     // we bypass the normal call
-    (*it)->createDialog()->display();
+    Dialog * dialog = (*it)->createDialog();
+    if (dialog != NULL) {
+      dialog->display();
+      delete(dialog);
+    }
   }
 }
Index: src/Actions/MapOfActions.cpp
===================================================================
--- src/Actions/MapOfActions.cpp	(revision 655c98e8813e3c220ff0aee30f2ab51b12bbf935)
+++ src/Actions/MapOfActions.cpp	(revision 4e145c4e099c7b64eef25a68a2f37a14cb86cec0)
@@ -13,6 +13,6 @@
 #include "Descriptors/AtomIdDescriptor.hpp"
 #include "Descriptors/MoleculeIdDescriptor.hpp"
+#include "Helpers/Assert.hpp"
 #include "Patterns/Singleton_impl.hpp"
-#include "Helpers/Assert.hpp"
 
 #include <boost/lexical_cast.hpp>
@@ -508,7 +508,10 @@
 {
   int atomID = -1;
-  if (typeid( atom ) == *TypeMap[name])
+  if (typeid( atom ) == *TypeMap[name]) {
+    if (CurrentValue.find(name) == CurrentValue.end())
+      throw MissingValueException(__FILE__, __LINE__);
     atomID = lexical_cast<int>(CurrentValue[name].c_str());
-  else
+    CurrentValue.erase(name);
+  } else
     throw IllegalTypeException(__FILE__,__LINE__);
   _T = World::getInstance().getAtom(AtomById(atomID));
@@ -517,7 +520,10 @@
 void MapOfActions::queryCurrentValue(const char * name, class element * &_T)  {
   int Z = -1;
-  if (typeid( element ) == *TypeMap[name])
+  if (typeid( element ) == *TypeMap[name]) {
+    if (CurrentValue.find(name) == CurrentValue.end())
+      throw MissingValueException(__FILE__, __LINE__);
     Z = lexical_cast<int>(CurrentValue[name].c_str());
-  else
+    CurrentValue.erase(name);
+  } else
     throw IllegalTypeException(__FILE__,__LINE__);
   _T = World::getInstance().getPeriode()->FindElement(Z);
@@ -526,7 +532,10 @@
 void MapOfActions::queryCurrentValue(const char * name, class molecule * &_T) {
   int molID = -1;
-  if (typeid( molecule ) == *TypeMap[name])
+  if (typeid( molecule ) == *TypeMap[name]) {
+    if (CurrentValue.find(name) == CurrentValue.end())
+      throw MissingValueException(__FILE__, __LINE__);
     molID = lexical_cast<int>(CurrentValue[name].c_str());
-  else
+    CurrentValue.erase(name);
+  } else
     throw IllegalTypeException(__FILE__,__LINE__);
   _T = World::getInstance().getMolecule(MoleculeById(molID));
@@ -537,5 +546,8 @@
   double tmp;
   if (typeid( BoxValue ) == *TypeMap[name]) {
+    if (CurrentValue.find(name) == CurrentValue.end())
+      throw MissingValueException(__FILE__, __LINE__);
     std::istringstream stream(CurrentValue[name]);
+    CurrentValue.erase(name);
     stream >> tmp;
     M.set(0,0,tmp);
@@ -560,4 +572,5 @@
   if (typeid( VectorValue ) == *TypeMap[name]) {
     std::istringstream stream(CurrentValue[name]);
+    CurrentValue.erase(name);
     stream >> _T[0];
     stream >> _T[1];
@@ -572,5 +585,8 @@
   element *elemental = NULL;
   if (typeid( std::vector<element *> ) == *TypeMap[name]) {
+    if (CurrentValue.find(name) == CurrentValue.end())
+      throw MissingValueException(__FILE__, __LINE__);
     std::istringstream stream(CurrentValue[name]);
+    CurrentValue.erase(name);
     while (!stream.fail()) {
       stream >> Z;
@@ -587,5 +603,8 @@
   std::string temp;
   if (typeid( std::vector<std::string> ) == *TypeMap[name]) {
+    if (CurrentValue.find(name) == CurrentValue.end())
+      throw MissingValueException(__FILE__, __LINE__);
     std::istringstream stream(CurrentValue[name]);
+    CurrentValue.erase(name);
     while (!stream.fail()) {
       stream >> temp >> ws;
Index: src/Actions/MapOfActions.hpp
===================================================================
--- src/Actions/MapOfActions.hpp	(revision 655c98e8813e3c220ff0aee30f2ab51b12bbf935)
+++ src/Actions/MapOfActions.hpp	(revision 4e145c4e099c7b64eef25a68a2f37a14cb86cec0)
@@ -9,5 +9,4 @@
 #define MAPOFACTIONS_HPP_
 
-#include "Helpers/Assert.hpp"
 #include <boost/program_options.hpp>
 
@@ -17,8 +16,10 @@
 #include <typeinfo>
 
+#include "Exceptions/IllegalTypeException.hpp"
+#include "Exceptions/MissingValueException.hpp"
+#include "Helpers/Assert.hpp"
+#include "Patterns/Singleton.hpp"
+
 class MapOfActionsTest;
-
-#include "Exceptions/IllegalTypeException.hpp"
-#include "Patterns/Singleton.hpp"
 
 class Box;
@@ -170,7 +171,10 @@
   template<typename T> void queryCurrentValue(const char * name, T &_T)
   {
-    if (typeid( T ) == *TypeMap[name])  // constructor of type_info is private, hence can only store by ref or ptr
+    if (typeid( T ) == *TypeMap[name]) { // constructor of type_info is private, hence can only store by ref or ptr
+      if (CurrentValue.find(name) == CurrentValue.end())
+        throw MissingValueException(__FILE__, __LINE__);
       _T = lexical_cast<T>(CurrentValue[name].c_str());
-    else
+      CurrentValue.erase(name);
+    } else
       throw IllegalTypeException(__FILE__,__LINE__);
   }
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision 655c98e8813e3c220ff0aee30f2ab51b12bbf935)
+++ src/Makefile.am	(revision 4e145c4e099c7b64eef25a68a2f37a14cb86cec0)
@@ -78,18 +78,20 @@
 
 EXCEPTIONSOURCE = Exceptions/CustomException.cpp \
-				  Exceptions/IllegalTypeException.cpp \
-				  Exceptions/LinearDependenceException.cpp \
-				  Exceptions/MathException.cpp \
-				  Exceptions/NotInvertibleException.cpp \
-				  Exceptions/SkewException.cpp \
-				  Exceptions/ZeroVectorException.cpp
+	Exceptions/IllegalTypeException.cpp \
+	Exceptions/LinearDependenceException.cpp \
+	Exceptions/MathException.cpp \
+	Exceptions/MissingValueException.cpp \
+	Exceptions/NotInvertibleException.cpp \
+	Exceptions/SkewException.cpp \
+	Exceptions/ZeroVectorException.cpp
 				  
 EXCEPTIONHEADER = Exceptions/CustomException.hpp \
-				  Exceptions/IllegalTypeException.hpp \
-				  Exceptions/LinearDependenceException.hpp \
-				  Exceptions/MathException.hpp \
-				  Exceptions/NotInvertibleException.hpp \
-				  Exceptions/SkewException.hpp \
-				  Exceptions/ZeroVectorException.hpp
+	Exceptions/IllegalTypeException.hpp \
+	Exceptions/LinearDependenceException.hpp \
+	Exceptions/MathException.hpp \
+	Exceptions/MissingValueException.hpp \
+	Exceptions/NotInvertibleException.hpp \
+	Exceptions/SkewException.hpp \
+	Exceptions/ZeroVectorException.hpp
 
 PARSERSOURCE = \
@@ -129,18 +131,18 @@
 
 QTUIMOC_HEADER = UIElements/QT4/QTDialog.hpp \
-				 UIElements/QT4/QTMainWindow.hpp \
-				 UIElements/Menu/QT4/QTMenu.hpp \
-				 UIElements/Views/QT4/QTWorldView.hpp \
-				 UIElements/Views/QT4/GLMoleculeView.hpp \
-				 UIElements/Views/QT4/QTMoleculeView.hpp \
-				 UIElements/Views/QT4/QTStatusBar.hpp
+	UIElements/QT4/QTMainWindow.hpp \
+	UIElements/Menu/QT4/QTMenu.hpp \
+	UIElements/Views/QT4/QTWorldView.hpp \
+	UIElements/Views/QT4/GLMoleculeView.hpp \
+	UIElements/Views/QT4/QTMoleculeView.hpp \
+	UIElements/Views/QT4/QTStatusBar.hpp
  
 QTUIMOC_TARGETS = QTMainWindow.moc.cpp \
-	              QTMenu.moc.cpp\
-	              QTDialog.moc.cpp \
-	              QTWorldView.moc.cpp \
-	              GLMoleculeView.moc.cpp \
-	              QTMoleculeView.moc.cpp \
-	              QTStatusBar.moc.cpp
+	QTMenu.moc.cpp\
+	QTDialog.moc.cpp \
+	QTWorldView.moc.cpp \
+	GLMoleculeView.moc.cpp \
+	QTMoleculeView.moc.cpp \
+	QTStatusBar.moc.cpp
 
 DESCRIPTORSOURCE = Descriptors/AtomDescriptor.cpp \
@@ -166,12 +168,12 @@
 				  
 QTUISOURCE = ${QTUIMOC_TARGETS} \
-			 UIElements/QT4/QTMainWindow.cpp \
-			 UIElements/QT4/QTDialog.cpp \
-			 UIElements/QT4/QTUIFactory.cpp \
-			 UIElements/Menu/QT4/QTMenu.cpp \
-			 UIElements/Views/QT4/QTWorldView.cpp \
-			 UIElements/Views/QT4/GLMoleculeView.cpp \
-			 UIElements/Views/QT4/QTMoleculeView.cpp \
-			 UIElements/Views/QT4/QTStatusBar.cpp
+	UIElements/QT4/QTMainWindow.cpp \
+	UIElements/QT4/QTDialog.cpp \
+	UIElements/QT4/QTUIFactory.cpp \
+	UIElements/Menu/QT4/QTMenu.cpp \
+	UIElements/Views/QT4/QTWorldView.cpp \
+	UIElements/Views/QT4/GLMoleculeView.cpp \
+	UIElements/Views/QT4/QTMoleculeView.cpp \
+	UIElements/Views/QT4/QTStatusBar.cpp
              
 QTUIHEADER = ${QTUIMOC_HEADER} UIElements/QT4/QTUIFactory.hpp
