Index: src/Fragmentation/Automation/Controller/Commands/SendResultsOperation.cpp
===================================================================
--- src/Fragmentation/Automation/Controller/Commands/SendResultsOperation.cpp	(revision f0834d01293eb49b5445dc39c6e56c78abbdb7ff)
+++ src/Fragmentation/Automation/Controller/Commands/SendResultsOperation.cpp	(revision 35f58778fb07584ad131cbf43ab743b1e5ab0c58)
@@ -112,5 +112,5 @@
  * \return vector of results for the added jobs (\sa addJobs()).
  */
-std::vector<FragmentResult> SendResultsOperation::getResults()
+std::vector<FragmentResult::ptr> SendResultsOperation::getResults()
 {
   Info info(__FUNCTION__);
Index: src/Fragmentation/Automation/Controller/Commands/SendResultsOperation.hpp
===================================================================
--- src/Fragmentation/Automation/Controller/Commands/SendResultsOperation.hpp	(revision f0834d01293eb49b5445dc39c6e56c78abbdb7ff)
+++ src/Fragmentation/Automation/Controller/Commands/SendResultsOperation.hpp	(revision 35f58778fb07584ad131cbf43ab743b1e5ab0c58)
@@ -43,9 +43,9 @@
 
   /// Getter for results
-  std::vector<FragmentResult> getResults();
+  std::vector<FragmentResult::ptr> getResults();
 
 protected:
   /// bunch of results
-  std::vector<FragmentResult> results;
+  std::vector<FragmentResult::ptr> results;
 };
 
Index: src/Fragmentation/Automation/FragmentQueue.cpp
===================================================================
--- src/Fragmentation/Automation/FragmentQueue.cpp	(revision f0834d01293eb49b5445dc39c6e56c78abbdb7ff)
+++ src/Fragmentation/Automation/FragmentQueue.cpp	(revision 35f58778fb07584ad131cbf43ab743b1e5ab0c58)
@@ -24,7 +24,7 @@
 #include "CodePatterns/Assert.hpp"
 
-FragmentResult FragmentQueue::NoResult(-1);
-FragmentResult FragmentQueue::NoResultQueued(-2);
-FragmentResult FragmentQueue::ResultDelivered(-3);
+FragmentResult::ptr FragmentQueue::NoResult( new FragmentResult(-1) );
+FragmentResult::ptr FragmentQueue::NoResultQueued( new FragmentResult(-2) );
+FragmentResult::ptr FragmentQueue::ResultDelivered( new FragmentResult(-3) );
 
 /** Constructor for class FragmentQueue.
@@ -106,9 +106,9 @@
  * @return true - result is a present, valid result, false - result is one of the statics
  */
-bool FragmentQueue::isPresentResult(const FragmentResult &_result) const
+bool FragmentQueue::isPresentResult(const FragmentResult::ptr result) const
 {
-  return (_result != NoResult)
-      && (_result != NoResultQueued)
-      && (_result != ResultDelivered);
+  return (*result != *NoResult)
+      && (*result != *NoResultQueued)
+      && (*result != *ResultDelivered);
 }
 
@@ -134,7 +134,5 @@
   for (ResultMap::const_iterator iter = results.begin();
       iter != results.end(); ++iter)
-    if ((iter->second != NoResult)
-        && (iter->second != NoResultQueued)
-        && (iter->second != ResultDelivered))
+    if (isPresentResult(iter->second))
       ++doneJobs;
     return doneJobs;
@@ -148,17 +146,17 @@
  * \return result for job of given \a jobid
  */
-FragmentResult FragmentQueue::getResult(JobId_t jobid)
+FragmentResult::ptr FragmentQueue::getResult(JobId_t jobid)
 {
   ResultMap::iterator iter = results.find(jobid);
   ASSERT(iter != results.end(),
       "FragmentQueue::pushResult() - job "+toString(jobid)+" is not known to us.");
-  ASSERT(iter->second != NoResult,
+  ASSERT(*iter->second != *NoResult,
       "FragmentQueue::pushResult() - job "+toString(jobid)+" has not been request for calculation yet.");
-  ASSERT(iter->second != NoResultQueued,
+  ASSERT(*iter->second != *NoResultQueued,
       "FragmentQueue::pushResult() - job "+toString(jobid)+"'s calculation is underway but not result has arrived yet.");
-  ASSERT(iter->second != ResultDelivered,
+  ASSERT(*iter->second != *ResultDelivered,
       "FragmentQueue::pushResult() - job "+toString(jobid)+"'s result has already been delivered.");
   /// store result
-  FragmentResult _result = iter->second;
+  FragmentResult::ptr _result = iter->second;
   /// mark as delivered in map
   iter->second = ResultDelivered;
@@ -167,7 +165,7 @@
 }
 
-std::vector<FragmentResult> FragmentQueue::getAllResults()
+std::vector<FragmentResult::ptr> FragmentQueue::getAllResults()
 {
-  std::vector<FragmentResult> returnresults;
+  std::vector<FragmentResult::ptr> returnresults;
   for (ResultMap::iterator iter = results.begin();
       iter != results.end(); ++iter) {
@@ -187,12 +185,12 @@
  * \param result result of job to store
  */
-void FragmentQueue::pushResult(FragmentResult &_result)
+void FragmentQueue::pushResult(FragmentResult::ptr &_result)
 {
   /// check for presence
-  ResultMap::iterator iter = results.find(_result.getId());
+  ResultMap::iterator iter = results.find(_result->getId());
   ASSERT(iter != results.end(),
-      "FragmentQueue::pushResult() - job "+toString(_result.getId())+" is not known to us.");
-  ASSERT(iter->second == NoResultQueued,
-      "FragmentQueue::pushResult() - is not waiting for the result of job "+toString(_result.getId())+".");
+      "FragmentQueue::pushResult() - job "+toString(_result->getId())+" is not known to us.");
+  ASSERT(*iter->second == *NoResultQueued,
+      "FragmentQueue::pushResult() - is not waiting for the result of job "+toString(_result->getId())+".");
   /// and overwrite NoResult in found entry
   iter->second = _result;
Index: src/Fragmentation/Automation/FragmentQueue.hpp
===================================================================
--- src/Fragmentation/Automation/FragmentQueue.hpp	(revision f0834d01293eb49b5445dc39c6e56c78abbdb7ff)
+++ src/Fragmentation/Automation/FragmentQueue.hpp	(revision 35f58778fb07584ad131cbf43ab743b1e5ab0c58)
@@ -43,22 +43,22 @@
   // querying for results
   bool isResultPresent(JobId_t jobid) const;
-  FragmentResult getResult(JobId_t jobid);
-  void pushResult(FragmentResult &_result);
-  std::vector<FragmentResult> getAllResults();
+  FragmentResult::ptr getResult(JobId_t jobid);
+  void pushResult(FragmentResult::ptr &result);
+  std::vector<FragmentResult::ptr> getAllResults();
 
   size_t getDoneJobs() const;
 
 private:
-  bool isPresentResult(const FragmentResult &_result) const;
+  bool isPresentResult(const FragmentResult::ptr result) const;
 
   //!> result that takes place in ResultQueue after job has arrived before it has been popped.
-  static FragmentResult NoResult;
+  static FragmentResult::ptr NoResult;
   //!> result that takes place in ResultQueue until real result has arrived.
-  static FragmentResult NoResultQueued;
+  static FragmentResult::ptr NoResultQueued;
   //!> result that takes place in ResultQueue after real result has been delivered.
-  static FragmentResult ResultDelivered;
+  static FragmentResult::ptr ResultDelivered;
 
   typedef std::deque<FragmentJob::ptr> JobQueue;
-  typedef std::map<JobId_t, FragmentResult> ResultMap;
+  typedef std::map<JobId_t, FragmentResult::ptr> ResultMap;
 
   //!> queue for all jobs
Index: src/Fragmentation/Automation/FragmentResult.hpp
===================================================================
--- src/Fragmentation/Automation/FragmentResult.hpp	(revision f0834d01293eb49b5445dc39c6e56c78abbdb7ff)
+++ src/Fragmentation/Automation/FragmentResult.hpp	(revision 35f58778fb07584ad131cbf43ab743b1e5ab0c58)
@@ -17,5 +17,7 @@
 #include <string>
 
-#include "boost/serialization/array.hpp"
+#include <boost/shared_ptr.hpp>
+#include <boost/serialization/array.hpp>
+#include <boost/serialization/shared_ptr.hpp>
 
 #include "JobId.hpp"
@@ -35,4 +37,6 @@
   friend class FragmentResultTest;
 public:
+  typedef boost::shared_ptr<FragmentResult> ptr;
+
   FragmentResult(const JobId_t id);
   FragmentResult(const JobId_t id, const std::string _result);
Index: src/Fragmentation/Automation/FragmentScheduler.cpp
===================================================================
--- src/Fragmentation/Automation/FragmentScheduler.cpp	(revision f0834d01293eb49b5445dc39c6e56c78abbdb7ff)
+++ src/Fragmentation/Automation/FragmentScheduler.cpp	(revision 35f58778fb07584ad131cbf43ab743b1e5ab0c58)
@@ -56,5 +56,5 @@
       boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), controllerport)
   ),
-  result(JobId::NoJob),
+  result( new FragmentResult(JobId::NoJob) ),
   choice(NoOperation),
   Exitflag(OkFlag)
@@ -177,14 +177,15 @@
 {
   Info info(__FUNCTION__);
-  LOG(1, "INFO: Received result for job #" << result.getId() << " ...");
-  ASSERT(result.getId() != (JobId_t)JobId::NoJob,
+  LOG(1, "INFO: Received result for job #" << result->getId() << " ...");
+  // and push into queue
+  ASSERT(result->getId() != (JobId_t)JobId::NoJob,
       "FragmentScheduler::handle_ReceiveResultFromWorker() - result received has NoJob id.");
-  ASSERT(result.getId() != (JobId_t)JobId::IllegalJob,
+  ASSERT(result->getId() != (JobId_t)JobId::IllegalJob,
       "FragmentScheduler::handle_ReceiveResultFromWorker() - result received has IllegalJob id.");
   // place id into expected
-  if ((result.getId() != (JobId_t)JobId::NoJob) && (result.getId() != (JobId_t)JobId::IllegalJob))
+  if ((result->getId() != (JobId_t)JobId::NoJob) && (result->getId() != (JobId_t)JobId::IllegalJob))
     JobsQueue.pushResult(result);
   // erase result
-  result = FragmentResult(JobId::NoJob);
+  result.reset();
   LOG(1, "INFO: JobsQueue has " << JobsQueue.getDoneJobs() << " results.");
 }
@@ -259,5 +260,5 @@
     case SendResults:
     {
-      const std::vector<FragmentResult> results = JobsQueue.getAllResults();
+      const std::vector<FragmentResult::ptr> results = JobsQueue.getAllResults();
       // ... or we give the results
       LOG(1, "INFO: Sending "+toString(results.size())+" results to controller ...");
Index: src/Fragmentation/Automation/FragmentScheduler.hpp
===================================================================
--- src/Fragmentation/Automation/FragmentScheduler.hpp	(revision f0834d01293eb49b5445dc39c6e56c78abbdb7ff)
+++ src/Fragmentation/Automation/FragmentScheduler.hpp	(revision 35f58778fb07584ad131cbf43ab743b1e5ab0c58)
@@ -91,5 +91,5 @@
 
   /// result that is received from the client.
-  FragmentResult result;
+  FragmentResult::ptr result;
 
   /// bunch of jobs received from controller before placed in JobsQueue
Index: src/Fragmentation/Automation/FragmentWorker.cpp
===================================================================
--- src/Fragmentation/Automation/FragmentWorker.cpp	(revision f0834d01293eb49b5445dc39c6e56c78abbdb7ff)
+++ src/Fragmentation/Automation/FragmentWorker.cpp	(revision 35f58778fb07584ad131cbf43ab743b1e5ab0c58)
@@ -37,5 +37,5 @@
 #include "FragmentWorker.hpp"
 
-FragmentResult FragmentWorker::EmptyResult(JobId::NoJob, std::string("EmptyResult"));
+FragmentResult::ptr FragmentWorker::EmptyResult( new FragmentResult(JobId::NoJob, std::string("EmptyResult")) );
 
 /// Constructor starts the asynchronous connect operation.
@@ -107,5 +107,5 @@
       // do something .. right now: wait
       LOG(1, "INFO: Calculating job #" << job->getId() << " ...");
-      FragmentResult result(job->Work());
+      FragmentResult::ptr result(job->Work());
 
       // write the result to the server
Index: src/Fragmentation/Automation/FragmentWorker.hpp
===================================================================
--- src/Fragmentation/Automation/FragmentWorker.hpp	(revision f0834d01293eb49b5445dc39c6e56c78abbdb7ff)
+++ src/Fragmentation/Automation/FragmentWorker.hpp	(revision 35f58778fb07584ad131cbf43ab743b1e5ab0c58)
@@ -56,5 +56,5 @@
 private:
   // static entity of an empty result
-  static FragmentResult EmptyResult;
+  static FragmentResult::ptr EmptyResult;
 
   /// The Connection to the server.
Index: src/Fragmentation/Automation/Jobs/FragmentJob.cpp
===================================================================
--- src/Fragmentation/Automation/Jobs/FragmentJob.cpp	(revision f0834d01293eb49b5445dc39c6e56c78abbdb7ff)
+++ src/Fragmentation/Automation/Jobs/FragmentJob.cpp	(revision 35f58778fb07584ad131cbf43ab743b1e5ab0c58)
@@ -64,8 +64,8 @@
  * \return result of this job
  */
-FragmentResult FragmentJob::Work()
+FragmentResult::ptr FragmentJob::Work()
 {
   Info info((std::string(__FUNCTION__)+std::string(", id #")+toString(getId())).c_str());
-  FragmentResult s(getId());
+  FragmentResult::ptr s( new FragmentResult(getId()) );
 
   // write outputfile to file
@@ -80,5 +80,5 @@
 
   // fork into subprocess and launch command
-  s.exitflag = std::system((command+std::string(" ")+inputfilename
+  s->exitflag = std::system((command+std::string(" ")+inputfilename
                         +std::string(" >")+outputfilename).c_str());
   std::ifstream resultfile;
@@ -87,5 +87,5 @@
   while (resultfile.good()) {
     resultfile.getline(line, 1023);
-    s.result += line;
+    s->result += line;
   }
   resultfile.close();
Index: src/Fragmentation/Automation/Jobs/FragmentJob.hpp
===================================================================
--- src/Fragmentation/Automation/Jobs/FragmentJob.hpp	(revision f0834d01293eb49b5445dc39c6e56c78abbdb7ff)
+++ src/Fragmentation/Automation/Jobs/FragmentJob.hpp	(revision 35f58778fb07584ad131cbf43ab743b1e5ab0c58)
@@ -47,5 +47,5 @@
   ~FragmentJob();
 
-  FragmentResult Work();
+  FragmentResult::ptr Work();
 
   bool operator==(const FragmentJob &other) const;
Index: src/Fragmentation/Automation/controller.cpp
===================================================================
--- src/Fragmentation/Automation/controller.cpp	(revision f0834d01293eb49b5445dc39c6e56c78abbdb7ff)
+++ src/Fragmentation/Automation/controller.cpp	(revision 35f58778fb07584ad131cbf43ab743b1e5ab0c58)
@@ -98,8 +98,8 @@
   SendResultsOperation *sendres = static_cast<SendResultsOperation *>(
       controller.Commands.getByName("sendresults"));
-  std::vector<FragmentResult> results = sendres->getResults();
-  for (std::vector<FragmentResult>::const_iterator iter = results.begin();
+  std::vector<FragmentResult::ptr> results = sendres->getResults();
+  for (std::vector<FragmentResult::ptr>::const_iterator iter = results.begin();
       iter != results.end(); ++iter)
-    LOG(1, "RESULT: job #"+toString((*iter).getId())+": "+toString((*iter).result));
+    LOG(1, "RESULT: job #"+toString((*iter)->getId())+": "+toString((*iter)->result));
 }
 
Index: src/Fragmentation/Automation/unittests/FragmentJobUnitTest.cpp
===================================================================
--- src/Fragmentation/Automation/unittests/FragmentJobUnitTest.cpp	(revision f0834d01293eb49b5445dc39c6e56c78abbdb7ff)
+++ src/Fragmentation/Automation/unittests/FragmentJobUnitTest.cpp	(revision 35f58778fb07584ad131cbf43ab743b1e5ab0c58)
@@ -82,9 +82,9 @@
   FragmentJob::ptr othertestJob(new FragmentJob(command, outputfile, 2));
 
-  FragmentResult testResult(testJob->Work());
-  FragmentResult othertestResult(othertestJob->Work());
+  FragmentResult::ptr testResult(testJob->Work());
+  FragmentResult::ptr othertestResult(othertestJob->Work());
 
-  CPPUNIT_ASSERT_EQUAL( (JobId_t)1, testResult.getId() );
-  CPPUNIT_ASSERT_EQUAL( (JobId_t)2, othertestResult.getId() );
+  CPPUNIT_ASSERT_EQUAL( (JobId_t)1, testResult->getId() );
+  CPPUNIT_ASSERT_EQUAL( (JobId_t)2, othertestResult->getId() );
 }
 
Index: src/Fragmentation/Automation/unittests/FragmentQueueUnitTest.cpp
===================================================================
--- src/Fragmentation/Automation/unittests/FragmentQueueUnitTest.cpp	(revision f0834d01293eb49b5445dc39c6e56c78abbdb7ff)
+++ src/Fragmentation/Automation/unittests/FragmentQueueUnitTest.cpp	(revision 35f58778fb07584ad131cbf43ab743b1e5ab0c58)
@@ -189,6 +189,6 @@
 
   // prepare a result
-  FragmentResult testResult(1);
-  FragmentResult wrongIdResult(2);
+  FragmentResult::ptr testResult( new FragmentResult(1) );
+  FragmentResult::ptr wrongIdResult( new FragmentResult(2) );
 
   // check that none are present and we can't get result yet
@@ -257,5 +257,5 @@
   // check that no results are returned.
   {
-    const std::vector<FragmentResult> results = queue->getAllResults();
+    const std::vector<FragmentResult::ptr> results = queue->getAllResults();
     CPPUNIT_ASSERT_EQUAL( (size_t)0, results.size() );
   }
@@ -271,6 +271,6 @@
 
   // prepare a result
-  FragmentResult testResult(1);
-  FragmentResult anothertestResult(2);
+  FragmentResult::ptr testResult( new FragmentResult(1) );
+  FragmentResult::ptr anothertestResult( new FragmentResult(2) );
 
   // push correct result
@@ -285,5 +285,5 @@
   // check that two results are returned.
   {
-    const std::vector<FragmentResult> results = queue->getAllResults();
+    const std::vector<FragmentResult::ptr> results = queue->getAllResults();
     CPPUNIT_ASSERT_EQUAL( (size_t)2, results.size() );
   }
