Index: src/Actions/Action.cpp
===================================================================
--- src/Actions/Action.cpp	(revision 004ae78c93125b8c5ed36354e6ccaf507e1cc290)
+++ src/Actions/Action.cpp	(revision 862b6aced84cfd7115cc1c86598d01d98e597c01)
@@ -159,5 +159,7 @@
   state_ptr state = Action::failure;
 //  try {
+    startTimer();
     state = performCall();
+    endTimer();
 //  } catch(MissingValueException&) {
 //    DoeLog(0) && (eLog() << Verbose(0) << "There is a value missing for action " << getName() << endl);
Index: src/Actions/Action.hpp
===================================================================
--- src/Actions/Action.hpp	(revision 004ae78c93125b8c5ed36354e6ccaf507e1cc290)
+++ src/Actions/Action.hpp	(revision 862b6aced84cfd7115cc1c86598d01d98e597c01)
@@ -173,4 +173,14 @@
   Dialog * createDialog();
 
+  /** Virtual function that starts the timer.
+   *
+   */
+  virtual void startTimer() const {};
+
+  /** Virtual function that ends the timer.
+   *
+   */
+  virtual void endTimer() const {};
+
 private:
 
Index: src/Actions/Action_impl_header.hpp
===================================================================
--- src/Actions/Action_impl_header.hpp	(revision 004ae78c93125b8c5ed36354e6ccaf507e1cc290)
+++ src/Actions/Action_impl_header.hpp	(revision 862b6aced84cfd7115cc1c86598d01d98e597c01)
@@ -215,4 +215,8 @@
 protected:
   virtual Dialog * fillDialog(Dialog*);
+
+  void startTimer() const;
+  void endTimer() const;
+
 private:
   virtual void getParametersfromValueStorage();
Index: src/Actions/Action_impl_pre.hpp
===================================================================
--- src/Actions/Action_impl_pre.hpp	(revision 004ae78c93125b8c5ed36354e6ccaf507e1cc290)
+++ src/Actions/Action_impl_pre.hpp	(revision 862b6aced84cfd7115cc1c86598d01d98e597c01)
@@ -31,4 +31,6 @@
 #endif
 
+#include "CodePatterns/Chronos.hpp"
+
 #include <boost/preprocessor/cat.hpp>
 #include <boost/preprocessor/expand.hpp>
@@ -198,4 +200,9 @@
 };
 
+// =========== time the action ===========
+// we need this here to have the correct function name
+void ACTION::startTimer() const { Chronos::getInstance().startTiming( std::string( TOKEN ) ); }
+void ACTION::endTimer() const { Chronos::getInstance().endTiming( std::string( TOKEN ) ); }
+
 // =========== command for calling action directly ===========
 #if defined paramtypes && defined paramreferences
Index: src/builder_init.cpp
===================================================================
--- src/builder_init.cpp	(revision 004ae78c93125b8c5ed36354e6ccaf507e1cc290)
+++ src/builder_init.cpp	(revision 862b6aced84cfd7115cc1c86598d01d98e597c01)
@@ -20,42 +20,36 @@
 #include "CodePatterns/MemDebug.hpp"
 
+#include <iomanip>
 #include <iostream>
 
+#include "config.hpp"
+#include "molecule.hpp"
+#include "World.hpp"
+
+#include "Actions/ActionExceptions.hpp"
+#include "Actions/ActionHistory.hpp"
+#include "Actions/ActionRegistry.hpp"
+
+#include "CodePatterns/Chronos.hpp"
+#include "CodePatterns/Log.hpp"
+#include "Element/periodentafel.hpp"
 #include "Graph/BondGraph.hpp"
-#include "config.hpp"
-#include "CodePatterns/Log.hpp"
-#include "molecule.hpp"
-#include "Element/periodentafel.hpp"
+#include "Parser/ChangeTracker.hpp"
+#include "Parser/FormatParserStorage.hpp"
+#include "RandomNumbers/RandomNumberDistributionFactory.hpp"
+#include "RandomNumbers/RandomNumberEngineFactory.hpp"
+#include "RandomNumbers/RandomNumberGeneratorFactory.hpp"
 #include "Tesselation/tesselationhelpers.hpp"
-#include "UIElements/UIFactory.hpp"
-#include "UIElements/Menu/MenuDescription.hpp"
-#include "UIElements/TextUI/TextUIFactory.hpp"
+#include "UIElements/CommandLineUI/CommandLineUIFactory.hpp"
 #include "UIElements/CommandLineUI/CommandLineUIFactory.hpp"
 #include "UIElements/CommandLineUI/CommandLineParser.hpp"
+#include "UIElements/Dialog.hpp"
+#include "UIElements/MainWindow.hpp"
+#include "UIElements/Menu/MenuDescription.hpp"
 #ifdef USE_GUI_QT
 #include "UIElements/Qt4/QtUIFactory.hpp"
 #endif
-#include "UIElements/MainWindow.hpp"
-#include "UIElements/Dialog.hpp"
-//#include "Menu/ActionMenuItem.hpp"
-#include "CodePatterns/Verbose.hpp"
-#include "World.hpp"
-
-#include "Actions/ActionExceptions.hpp"
-#include "Actions/ActionHistory.hpp"
-#include "Actions/ActionRegistry.hpp"
-
-#include "RandomNumbers/RandomNumberDistributionFactory.hpp"
-#include "RandomNumbers/RandomNumberEngineFactory.hpp"
-#include "RandomNumbers/RandomNumberGeneratorFactory.hpp"
-
-#include "Parser/ChangeTracker.hpp"
-#include "Parser/FormatParserStorage.hpp"
-
+#include "UIElements/TextUI/TextUIFactory.hpp"
 #include "UIElements/UIFactory.hpp"
-#include "UIElements/TextUI/TextUIFactory.hpp"
-#include "UIElements/CommandLineUI/CommandLineUIFactory.hpp"
-#include "UIElements/MainWindow.hpp"
-#include "UIElements/Dialog.hpp"
 
 #include "version.h"
@@ -171,4 +165,21 @@
 }
 
+/** We give a list of all times per action and a total time.
+ *
+ */
+void printTimings()
+{
+  const MoleCuilder::ActionRegistry &AR = MoleCuilder::ActionRegistry::getInstance();
+  const Chronos &Chron = Chronos::getInstance();
+  std::cout << "(Non-zero) Times used per Action [seconds]:" << std::endl;
+  for (MoleCuilder::ActionRegistry::const_iterator iter = AR.getBeginIter(); iter != AR.getEndIter(); ++iter)
+    if (Chron.getTime(iter->first) != 0.) { // dont give if action has not been used
+      std::cout << "  " << setiosflags(ios::left) << setw(24) << setfill('.') << iter->first;
+      std::cout << setiosflags(ios::left) << setprecision(6) << fixed << Chron.getTime(iter->first) << std::endl;
+    }
+  std::cout << "Total Time: " << Chron.SumUpTotalTime() << " seconds" << std::endl;
+  std::cout << "Total Actions called: " << Chron.SumUpTotalFunctions() << std::endl;
+}
+
 /** Cleans all singleton instances in an orderly fashion.
  * C++ does not guarantee any specific sequence of removal of single instances
@@ -178,4 +189,7 @@
 void cleanUp()
 {
+  printTimings();
+  Chronos::purgeInstance();
+
   RandomNumberDistributionFactory::purgeInstance();
   RandomNumberEngineFactory::purgeInstance();
