Index: src/Actions/FragmentationAction/FragmentationAutomationAction.cpp
===================================================================
--- src/Actions/FragmentationAction/FragmentationAutomationAction.cpp	(revision 28e8944862c75fbea6c16bc66cb0ae88753f4e00)
+++ src/Actions/FragmentationAction/FragmentationAutomationAction.cpp	(revision a9558f08725aef6a869b5db8e1f8f566b591db1b)
@@ -191,5 +191,5 @@
       MatrixContainer::MatrixArray matrix;
       matrix.resize(1);
-      matrix[0].resize(1, extractedData.energy);
+      matrix[0].resize(1, extractedData.energies.total);
       if (!Energy.AddMatrix(
           std::string("MPQCJob ")+toString((*iter)->getId()),
Index: src/Jobs/MPQCCommandJob.cpp
===================================================================
--- src/Jobs/MPQCCommandJob.cpp	(revision 28e8944862c75fbea6c16bc66cb0ae88753f4e00)
+++ src/Jobs/MPQCCommandJob.cpp	(revision a9558f08725aef6a869b5db8e1f8f566b591db1b)
@@ -134,5 +134,5 @@
       tok_iter++;
       std::stringstream energystring(*tok_iter);
-      energystring >> data.energy;
+      energystring >> data.energies.total;
     }
     // ... and forces ("Total Gradient") from resultstring
Index: src/Jobs/MPQCCommandJob_MPQCData.cpp
===================================================================
--- src/Jobs/MPQCCommandJob_MPQCData.cpp	(revision 28e8944862c75fbea6c16bc66cb0ae88753f4e00)
+++ src/Jobs/MPQCCommandJob_MPQCData.cpp	(revision a9558f08725aef6a869b5db8e1f8f566b591db1b)
@@ -43,16 +43,18 @@
 #include "LinearAlgebra/defs.hpp"
 
-
-/** Constructor for class MPQCData.
- *
- */
-MPQCData::MPQCData() :
-    energy(0.)
+MPQCData::energy_t::energy_t() :
+  total(0.),
+  nuclear_repulsion(0.),
+  electron_repulsion(0.),
+  correlation(0.),
+  overlap(0.),
+  kinetic(0.),
+  hcore(0.)
 {}
 
-/** Destructor for class MPQCData.
- *
- */
-MPQCData::~MPQCData()
+MPQCData::times_t::times_t() :
+  walltime(0.),
+  cputime(0.),
+  flops(0.)
 {}
 
@@ -62,7 +64,7 @@
 bool MPQCData::operator==(const MPQCData &other) const
 {
-  if (fabs(energy - other.energy) > std::numeric_limits<double>::epsilon()) {
+  if (fabs(energies.total - other.energies.total) > std::numeric_limits<double>::epsilon()) {
     LOG(1, "INFO: Energy's in MPQCData differ: "
-        << energy << " != " << other.energy << ".");
+        << energies.total << " != " << other.energies.total << ".");
     return false;
   }
@@ -85,6 +87,7 @@
 std::ostream & operator<<(std::ostream &ost, const MPQCData &data)
 {
-  ost << "Energy: " << data.energy << "\t";
-  ost << "Forces: " << data.forces;
+  ost << "Energy: " << data.energies.total << "\t";
+  ost << "Forces: " << data.forces << "\t";
+  ost << "Times: " << data.times.walltime << ", " << data.times.cputime << ", " << data.times.flops;
   return ost;
 }
Index: src/Jobs/MPQCCommandJob_MPQCData.hpp
===================================================================
--- src/Jobs/MPQCCommandJob_MPQCData.hpp	(revision 28e8944862c75fbea6c16bc66cb0ae88753f4e00)
+++ src/Jobs/MPQCCommandJob_MPQCData.hpp	(revision a9558f08725aef6a869b5db8e1f8f566b591db1b)
@@ -37,7 +37,4 @@
   friend std::ostream & operator<<(std::ostream &ost, const MPQCData &data);
 public:
-  MPQCData();
-  ~MPQCData();
-
   bool operator==(const MPQCData &other) const;
 
@@ -46,8 +43,35 @@
   }
 
+  /// Energie structure
+  struct energy_t {
+    /** Constructor for struct energy_t, sets all to zero.
+     *
+     */
+    energy_t();
+
+    double total;
+    double nuclear_repulsion;
+    double electron_repulsion;
+    double correlation;
+    double overlap;
+    double kinetic;
+    double hcore;
+  } energies;
+
+  /// Forces
   typedef std::vector<double> vector_type;
+  std::vector< vector_type  > forces;
 
-  double energy;
-  std::vector< vector_type  > forces;
+  /// Timing structure
+  struct times_t {
+    /** Constructor for struct times_t, sets all to zero.
+     *
+     */
+    times_t();
+
+    double walltime;
+    double cputime;
+    double flops;
+  } times;
 
 private:
@@ -57,6 +81,15 @@
   void serialize(Archive& ar, const unsigned int version)
   {
-    ar & energy;
+    ar & energies.total;
+    ar & energies.nuclear_repulsion;
+    ar & energies.electron_repulsion;
+    ar & energies.correlation;
+    ar & energies.overlap;
+    ar & energies.kinetic;
+    ar & energies.hcore;
     ar & forces;
+    ar & times.walltime;
+    ar & times.cputime;
+    ar & times.flops;
   }
 };
Index: src/Jobs/MPQCJob.cpp
===================================================================
--- src/Jobs/MPQCJob.cpp	(revision 28e8944862c75fbea6c16bc66cb0ae88753f4e00)
+++ src/Jobs/MPQCJob.cpp	(revision a9558f08725aef6a869b5db8e1f8f566b591db1b)
@@ -46,4 +46,16 @@
 #include <sstream>
 
+MPQCJob::MPQCJob(const JobId_t _JobId, const std::string &_inputfile) :
+  FragmentJob(_JobId),
+  inputfile(_inputfile)
+{}
+
+MPQCJob::MPQCJob() :
+  FragmentJob(JobId::IllegalJob)
+{}
+
+MPQCJob::~MPQCJob()
+{}
+
 FragmentResult::ptr MPQCJob::Work()
 {
Index: src/Jobs/MPQCJob.hpp
===================================================================
--- src/Jobs/MPQCJob.hpp	(revision 28e8944862c75fbea6c16bc66cb0ae88753f4e00)
+++ src/Jobs/MPQCJob.hpp	(revision a9558f08725aef6a869b5db8e1f8f566b591db1b)
@@ -27,9 +27,6 @@
 {
 public:
-  MPQCJob(const JobId_t _JobId, const std::string &_inputfile) :
-    FragmentJob(_JobId),
-    inputfile(_inputfile)
-  {}
-  virtual ~MPQCJob() {}
+  MPQCJob(const JobId_t _JobId, const std::string &_inputfile);
+  virtual ~MPQCJob();
 
   FragmentResult::ptr Work();
@@ -42,7 +39,5 @@
   /** private default cstor for serialization only
    */
-  MPQCJob() :
-    FragmentJob(JobId::IllegalJob)
-  {}
+  MPQCJob();
 
   friend class boost::serialization::access;
Index: src/Jobs/unittests/MPQCCommandJobUnitTest.cpp
===================================================================
--- src/Jobs/unittests/MPQCCommandJobUnitTest.cpp	(revision 28e8944862c75fbea6c16bc66cb0ae88753f4e00)
+++ src/Jobs/unittests/MPQCCommandJobUnitTest.cpp	(revision a9558f08725aef6a869b5db8e1f8f566b591db1b)
@@ -110,5 +110,5 @@
   // prepare result container
   MPQCData data;
-  data.energy = -75.637499283020;
+  data.energies.total = -75.637499283020;
   std::vector<double> force;
   std::vector< std::vector<double> > forces;
Index: src/Jobs/unittests/MPQCDataUnitTest.cpp
===================================================================
--- src/Jobs/unittests/MPQCDataUnitTest.cpp	(revision 28e8944862c75fbea6c16bc66cb0ae88753f4e00)
+++ src/Jobs/unittests/MPQCDataUnitTest.cpp	(revision a9558f08725aef6a869b5db8e1f8f566b591db1b)
@@ -67,5 +67,5 @@
   data = new MPQCData;
 
-  data->energy = -37.3479855;
+  data->energies.total = -37.3479855;
   std::vector<double> force;
   std::vector< std::vector<double> > forces;
@@ -100,5 +100,5 @@
 
   // construct closer and closer pendant
-  otherData.energy = -37.3479855;
+  otherData.energies.total = -37.3479855;
   CPPUNIT_ASSERT( *data != otherData );
   std::vector<double> force;
@@ -117,7 +117,7 @@
 
   // change energy
-  otherData.energy = -4;
+  otherData.energies.total = -4;
   CPPUNIT_ASSERT( *data != otherData );
-  otherData.energy = -37.3479855;
+  otherData.energies.total = -37.3479855;
   CPPUNIT_ASSERT( *data == otherData );
 
@@ -129,5 +129,5 @@
 
   // check sensibility
-  otherData.energy -= 1e-1*std::numeric_limits<double>::epsilon();
+  otherData.energies.total -= 1e-1*std::numeric_limits<double>::epsilon();
   CPPUNIT_ASSERT( *data == otherData );
   otherData.forces[1][0] -= 1e-1*std::numeric_limits<double>::epsilon();
Index: src/controller_MPQCCommandJob.cpp
===================================================================
--- src/controller_MPQCCommandJob.cpp	(revision 28e8944862c75fbea6c16bc66cb0ae88753f4e00)
+++ src/controller_MPQCCommandJob.cpp	(revision a9558f08725aef6a869b5db8e1f8f566b591db1b)
@@ -167,5 +167,5 @@
       MatrixContainer::MatrixArray matrix;
       matrix.resize(1);
-      matrix[0].resize(1, extractedData.energy);
+      matrix[0].resize(1, extractedData.energies.total);
       if (!Energy.AddMatrix(
           std::string("MPQCJob ")+toString((*iter)->getId()),
