Index: src/Actions/FragmentationAction/FragmentationAutomationAction.cpp
===================================================================
--- src/Actions/FragmentationAction/FragmentationAutomationAction.cpp	(revision 53c579a3b96b431c878643036ac24879b8bfe2bb)
+++ src/Actions/FragmentationAction/FragmentationAutomationAction.cpp	(revision 6ff62c8bb90891ea66dfc4882a5f7298de44ba0c)
@@ -118,5 +118,7 @@
     // Phase Two: add MPQCJobs and send
     const size_t NoJobs = mpqccontroller.addJobsFromQueue(
-        params.DoLongrange.get() ? MPQCData::DoSampleDensity : MPQCData::DontSampleDensity);
+        params.DoLongrange.get() ? MPQCData::DoSampleDensity : MPQCData::DontSampleDensity,
+        params.DoValenceOnly.get() ? MPQCData::DoSampleValenceOnly : MPQCData::DontSampleValenceOnly
+        );
     LOG(1, "INFO: Added " << NoJobs << " from FragmentJobsQueue.");
     mpqccontroller.run();
@@ -160,5 +162,6 @@
         full_sample,
         near_field_cells,
-        interpolation_degree))
+        interpolation_degree,
+        params.DoValenceOnly.get() ? MPQCData::DoSampleValenceOnly : MPQCData::DontSampleValenceOnly))
       // can't use the summed up fragment due to saturation hydrogens
 //      summedChargeDensity.getFragment(),
Index: src/Actions/FragmentationAction/FragmentationAutomationAction.def
===================================================================
--- src/Actions/FragmentationAction/FragmentationAutomationAction.def	(revision 53c579a3b96b431c878643036ac24879b8bfe2bb)
+++ src/Actions/FragmentationAction/FragmentationAutomationAction.def	(revision 6ff62c8bb90891ea66dfc4882a5f7298de44ba0c)
@@ -18,9 +18,9 @@
 // ValueStorage by the token "Z" -> first column: int, Z, "Z"
 // "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value
-#define paramtypes (std::string)(std::string)(boost::filesystem::path)(unsigned int)(unsigned int)(unsigned int)(bool)(boost::filesystem::path)
-#define paramtokens ("server-address")("server-port")("fragment-executable")("grid-level")("near-field-cells")("interpolation-degree")("DoLongrange")("fragment-resultfile")
-#define paramdescriptions ("hostname of server")("controller port of server")("executable to launch on clients")("resolution of multigrid")("number of cells used in smearing out core charge")("interpolation degree for getting the nuclei potential from the grid")("whether to calculate long-range contributions")("parse fragment results from the given file")
-#define paramdefaults (PARAM_DEFAULT("127.0.0.1"))(NOPARAM_DEFAULT)(PARAM_DEFAULT("mpqc"))(PARAM_DEFAULT(5))(PARAM_DEFAULT(3))(PARAM_DEFAULT(3))(PARAM_DEFAULT("0"))(PARAM_DEFAULT(""))
-#define paramreferences (host)(port)(executable)(level)(near_field_cells)(interpolation_degree)(DoLongrange)(resultsfile)
+#define paramtypes (std::string)(std::string)(boost::filesystem::path)(unsigned int)(unsigned int)(unsigned int)(bool)(boost::filesystem::path)(bool)
+#define paramtokens ("server-address")("server-port")("fragment-executable")("grid-level")("near-field-cells")("interpolation-degree")("DoLongrange")("fragment-resultfile")("DoValenceOnly")
+#define paramdescriptions ("hostname of server")("controller port of server")("executable to launch on clients")("resolution of multigrid")("number of cells used in smearing out core charge")("interpolation degree for getting the nuclei potential from the grid")("whether to calculate long-range contributions")("parse fragment results from the given file")("whether the sampling uses only the valence electron and nuclei charge") 
+#define paramdefaults (PARAM_DEFAULT("127.0.0.1"))(NOPARAM_DEFAULT)(PARAM_DEFAULT("mpqc"))(PARAM_DEFAULT(5))(PARAM_DEFAULT(3))(PARAM_DEFAULT(3))(PARAM_DEFAULT("0"))(PARAM_DEFAULT(""))(PARAM_DEFAULT("0"))
+#define paramreferences (host)(port)(executable)(level)(near_field_cells)(interpolation_degree)(DoLongrange)(resultsfile)(DoValenceOnly)
 #define paramvalids \
 (DummyValidator< std::string >()) \
@@ -31,5 +31,6 @@
 (RangeValidator< unsigned int >(1, 10)) \
 (DummyValidator< bool >()) \
-(DummyValidator< boost::filesystem::path >())
+(DummyValidator< boost::filesystem::path >()) \
+(DummyValidator< bool >())
 
 #undef statetypes
Index: src/Fragmentation/Automation/MPQCFragmentController.cpp
===================================================================
--- src/Fragmentation/Automation/MPQCFragmentController.cpp	(revision 53c579a3b96b431c878643036ac24879b8bfe2bb)
+++ src/Fragmentation/Automation/MPQCFragmentController.cpp	(revision 6ff62c8bb90891ea66dfc4882a5f7298de44ba0c)
@@ -51,5 +51,8 @@
 #include "World.hpp"
 
-bool MPQCFragmentController::addJobsFromQueue(const MPQCData::DoLongrange_t _DoLongrange)
+bool MPQCFragmentController::addJobsFromQueue(
+    const MPQCData::DoLongrange_t _DoLongrange,
+    const MPQCData::DoValenceOnly_t _DoValenceOnly
+    )
 {
   // give them all valid ids
@@ -60,4 +63,5 @@
     MPQCJob *job = boost::polymorphic_downcast<MPQCJob *>(jobiter->get());
     job->DoLongrange = _DoLongrange;
+    job->DoValenceOnly = _DoValenceOnly;
     changeJobId((*jobiter), getAvailableId());
   }
Index: src/Fragmentation/Automation/MPQCFragmentController.hpp
===================================================================
--- src/Fragmentation/Automation/MPQCFragmentController.hpp	(revision 53c579a3b96b431c878643036ac24879b8bfe2bb)
+++ src/Fragmentation/Automation/MPQCFragmentController.hpp	(revision 6ff62c8bb90891ea66dfc4882a5f7298de44ba0c)
@@ -42,7 +42,11 @@
    *
    * \param _DoSampleDensity whether to actually sample the resulting electronic density
+   * \param _DoValenceOnly whether to sample just the valence or the total elctron and nuclei density
    * \return true - jobs obtained, false - queue empty
    */
-  bool addJobsFromQueue(const MPQCData::DoLongrange_t _DoLongrange);
+  bool addJobsFromQueue(
+      const MPQCData::DoLongrange_t _DoLongrange,
+      const MPQCData::DoValenceOnly_t _DoValenceOnly
+      );
 
   /** Get results map of calculated jobs.
Index: src/Fragmentation/Automation/VMGFragmentController.cpp
===================================================================
--- src/Fragmentation/Automation/VMGFragmentController.cpp	(revision 53c579a3b96b431c878643036ac24879b8bfe2bb)
+++ src/Fragmentation/Automation/VMGFragmentController.cpp	(revision 6ff62c8bb90891ea66dfc4882a5f7298de44ba0c)
@@ -48,9 +48,28 @@
 #include "World.hpp"
 
+/** Helper function for the number of core electrons of a given element \a z.
+ *
+ * \param z atomic number of element
+ * \return number of core electrons for this element
+ */
+static int getCoreElectrons(const int z)
+{
+  int n=0;
+  if (z > 2) n += 2;
+  if (z > 10) n += 8;
+  if (z > 18) n += 8;
+  if (z > 30) n += 10;
+  if (z > 36) n += 8;
+  if (z > 48) n += 10;
+  if (z > 54) n += 8;
+  return n;
+}
+
 bool VMGFragmentController::createLongRangeJobs(
     const std::map<JobId_t, MPQCData> &fragmentData,
     const std::vector<SamplingGrid> &full_sampled_grid,
     const size_t near_field_cells,
-    const size_t interpolation_degree)
+    const size_t interpolation_degree,
+    const MPQCData::DoValenceOnly_t _DoValenceOnly)
 {
   std::vector<FragmentJob::ptr> jobs;
@@ -82,5 +101,9 @@
       for (size_t i=0;i<3;++i) position[i] = pos[i]/AtomicLengthToAngstroem;
       positions.push_back(position);
-      charges.push_back((double)((*iter)->getElement().getAtomicNumber()));
+      int charge = (*iter)->getElement().getAtomicNumber();
+      // subtract core electron charge from nuclei charge if only valence sampled
+      if (_DoValenceOnly == MPQCData::DoSampleValenceOnly)
+        charge -= getCoreElectrons(charge);
+      charges.push_back((double)charge);
     }
   }
Index: src/Fragmentation/Automation/VMGFragmentController.hpp
===================================================================
--- src/Fragmentation/Automation/VMGFragmentController.hpp	(revision 53c579a3b96b431c878643036ac24879b8bfe2bb)
+++ src/Fragmentation/Automation/VMGFragmentController.hpp	(revision 6ff62c8bb90891ea66dfc4882a5f7298de44ba0c)
@@ -39,9 +39,23 @@
   {}
 
+  /** Creates the long range jobs from finished short-range jobs.
+   *
+   * \param fragmentData finished short-range results
+   * \param full_sampled_grid sampled electron densities from finished short-range jobs
+   * \param near_field_cells radius of b-splines for interpolation charges onto grid
+   * \param interpolation_degree interpolation degree for newton interpolation from grid
+   * \param _DoValenceOnly whether to neglect core electron and nuclei charges
+   */
   bool createLongRangeJobs(
       const std::map<JobId_t, MPQCData> &fragmentData,
       const std::vector<SamplingGrid> &full_sampled_grid,
       const size_t near_field_cells,
-      const size_t interpolation_degree);
+      const size_t interpolation_degree,
+      const MPQCData::DoValenceOnly_t _DoValenceOnly);
+
+  /** Get results of finished long-range jobs.
+   *
+   * \param fragmentData contains results on return
+   */
   void getResults(std::map<JobId_t, VMGData> &fragmentData) {
     SpecificFragmentController::getResults<VMGData>(fragmentData);
Index: src/Fragmentation/Summation/Containers/MPQCData.cpp
===================================================================
--- src/Fragmentation/Summation/Containers/MPQCData.cpp	(revision 53c579a3b96b431c878643036ac24879b8bfe2bb)
+++ src/Fragmentation/Summation/Containers/MPQCData.cpp	(revision 6ff62c8bb90891ea66dfc4882a5f7298de44ba0c)
@@ -45,9 +45,11 @@
 MPQCData::MPQCData(const SamplingGridProperties &_props) :
   DoLongrange(DontSampleDensity),
+  DoValenceOnly(DoSampleValenceOnly),
   sampled_grid(_props)
 {}
 
 MPQCData::MPQCData() :
-  DoLongrange(DontSampleDensity)
+  DoLongrange(DontSampleDensity),
+  DoValenceOnly(DoValenceOnly)
 {}
 
Index: src/Fragmentation/Summation/Containers/MPQCData.hpp
===================================================================
--- src/Fragmentation/Summation/Containers/MPQCData.hpp	(revision 53c579a3b96b431c878643036ac24879b8bfe2bb)
+++ src/Fragmentation/Summation/Containers/MPQCData.hpp	(revision 6ff62c8bb90891ea66dfc4882a5f7298de44ba0c)
@@ -86,4 +86,11 @@
   DoLongrange_t DoLongrange;
 
+  //!> whether to sample just the valence or the total electron and nuclei density
+  enum DoValenceOnly_t {
+    DontSampleValenceOnly=0,
+    DoSampleValenceOnly=1
+  };
+  DoValenceOnly_t DoValenceOnly;
+
   /// Density
   SamplingGrid sampled_grid;
@@ -126,4 +133,6 @@
     ar & sampled_grid;
     ar & DoLongrange;
+    if (version > 0)
+      ar & DoValenceOnly;
     ar & positions;
     ar & charges;
@@ -137,4 +146,6 @@
 };
 
+BOOST_CLASS_VERSION(MPQCData, 1)
+
 std::ostream & operator<<(std::ostream &ost, const MPQCData &data);
 
Index: src/Jobs/MPQCJob.hpp
===================================================================
--- src/Jobs/MPQCJob.hpp	(revision 53c579a3b96b431c878643036ac24879b8bfe2bb)
+++ src/Jobs/MPQCJob.hpp	(revision 6ff62c8bb90891ea66dfc4882a5f7298de44ba0c)
@@ -43,4 +43,7 @@
   MPQCData::DoLongrange_t DoLongrange;
 
+  //!> whether to sample just the valence or the total electron and nuclei density
+  MPQCData::DoValenceOnly_t DoValenceOnly;
+
 private:
   //!> contents of inputfile
@@ -61,4 +64,5 @@
     ar & boost::serialization::base_object<FragmentJob>(*this);
     ar & DoLongrange;
+    ar & DoValenceOnly;
     ar & const_cast<std::string &>(inputfile);
     ar & const_cast<SamplingGridProperties &>(grid);
