Index: src/Fragmentation/Automation/MPQCFragmentController.cpp
===================================================================
--- src/Fragmentation/Automation/MPQCFragmentController.cpp	(revision ffe0574b028ca944317a09afeafb7d94ea893726)
+++ src/Fragmentation/Automation/MPQCFragmentController.cpp	(revision ffe0574b028ca944317a09afeafb7d94ea893726)
@@ -0,0 +1,105 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2012 University of Bonn. All rights reserved.
+ * 
+ *
+ *   This file is part of MoleCuilder.
+ *
+ *    MoleCuilder is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation, either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    MoleCuilder is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with MoleCuilder.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * MPQCFragmentController.cpp
+ *
+ *  Created on: Aug 27, 2012
+ *      Author: heber
+ */
+
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// boost asio needs specific operator new
+#include <boost/asio.hpp>
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "MPQCFragmentController.hpp"
+
+#include <boost/filesystem/operations.hpp>
+
+#include "Box.hpp"
+#include "Jobs/MPQCJob.hpp"
+#include "LinearAlgebra/RealSpaceMatrix.hpp"
+#include "World.hpp"
+
+const int MPQCFragmentController::LEVEL = 5;
+
+bool MPQCFragmentController::addJobsFromFiles(
+    const std::string &executable,
+    const std::vector< boost::filesystem::path > &jobfiles)
+{
+  std::vector<FragmentJob::ptr> jobs;
+  for (std::vector< boost::filesystem::path >::const_iterator iter = jobfiles.begin();
+      iter != jobfiles .end(); ++iter) {
+    const std::string &filename = (*iter).string();
+    if (boost::filesystem::exists(filename)) {
+      const JobId_t next_id = getAvailableId();
+      LOG(1, "INFO: Creating MPQCCommandJob with filename'"
+          +filename+"', and id "+toString(next_id)+".");
+      parsejob(jobs, executable, filename, next_id);
+    } else {
+      ELOG(1, "Fragment job "+filename+" does not exist.");
+      return false;
+    }
+  }
+  addJobs(jobs);
+  sendJobs(host, port);
+  RunService("Adding MPQCJobs");
+
+  return true;
+}
+
+/** Creates a MPQCCommandJob with argument \a filename.
+ *
+ * @param jobs created job is added to this vector
+ * @param command mpqc command to execute
+ * @param filename filename being argument to job
+ * @param nextid id for this job
+ */
+void MPQCFragmentController::parsejob(
+    std::vector<FragmentJob::ptr> &jobs,
+    const std::string &command,
+    const std::string &filename,
+    const JobId_t nextid)
+{
+  std::ifstream file;
+  file.open(filename.c_str());
+  ASSERT( file.good(), "parsejob() - file "+filename+" does not exist.");
+  std::string output((std::istreambuf_iterator<char>(file)),
+      std::istreambuf_iterator<char>());
+  double begin[NDIM] = { 0., 0., 0. };
+  const RealSpaceMatrix& M = World::getInstance().getDomain().getM();
+  const double size = M.at(0,0);
+  ASSERT( M.determinant() == size*size*size,
+      "parsejob() - current domain matrix "+toString(M)+" is not cubic.");
+  const int level = LEVEL;
+  FragmentJob::ptr testJob( new MPQCJob(nextid, output, begin, size, level) );
+  jobs.push_back(testJob);
+  file.close();
+  LOG(1, "INFO: Added MPQCCommandJob from file "+filename+".");
+}
Index: src/Fragmentation/Automation/MPQCFragmentController.hpp
===================================================================
--- src/Fragmentation/Automation/MPQCFragmentController.hpp	(revision ffe0574b028ca944317a09afeafb7d94ea893726)
+++ src/Fragmentation/Automation/MPQCFragmentController.hpp	(revision ffe0574b028ca944317a09afeafb7d94ea893726)
@@ -0,0 +1,61 @@
+/*
+ * MPQCFragmentController.hpp
+ *
+ *  Created on: Aug 27, 2012
+ *      Author: heber
+ */
+
+#ifndef MPQCFRAGMENTCONTROLLER_HPP_
+#define MPQCFRAGMENTCONTROLLER_HPP_
+
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Fragmentation/Automation/SpecificFragmentController.hpp"
+
+#include <boost/filesystem/path.hpp>
+
+#include <fstream>
+#include <string>
+#include <vector>
+
+#include "JobMarket/JobId.hpp"
+
+#include "Jobs/MPQCData.hpp"
+
+/** This class uses SpecificFragmentController with functions to add specificly
+ * VMGJobs.
+ */
+class MPQCFragmentController : public SpecificFragmentController
+{
+public:
+  MPQCFragmentController(boost::asio::io_service &io_service) :
+    SpecificFragmentController(io_service)
+  {}
+  virtual ~MPQCFragmentController()
+  {}
+
+  bool addJobsFromFiles(
+      const std::string &executable,
+      const std::vector< boost::filesystem::path > &jobfiles);
+  void getResults(std::map<JobId_t, MPQCData> &fragmentData) {
+    SpecificFragmentController::getResults<MPQCData>(fragmentData);
+  }
+
+private:
+  void parsejob(
+      std::vector<FragmentJob::ptr> &jobs,
+      const std::string &command,
+      const std::string &filename,
+      const JobId_t nextid);
+
+private:
+  //!> resolution of sampled electron density as \f$2^{\text{level}}\f$
+  static const int LEVEL;
+};
+
+
+#endif /* MPQCFRAGMENTCONTROLLER_HPP_ */
Index: src/Fragmentation/Automation/Makefile.am
===================================================================
--- src/Fragmentation/Automation/Makefile.am	(revision ffe0574b028ca944317a09afeafb7d94ea893726)
+++ src/Fragmentation/Automation/Makefile.am	(revision ffe0574b028ca944317a09afeafb7d94ea893726)
@@ -0,0 +1,67 @@
+# PLEASE adhere to the alphabetical ordering in this Makefile!
+# Also indentation by a single tab
+
+FRAGMENTATIONAUTOMATIONSOURCE = \
+	Fragmentation/Automation/MPQCFragmentController.cpp \
+	Fragmentation/Automation/SpecificFragmentController.cpp
+
+if CONDVMG
+FRAGMENTATIONAUTOMATIONSOURCE += \
+	Fragmentation/Automation/VMGFragmentController.cpp
+endif
+
+FRAGMENTATIONAUTOMATIONHEADER = \
+	Fragmentation/Automation/MPQCFragmentController.hpp \
+	Fragmentation/Automation/SpecificFragmentController.hpp \
+	Fragmentation/Automation/SpecificFragmentController_impl.hpp
+	
+if CONDVMG
+FRAGMENTATIONAUTOMATIONHEADER += \
+	Fragmentation/Automation/VMGFragmentController.hpp
+endif
+
+noinst_LTLIBRARIES += libMolecuilderFragmentationAutomation.la
+libMolecuilderFragmentationAutomation_la_includedir = $(includedir)/MoleCuilder/Fragmentation/Automation/
+libMolecuilderFragmentationAutomation_la_CPPFLAGS = ${BOOST_CPPFLAGS} ${CodePatterns_CFLAGS} $(JobMarket_CFLAGS)
+libMolecuilderFragmentationAutomation_la_LDFLAGS = -ldl ${BOOST_LDFLAGS}
+libMolecuilderFragmentationAutomation_la_LIBADD = \
+	${CodePatterns_LIBS}
+
+
+nobase_libMolecuilderFragmentationAutomation_la_include_HEADERS = ${FRAGMENTATIONAUTOMATIONHEADER}
+
+## Define the source file list for the "libexample-@MOLECUILDER_API_VERSION@.la"
+## target.  Note that @MOLECUILDER_API_VERSION@ is not interpreted by Automake and
+## will therefore be treated as if it were literally part of the target name,
+## and the variable name derived from that.
+## The file extension .cc is recognized by Automake, and makes it produce
+## rules which invoke the C++ compiler to produce a libtool object file (.lo)
+## from each source file.  Note that it is not necessary to list header files
+## which are already listed elsewhere in a _HEADERS variable assignment.
+libMolecuilderFragmentationAutomation_la_SOURCES = ${FRAGMENTATIONAUTOMATIONSOURCE}
+
+## Instruct libtool to include ABI version information in the generated shared
+## library file (.so).  The library ABI version is defined in configure.ac, so
+## that all version information is kept in one place.
+#libMolecuilderFragmentationAutomation_la_LDFLAGS = -version-info $(MOLECUILDER_SO_VERSION)
+
+## The generated configuration header is installed in its own subdirectory of
+## $(libdir).  The reason for this is that the configuration information put
+## into this header file describes the target platform the installed library
+## has been built for.  Thus the file must not be installed into a location
+## intended for architecture-independent files, as defined by the Filesystem
+## Hierarchy Standard (FHS).
+## The nodist_ prefix instructs Automake to not generate rules for including
+## the listed files in the distribution on 'make dist'.  Files that are listed
+## in _HEADERS variables are normally included in the distribution, but the
+## configuration header file is generated at configure time and should not be
+## shipped with the source tarball.
+#libMolecuilderFragmentationAutomation_libincludedir = $(libdir)/MoleCuilder/include
+#nodist_libMolecuilderFragmentationAutomation_libinclude_HEADERS = $(top_builddir)/libmolecuilder_config.h
+
+## Install the generated pkg-config file (.pc) into the expected location for
+## architecture-dependent package configuration information.  Occasionally,
+## pkg-config files are also used for architecture-independent data packages,
+## in which case the correct install location would be $(datadir)/pkgconfig.
+#pkgconfigdir = $(libdir)/pkgconfig
+#pkgconfig_DATA = $(top_builddir)/MoleCuilder.pc
Index: src/Fragmentation/Automation/SpecificFragmentController.cpp
===================================================================
--- src/Fragmentation/Automation/SpecificFragmentController.cpp	(revision ffe0574b028ca944317a09afeafb7d94ea893726)
+++ src/Fragmentation/Automation/SpecificFragmentController.cpp	(revision ffe0574b028ca944317a09afeafb7d94ea893726)
@@ -0,0 +1,76 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2012 University of Bonn. All rights reserved.
+ * 
+ *
+ *   This file is part of MoleCuilder.
+ *
+ *    MoleCuilder is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation, either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    MoleCuilder is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with MoleCuilder.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * SpecificFragmentController.cpp
+ *
+ *  Created on: Aug 27, 2012
+ *      Author: heber
+ */
+
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// boost asio needs specific operator new
+#include <boost/asio.hpp>
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "SpecificFragmentController.hpp"
+
+#include "CodePatterns/Info.hpp"
+
+void SpecificFragmentController::RunService(std::string message)
+{
+  message = std::string("io_service: ") + message;
+  io_service.reset();
+  Info info(message.c_str());
+  io_service.run();
+}
+
+void SpecificFragmentController::requestIds(const size_t numberjobs)
+{
+  FragmentController::requestIds(host, port, numberjobs);
+  RunService("Requesting ids");
+}
+
+void SpecificFragmentController::waitforResults(const size_t NoExpectedResults)
+{
+  size_t NoCalculatedResults = 0;
+  while (NoCalculatedResults != NoExpectedResults) {
+    // wait a bit
+    boost::asio::deadline_timer timer(io_service);
+    timer.expires_from_now(boost::posix_time::milliseconds(500));
+    timer.wait();
+    // then request status
+    FragmentController::checkResults(host, port);
+    RunService("Checking on results");
+
+    const std::pair<size_t, size_t> JobStatus = FragmentController::getJobStatus();
+    LOG(1, "INFO: #" << JobStatus.first << " are waiting in the queue and #" << JobStatus.second << " jobs are calculated so far.");
+    NoCalculatedResults = JobStatus.second;
+  }
+}
+
Index: src/Fragmentation/Automation/SpecificFragmentController.hpp
===================================================================
--- src/Fragmentation/Automation/SpecificFragmentController.hpp	(revision ffe0574b028ca944317a09afeafb7d94ea893726)
+++ src/Fragmentation/Automation/SpecificFragmentController.hpp	(revision ffe0574b028ca944317a09afeafb7d94ea893726)
@@ -0,0 +1,76 @@
+/*
+ * SpecificFragmentController.hpp
+ *
+ *  Created on: Aug 27, 2012
+ *      Author: heber
+ */
+
+#ifndef SPECIFICFRAGMENTCONTROLLER_HPP_
+#define SPECIFICFRAGMENTCONTROLLER_HPP_
+
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "JobMarket/Controller/FragmentController.hpp"
+#include "JobMarket/JobId.hpp"
+#include "JobMarket/Results/FragmentResult.hpp"
+
+#include <map>
+#include <string>
+#include <vector>
+
+/** This class extends FragmentController by some commodity functions used
+ * within FragmentationAutomationAction.
+ *
+ */
+class SpecificFragmentController : public FragmentController
+{
+public:
+  SpecificFragmentController(boost::asio::io_service &_io_service) :
+    FragmentController(_io_service),
+    io_service(_io_service)
+  {}
+
+  virtual ~SpecificFragmentController()
+  {}
+
+  void requestIds(const size_t numberjobs);
+  void waitforResults(const size_t NoExpectedResults);
+  void RunService(const std::string message);
+
+  /// getter and setter
+
+  void setHost(const std::string &_host) { host = _host; }
+  void setPort(const std::string &_port) { port = _port; }
+
+protected:
+  template <typename T>
+  void getResults(std::map<JobId_t, T> &IdData);
+
+private:
+  /** Extracts specific Data type from received vector of FragmentResults.
+   *
+   * @param results results to extract specific Data type from
+   * @param fragmentData on return array filled with extracted specific Data type
+   */
+  template <typename T>
+  void ConvertFragmentResultTo(
+      const std::vector<FragmentResult::ptr> &results,
+      std::vector<T> &fragmentData);
+
+protected:
+  //!> hostname of the server to control
+  std::string host;
+  //!> port of the server to control
+  std::string port;
+private:
+  //!> reference to io_service for internal purposes
+  boost::asio::io_service &io_service;
+};
+
+#include "SpecificFragmentController_impl.hpp"
+
+#endif /* SPECIFICFRAGMENTCONTROLLER_HPP_ */
Index: src/Fragmentation/Automation/SpecificFragmentController_impl.hpp
===================================================================
--- src/Fragmentation/Automation/SpecificFragmentController_impl.hpp	(revision ffe0574b028ca944317a09afeafb7d94ea893726)
+++ src/Fragmentation/Automation/SpecificFragmentController_impl.hpp	(revision ffe0574b028ca944317a09afeafb7d94ea893726)
@@ -0,0 +1,77 @@
+/*
+ * SpecificFragmentController_impl.hpp
+ *
+ *  Created on: Aug 27, 2012
+ *      Author: heber
+ */
+
+#ifndef SPECIFICFRAGMENTCONTROLLER_IMPL_HPP_
+#define SPECIFICFRAGMENTCONTROLLER_IMPL_HPP_
+
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "SpecificFragmentController.hpp"
+
+#include "CodePatterns/Assert.hpp"
+#include "CodePatterns/toString.hpp"
+
+
+template <typename T>
+void SpecificFragmentController::getResults(std::map<JobId_t, T> &IdData)
+{
+  // receive
+  receiveResults(host, port);
+  RunService("Requesting results");
+  std::vector<FragmentResult::ptr> fragmentresults = getReceivedResults();
+  // convert
+  std::vector<T> fragmentData;
+  ConvertFragmentResultTo<T>(fragmentresults, fragmentData);
+  // put into map
+  IdData.clear();
+  std::vector<FragmentResult::ptr>::const_iterator resultiter = fragmentresults.begin();
+  typename std::vector<T>::const_iterator dataiter = fragmentData.begin();
+  for(;resultiter != fragmentresults.end(); ++resultiter, ++dataiter) {
+#ifndef NDEBUG
+    std::pair<typename std::map<JobId_t, T>::iterator, bool> inserter =
+#endif
+    IdData.insert( std::make_pair( (*resultiter)->getId(), *dataiter) );
+    ASSERT( inserter.second,
+        "SpecificFragmentController::getResults() - result id "
+        +toString(inserter.first->first)+" already present.");
+  }
+  ASSERT( dataiter == fragmentData.end(),
+      "SpecificFragmentController::getResults() - fragmentresults and fragmentdata differ in size.");
+}
+
+template <typename T>
+void SpecificFragmentController::ConvertFragmentResultTo(
+    const std::vector<FragmentResult::ptr> &results,
+    std::vector<T> &fragmentData)
+{
+  // extract results
+  fragmentData.clear();
+  fragmentData.reserve(results.size());
+
+  LOG(2, "DEBUG: Parsing now through " << results.size() << " results.");
+  for (std::vector<FragmentResult::ptr>::const_iterator iter = results.begin();
+      iter != results.end(); ++iter) {
+    //LOG(1, "RESULT: job #"+toString((*iter)->getId())+": "+toString((*iter)->result));
+    T extractedData;
+    std::stringstream inputstream((*iter)->result);
+    LOG(2, "DEBUG: First 50 characters FragmentResult's string: "+(*iter)->result.substr(0, 50));
+    boost::archive::text_iarchive ia(inputstream);
+    ia >> extractedData;
+    LOG(1, "INFO: extracted data is " << extractedData << ".");
+    fragmentData.push_back(extractedData);
+  }
+
+  ASSERT( results.size() == fragmentData.size(),
+      "ConvertFragmentResultTo() - the number of extracted data differs from the number of results.");
+}
+
+
+#endif /* SPECIFICFRAGMENTCONTROLLER_IMPL_HPP_ */
Index: src/Fragmentation/Automation/VMGFragmentController.cpp
===================================================================
--- src/Fragmentation/Automation/VMGFragmentController.cpp	(revision ffe0574b028ca944317a09afeafb7d94ea893726)
+++ src/Fragmentation/Automation/VMGFragmentController.cpp	(revision ffe0574b028ca944317a09afeafb7d94ea893726)
@@ -0,0 +1,95 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2012 University of Bonn. All rights reserved.
+ * 
+ *
+ *   This file is part of MoleCuilder.
+ *
+ *    MoleCuilder is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation, either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    MoleCuilder is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with MoleCuilder.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * VMGFragmentController.cpp
+ *
+ *  Created on: Aug 27, 2012
+ *      Author: heber
+ */
+
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+// boost asio needs specific operator new
+#include <boost/asio.hpp>
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "VMGFragmentController.hpp"
+
+#include "Atom/atom.hpp"
+#include "Element/element.hpp"
+#include "Jobs/VMGJob.hpp"
+#include "molecule.hpp"
+#include "World.hpp"
+
+bool VMGFragmentController::createLongRangeJobs(
+    const std::map<JobId_t, MPQCData> &fragmentData,
+    const SamplingGrid &full_sampled_grid,
+    const Fragment &full_fragment)
+{
+  std::vector<FragmentJob::ptr> jobs;
+  // add one job for each fragment as the short-range correction which we need
+  // to subtract from the obtained full potential to get the long-range part only
+  for (std::map<JobId_t, MPQCData>::const_iterator iter = fragmentData.begin();
+      iter != fragmentData.end(); ++iter) {
+    const JobId_t next_id = getAvailableId();
+    LOG(1, "INFO: Creating VMGJob with " << iter->second.sampled_grid.sampled_grid.size()
+        << " gridpoints and " << iter->second.charges.size() << " particle charges.");
+    FragmentJob::ptr testJob(
+        new VMGJob(next_id, iter->second.sampled_grid, iter->second.positions, iter->second.charges) );
+    jobs.push_back(testJob);
+  }
+
+  {
+    const World::AtomComposite &atoms = World::getInstance().getAllAtoms();
+    std::vector< std::vector<double> > positions;
+    positions.reserve(atoms.size());
+    std::vector<double> charges;
+    charges.reserve(atoms.size());
+    std::vector<double> position(3, 0.);
+    for (World::AtomComposite::const_iterator iter = atoms.begin();
+        iter != atoms.end(); ++iter) {
+      const Vector &pos = (*iter)->getPosition();
+      for (size_t i=0;i<3;++i) position[i] = pos[i];
+      positions.push_back(position);
+      charges.push_back((double)((*iter)->getElement().getAtomicNumber()));
+    }
+    const JobId_t next_id = getAvailableId();
+    LOG(1, "INFO: Creating full VMGJob with " << full_sampled_grid.sampled_grid.size()
+        << " gridpoints and " << charges.size() << " particle charges.");
+    FragmentJob::ptr testJob(
+        new VMGJob(next_id, full_sampled_grid, positions, charges) );
+    jobs.push_back(testJob);
+  }
+
+  // then send jobs to controller
+  addJobs(jobs);
+  sendJobs(host, port);
+  RunService("Adding VMGJobs");
+
+  return true;
+}
Index: src/Fragmentation/Automation/VMGFragmentController.hpp
===================================================================
--- src/Fragmentation/Automation/VMGFragmentController.hpp	(revision ffe0574b028ca944317a09afeafb7d94ea893726)
+++ src/Fragmentation/Automation/VMGFragmentController.hpp	(revision ffe0574b028ca944317a09afeafb7d94ea893726)
@@ -0,0 +1,48 @@
+/*
+ * VMGFragmentController.hpp
+ *
+ *  Created on: Aug 27, 2012
+ *      Author: heber
+ */
+
+#ifndef VMGFRAGMENTCONTROLLER_HPP_
+#define VMGFRAGMENTCONTROLLER_HPP_
+
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Fragmentation/Automation/SpecificFragmentController.hpp"
+
+#include "JobMarket/JobId.hpp"
+
+#include "Fragmentation/SetValues/Fragment.hpp"
+#include "Jobs/Grid/SamplingGrid.hpp"
+#include "Jobs/MPQCData.hpp"
+#include "Jobs/VMGData.hpp"
+
+/** This class uses SpecificFragmentController with functions to add specificly
+ * VMGJobs.
+ */
+class VMGFragmentController : public SpecificFragmentController
+{
+public:
+  VMGFragmentController(boost::asio::io_service &io_service) :
+    SpecificFragmentController(io_service)
+  {}
+  virtual ~VMGFragmentController()
+  {}
+
+  bool createLongRangeJobs(
+      const std::map<JobId_t, MPQCData> &fragmentData,
+      const SamplingGrid &full_sampled_grid,
+      const Fragment &full_fragment);
+  void getResults(std::map<JobId_t, VMGData> &fragmentData) {
+    SpecificFragmentController::getResults<VMGData>(fragmentData);
+  }
+};
+
+
+#endif /* VMGFRAGMENTCONTROLLER_HPP_ */
