Index: src/Actions/FragmentationAction/FragmentationAction.cpp
===================================================================
--- src/Actions/FragmentationAction/FragmentationAction.cpp	(revision 2ebfd7fbc13131bcb27311cc3aaaf95d4e0c3d4a)
+++ src/Actions/FragmentationAction/FragmentationAction.cpp	(revision 4a3df8e17f38d8cb32a05a2fe305e0a57f3a503a)
@@ -444,4 +444,5 @@
       ExportGraph_ToJobs exporter(TotalGraph, treatment, saturation, globalsaturationpositions);
       exporter.setLevel(params.level.get());
+      exporter.setMaximumMeshWidth(params.max_meshwidth.get());
       if (!exporter())
         return Action::failure;
Index: src/Actions/FragmentationAction/FragmentationAction.def
===================================================================
--- src/Actions/FragmentationAction/FragmentationAction.def	(revision 2ebfd7fbc13131bcb27311cc3aaaf95d4e0c3d4a)
+++ src/Actions/FragmentationAction/FragmentationAction.def	(revision 4a3df8e17f38d8cb32a05a2fe305e0a57f3a503a)
@@ -21,9 +21,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)(double)(int)(bool)(bool)(std::vector<std::string>)(unsigned int)(unsigned int)(bool)(bool)
-#define paramtokens ("fragment-molecule")("distance")("order")("DoSaturate")("ExcludeHydrogen")("output-types")("grid-level")("inter-order")("DoCyclesFull")("parse-state-files")
-#define paramdescriptions ("prefix of each fragment file")("distance in space up to which fragments are combined")("order of a discretization, dissection, ...")("do saturate dangling bonds with hydrogen")("whether to exclude hydrogen in the bond graph dissection or not")("type(s) of parsers that output fragment config files")("resolution of density sampling multigrid")("up to which order distinct fragments are combined")("always calculate (aromatic) rings fully, even beyond desired order")("whether to parse keysets, orderatsite, adjacency from state files")
-#define paramdefaults (PARAM_DEFAULT("BondFragment"))(PARAM_DEFAULT(3.))(PARAM_DEFAULT(3))(PARAM_DEFAULT(true))(PARAM_DEFAULT(true))(NOPARAM_DEFAULT)(PARAM_DEFAULT(5))(PARAM_DEFAULT(0))(PARAM_DEFAULT(false))(PARAM_DEFAULT(false))
-#define paramreferences (prefix)(distance)(order)(DoSaturation)(HowtoTreatHydrogen)(types)(level)(InterOrder)(DoCyclesFull)(ParseStateFiles)
+#define paramtypes (std::string)(double)(int)(bool)(bool)(std::vector<std::string>)(double)(unsigned int)(unsigned int)(bool)(bool)
+#define paramtokens ("fragment-molecule")("distance")("order")("DoSaturate")("ExcludeHydrogen")("output-types")("max-meshwidth")("grid-level")("inter-order")("DoCyclesFull")("parse-state-files")
+#define paramdescriptions ("prefix of each fragment file")("distance in space up to which fragments are combined")("order of a discretization, dissection, ...")("do saturate dangling bonds with hydrogen")("whether to exclude hydrogen in the bond graph dissection or not")("type(s) of parsers that output fragment config files")("maximum allowed mesh width, i.e. discrete points may be at most that far apart on the fragment grids")("resolution of density sampling multigrid")("up to which order distinct fragments are combined")("always calculate (aromatic) rings fully, even beyond desired order")("whether to parse keysets, orderatsite, adjacency from state files")
+#define paramdefaults (PARAM_DEFAULT("BondFragment"))(PARAM_DEFAULT(3.))(PARAM_DEFAULT(3))(PARAM_DEFAULT(true))(PARAM_DEFAULT(true))(NOPARAM_DEFAULT)(PARAM_DEFAULT(0.))(PARAM_DEFAULT(5))(PARAM_DEFAULT(0))(PARAM_DEFAULT(false))(PARAM_DEFAULT(false))
+#define paramreferences (prefix)(distance)(order)(DoSaturation)(HowtoTreatHydrogen)(types)(max_meshwidth)(level)(InterOrder)(DoCyclesFull)(ParseStateFiles)
 #define paramvalids \
 (DummyValidator< std::string >()) \
@@ -33,4 +33,5 @@
 (DummyValidator< bool >()) \
 (STLVectorValidator< std::vector<std::string> >(0, 10, ParserTypeValidator())) \
+(BoxLengthValidator()) \
 (RangeValidator< unsigned int >(1, 10)) \
 (DummyValidator< unsigned int >()) \
Index: src/Actions/FragmentationAction/FragmentationAutomationAction.cpp
===================================================================
--- src/Actions/FragmentationAction/FragmentationAutomationAction.cpp	(revision 2ebfd7fbc13131bcb27311cc3aaaf95d4e0c3d4a)
+++ src/Actions/FragmentationAction/FragmentationAutomationAction.cpp	(revision 4a3df8e17f38d8cb32a05a2fe305e0a57f3a503a)
@@ -66,4 +66,5 @@
 #include "Fragmentation/Automation/MPQCCommandFragmentController.hpp"
 #endif
+#include "Fragmentation/Exporters/ExportGraph_ToJobs.hpp"
 #include "Fragmentation/Summation/Containers/FragmentationChargeDensity.hpp"
 #include "Fragmentation/Summation/Containers/FragmentationLongRangeResults.hpp"
@@ -151,4 +152,19 @@
 }
 
+static void downsampleChargeData(
+    const std::map<JobId_t, MPQCData> &_shortrangedata,
+    const SamplingGridProperties &_domain,
+    std::map<JobId_t, MPQCData> &_shortrangedata_downsampled
+    )
+{
+  for (std::map<JobId_t, MPQCData>::const_iterator iter = _shortrangedata.begin();
+      iter != _shortrangedata.end(); ++iter) {
+    LOG(2, "INFO: Downsampling charge data from job " << iter->first);
+    MPQCData downsampled(_domain);
+    MPQCData::assignWithDownsampledGrid(downsampled, iter->second);
+    _shortrangedata_downsampled.insert( std::make_pair( iter->first, downsampled ) );
+  }
+}
+
 ActionState::ptr FragmentationFragmentationAutomationAction::performCall() {
   boost::asio::io_service io_service;
@@ -270,6 +286,9 @@
 
   // obtain combined charge density
+  std::map<JobId_t, MPQCData> shortrangedata_downsampled;
+  SamplingGridProperties domain(ExportGraph_ToJobs::getDomainGrid(params.level.get()));
+  downsampleChargeData(shortrangedata, domain, shortrangedata_downsampled);
   FragmentationChargeDensity summedChargeDensity(
-      shortrangedata,
+      shortrangedata_downsampled,
       FragmentJobQueue::getInstance().getKeySets());
   const std::vector<SamplingGrid> full_sample = summedChargeDensity.getFullSampledGrid();
Index: src/Actions/FragmentationAction/FragmentationAutomationAction.def
===================================================================
--- src/Actions/FragmentationAction/FragmentationAutomationAction.def	(revision 2ebfd7fbc13131bcb27311cc3aaaf95d4e0c3d4a)
+++ src/Actions/FragmentationAction/FragmentationAutomationAction.def	(revision 4a3df8e17f38d8cb32a05a2fe305e0a57f3a503a)
@@ -14,17 +14,19 @@
 #include "Parameters/Validators/Ops_Validator.hpp"
 #include "Parameters/Validators/RangeValidator.hpp"
+#include "Parameters/Validators/Specific/BoxLengthValidator.hpp"
 
 // i.e. there is an integer with variable name Z that can be found in
 // 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)(bool)(bool)(bool)(bool)
-#define paramtokens ("server-address")("server-port")("fragment-executable")("grid-level")("near-field-cells")("interpolation-degree")("DoLongrange")("DoValenceOnly")("DoPrintDebug")("DoSmearElectronicCharges")("UseImplicitCharges")
-#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")("whether the sampling uses only the valence electron and nuclei charge")("whether to print grids for debug visualization")("whether to smear out electronic charge distributions with bsplines or not")("whether to model any non-selected atoms by partial charges implicitly") 
-#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("0"))(PARAM_DEFAULT("0"))(PARAM_DEFAULT("0"))(PARAM_DEFAULT("0"))
-#define paramreferences (host)(port)(executable)(level)(near_field_cells)(interpolation_degree)(DoLongrange)(DoValenceOnly)(DoPrintDebug)(DoSmearCharges)(UseImplicitCharges)
+#define paramtypes (std::string)(std::string)(boost::filesystem::path)(double)(unsigned int)(unsigned int)(unsigned int)(bool)(bool)(bool)(bool)(bool)
+#define paramtokens ("server-address")("server-port")("fragment-executable")("max-meshwidth")("grid-level")("near-field-cells")("interpolation-degree")("DoLongrange")("DoValenceOnly")("DoPrintDebug")("DoSmearElectronicCharges")("UseImplicitCharges")
+#define paramdescriptions ("hostname of server")("controller port of server")("executable to launch on clients")("maximum allowed mesh width, i.e. discrete points may be at most that far apart on the fragment grids")("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")("whether the sampling uses only the valence electron and nuclei charge")("whether to print grids for debug visualization")("whether to smear out electronic charge distributions with bsplines or not")("whether to model any non-selected atoms by partial charges implicitly") 
+#define paramdefaults (PARAM_DEFAULT("127.0.0.1"))(NOPARAM_DEFAULT)(PARAM_DEFAULT("mpqc"))(PARAM_DEFAULT(0.))(PARAM_DEFAULT(5))(PARAM_DEFAULT(3))(PARAM_DEFAULT(3))(PARAM_DEFAULT("0"))(PARAM_DEFAULT("0"))(PARAM_DEFAULT("0"))(PARAM_DEFAULT("0"))(PARAM_DEFAULT("0"))
+#define paramreferences (host)(port)(executable)(max_meshwidth)(level)(near_field_cells)(interpolation_degree)(DoLongrange)(DoValenceOnly)(DoPrintDebug)(DoSmearCharges)(UseImplicitCharges)
 #define paramvalids \
 (DummyValidator< std::string >()) \
 (DummyValidator< std::string >()) \
 (DummyValidator< boost::filesystem::path >()) \
+(BoxLengthValidator()) \
 (RangeValidator< unsigned int >(1, 10)) \
 (RangeValidator< unsigned int >(1, 20)) \
