Index: src/Jobs/VMGJob.cpp
===================================================================
--- src/Jobs/VMGJob.cpp	(revision 1b01e934ca04bd44526caf31e00f9a39f482fe0c)
+++ src/Jobs/VMGJob.cpp	(revision e089fbaabf7b14c1e7537a12eb9d4165c7c20822)
@@ -90,4 +90,20 @@
   interpolation_degree(_interpolation_degree),
   returndata(static_cast<const SamplingGridProperties &>(_density_grid)),
+  particles()
+{}
+
+VMGJob::VMGJob() :
+  FragmentJob(JobId::IllegalJob),
+  near_field_cells(3),
+  interpolation_degree(3),
+  particles()
+{}
+
+VMGJob::~VMGJob()
+{
+}
+
+
+VMGJob::particle_arrays::particle_arrays() :
   num_particles(0),
   f(NULL),
@@ -97,16 +113,5 @@
 {}
 
-VMGJob::VMGJob() :
-  FragmentJob(JobId::IllegalJob),
-  near_field_cells(3),
-  interpolation_degree(3),
-  num_particles(0),
-  f(NULL),
-  x(NULL),
-  p(NULL),
-  q(NULL)
-{}
-
-VMGJob::~VMGJob()
+VMGJob::particle_arrays::~particle_arrays()
 {
   delete[] f;
@@ -116,11 +121,16 @@
 }
 
-void VMGJob::InitVMGArrays()
-{
-  num_particles = particle_charges.size();
+void VMGJob::particle_arrays::init(const size_t _num_particles)
+{
+  num_particles = _num_particles;
   f = new double[num_particles*3];
   x = new double[num_particles*3];
   p = new double[num_particles];
   q = new double[num_particles];
+}
+
+void VMGJob::InitVMGArrays()
+{
+  particles.init(particle_charges.size());
 
   {
@@ -130,9 +140,9 @@
       for (std::vector< double >::const_iterator positer = (*iter).begin();
           positer != (*iter).end(); ++positer) {
-        f[index] = 0.;
-        x[index++] = *positer;
+        particles.f[index] = 0.;
+        particles.x[index++] = *positer;
       }
     }
-    ASSERT( index == num_particles*3,
+    ASSERT( index == particles.num_particles*3,
         "VMGJob::VMGJob() - too many particles or components in particle_positions.");
   }
@@ -141,8 +151,8 @@
     for (std::vector< double >::const_iterator iter = particle_charges.begin();
         iter != particle_charges.end(); ++iter) {
-      p[index] = 0.;
-      q[index++] = *iter;
+      particles.p[index] = 0.;
+      particles.q[index++] = *iter;
     }
-    ASSERT( index == num_particles,
+    ASSERT( index == particles.num_particles,
         "VMGJob::VMGJob() - too many charges in particle_charges.");
   }
@@ -226,9 +236,9 @@
   InitVMGArrays();
   // then initialize as objects with VMG's storage
-  new ObjectStorage<vmg_float*>("PARTICLE_POS_ARRAY", x);
-  new ObjectStorage<vmg_float*>("PARTICLE_CHARGE_ARRAY", q);
-  new ObjectStorage<vmg_float*>("PARTICLE_POTENTIAL_ARRAY", p);
-  new ObjectStorage<vmg_float*>("PARTICLE_FIELD_ARRAY", f);
-  new ObjectStorage<vmg_int>("PARTICLE_NUM_LOCAL", num_particles);
+  new ObjectStorage<vmg_float*>("PARTICLE_POS_ARRAY", particles.x);
+  new ObjectStorage<vmg_float*>("PARTICLE_CHARGE_ARRAY", particles.q);
+  new ObjectStorage<vmg_float*>("PARTICLE_POTENTIAL_ARRAY", particles.p);
+  new ObjectStorage<vmg_float*>("PARTICLE_FIELD_ARRAY", particles.f);
+  new ObjectStorage<vmg_int>("PARTICLE_NUM_LOCAL", particles.num_particles);
 
   /*
Index: src/Jobs/VMGJob.hpp
===================================================================
--- src/Jobs/VMGJob.hpp	(revision 1b01e934ca04bd44526caf31e00f9a39f482fe0c)
+++ src/Jobs/VMGJob.hpp	(revision e089fbaabf7b14c1e7537a12eb9d4165c7c20822)
@@ -75,14 +75,32 @@
   VMGData returndata;
 
-  //!> number of particles
-  size_t num_particles;
-  //!> forces array
-  double *f;
-  //!> position array
-  double *x;
-  //!> potential array
-  double *p;
-  //!> charge array
-  double *q;
+  /** This structure stores particle values per particle.
+   *
+   * \note This structure contains temporary information needed during solving
+   * with VMG.
+   * \warning It is specifically not serialized!
+   *
+   */
+  struct particle_arrays {
+    particle_arrays();
+    ~particle_arrays();
+
+    /** Initializes arrays.
+     *
+     * @param _num_particles size of array per dimension
+     */
+    void init(const size_t _num_particles);
+
+    //!> number of particles
+    size_t num_particles;
+    //!> forces array
+    double *f;
+    //!> position array
+    double *x;
+    //!> potential array
+    double *p;
+    //!> charge array
+    double *q;
+  } particles;
 
 private:
