Index: src/Fragmentation/Automation/VMGDebugGridFragmentController.cpp
===================================================================
--- src/Fragmentation/Automation/VMGDebugGridFragmentController.cpp	(revision ee9018c3463e8d8c1eacc73f29fda8d4a292de41)
+++ src/Fragmentation/Automation/VMGDebugGridFragmentController.cpp	(revision f6c19d6c9eff8d0155c782c22a09f19969950170)
@@ -44,5 +44,6 @@
 
 bool VMGDebugGridFragmentController::createDebugJobs(
-    const std::vector<SamplingGrid> &full_sampled_grid)
+    const std::vector<SamplingGrid> &full_sampled_grid,
+    const bool _OpenBoundaryConditions)
 {
   std::vector<FragmentJob::ptr> jobs;
@@ -55,5 +56,5 @@
         << " gridpoints.");
     FragmentJob::ptr testJob(
-        new VMGDebugGridJob(next_id, *iter) );
+        new VMGDebugGridJob(next_id, *iter, _OpenBoundaryConditions) );
     jobs.push_back(testJob);
   }
Index: src/Fragmentation/Automation/VMGDebugGridFragmentController.hpp
===================================================================
--- src/Fragmentation/Automation/VMGDebugGridFragmentController.hpp	(revision ee9018c3463e8d8c1eacc73f29fda8d4a292de41)
+++ src/Fragmentation/Automation/VMGDebugGridFragmentController.hpp	(revision f6c19d6c9eff8d0155c782c22a09f19969950170)
@@ -41,5 +41,6 @@
 
   bool createDebugJobs(
-      const std::vector<SamplingGrid> &full_sampled_grid);
+      const std::vector<SamplingGrid> &full_sampled_grid,
+      const bool _OpenBoundaryConditions = false);
 
   // there are no results but server has empty string nonetheless
Index: src/Jobs/InterfaceVMGDebugGridJob.hpp
===================================================================
--- src/Jobs/InterfaceVMGDebugGridJob.hpp	(revision ee9018c3463e8d8c1eacc73f29fda8d4a292de41)
+++ src/Jobs/InterfaceVMGDebugGridJob.hpp	(revision f6c19d6c9eff8d0155c782c22a09f19969950170)
@@ -43,5 +43,5 @@
       vmg_float box_end,
       const int& near_field_cells,
-      int coarseningSteps=0,
+      int coarseningSteps=9,
       double alpha=1.6);
 
Index: src/Jobs/VMGDebugGridJob.cpp
===================================================================
--- src/Jobs/VMGDebugGridJob.cpp	(revision ee9018c3463e8d8c1eacc73f29fda8d4a292de41)
+++ src/Jobs/VMGDebugGridJob.cpp	(revision f6c19d6c9eff8d0155c782c22a09f19969950170)
@@ -50,18 +50,29 @@
 #include "comm/comm_mpi.hpp"
 #include "comm/domain_decomposition_mpi.hpp"
+#include "units/particle/comm_mpi_particle.hpp"
 #else
 #include "comm/comm_serial.hpp"
 #endif
+#include "grid/multigrid.hpp"
+//#include "grid/tempgrid.hpp"
+#include "level/stencils.hpp"
+#include "solver/givens.hpp"
+
+// periodic boundary conditions
 #include "cycles/cycle_cs_periodic.hpp"
 #include "discretization/discretization_poisson_fd.hpp"
-#include "grid/multigrid.hpp"
-//#include "grid/tempgrid.hpp"
 #include "level/level_operator_cs.hpp"
-#include "level/stencils.hpp"
 #include "smoother/gsrb_poisson_4.hpp"
-#include "solver/givens.hpp"
-//#include "solver/solver_regular.hpp"
 #include "solver/solver_singular.hpp"
-//#include "units/particle/comm_mpi_particle.hpp"
+// open boundary conditions
+#ifndef NDEBUG
+#include "cycles/cycle_fas_dirichlet_debug.hpp"
+#else
+#include "cycles/cycle_fas_dirichlet.hpp"
+#endif
+#include "discretization/discretization_poisson_fv.hpp"
+#include "level/level_operator_fas.hpp"
+#include "smoother/gsrb_poisson_2.hpp"
+#include "solver/solver_regular.hpp"
 
 #include "CodePatterns/MemDebug.hpp"
@@ -76,11 +87,14 @@
 VMGDebugGridJob::VMGDebugGridJob(
     const JobId_t _JobId,
-    const SamplingGrid &_density_grid) :
+    const SamplingGrid &_density_grid,
+    const bool _OpenBoundaryConditions) :
   FragmentJob(_JobId),
-  density_grid(_density_grid)
+  density_grid(_density_grid),
+  OpenBoundaryConditions(_OpenBoundaryConditions)
 {}
 
 VMGDebugGridJob::VMGDebugGridJob() :
-  FragmentJob(JobId::IllegalJob)
+  FragmentJob(JobId::IllegalJob),
+  OpenBoundaryConditions(false)
 {}
 
@@ -120,19 +134,22 @@
 void VMGDebugGridJob::InitVMG()
 {
-  // TODO: As a matter of fact should use open boundary conditions
-  const Boundary boundary(Periodic, Periodic, Periodic);
-
-  /*
-   * Choose multigrid components
-   */
+  Boundary *boundary= NULL;
+  if (OpenBoundaryConditions)
+    boundary = new Boundary(Open, Open, Open);
+  else
+    boundary = new Boundary(Periodic, Periodic, Periodic);
+
 #ifdef HAVE_MPI
-  new CommMPI(boundary, new DomainDecompositionMPI());
-#else
-  new CommSerial(boundary);
-#endif
-  new DiscretizationPoissonFD(4);
+  new Particle::CommMPI(*boundary, new DomainDecompositionMPI());
+#else
+  new CommSerial(*boundary);
+#endif
+  if (OpenBoundaryConditions)
+    new DiscretizationPoissonFV(2);
+  else
+    new DiscretizationPoissonFD(4);
   new VMGInterfaces::InterfaceVMGDebugGridJob(
       density_grid,
-      boundary,
+      *boundary,
       2,
       density_grid.level,
@@ -140,19 +157,30 @@
       density_grid.end[0]-density_grid.begin[0],
       5);
-  new LevelOperatorCS(Stencils::RestrictionFullWeight, Stencils::InterpolationTrilinear);
-  new Givens<SolverSingular>();
   const int cycle_type = 1; // V-type
-  new CycleCSPeriodic(cycle_type);
-  new GaussSeidelRBPoisson4();
-
-  /*
-   * Register required parameters.
-   * We don't actually want solve anything here
-   */
-  new ObjectStorage<int>("PRESMOOTHSTEPS", 1);
-  new ObjectStorage<int>("POSTSMOOTHSTEPS", 1);
-  new ObjectStorage<vmg_float>("PRECISION", 1.0e-0);
-  new ObjectStorage<int>("MAX_ITERATION", 1);
-  new ObjectStorage<int>("PARTICLE_NEAR_FIELD_CELLS", 3);
+  if (OpenBoundaryConditions) {
+    new LevelOperatorFAS(Stencils::RestrictionFullWeight, Stencils::Injection, Stencils::InterpolationTrilinear);
+    new Givens<SolverRegular>();
+#ifndef NDEBUG
+    new CycleFASDirichletDebug(cycle_type);
+#else
+    new CycleFASDirichlet(cycle_type);
+#endif
+    new GaussSeidelRBPoisson2();
+  } else {
+    new LevelOperatorCS(Stencils::RestrictionFullWeight, Stencils::InterpolationTrilinear);
+    new Givens<SolverSingular>();
+    new CycleCSPeriodic(cycle_type);
+    new GaussSeidelRBPoisson4();
+  }
+  delete boundary;
+
+  /*
+   * Register required parameters
+   */
+  new ObjectStorage<int>("PRESMOOTHSTEPS", 3);
+  new ObjectStorage<int>("POSTSMOOTHSTEPS", 3);
+  new ObjectStorage<vmg_float>("PRECISION", 1.0e-10);
+  new ObjectStorage<int>("MAX_ITERATION", 15);
+  new ObjectStorage<int>("PARTICLE_NEAR_FIELD_CELLS", 5);
   new ObjectStorage<int>("PARTICLE_INTERPOLATION_DEGREE", 3);
 
Index: src/Jobs/VMGDebugGridJob.hpp
===================================================================
--- src/Jobs/VMGDebugGridJob.hpp	(revision ee9018c3463e8d8c1eacc73f29fda8d4a292de41)
+++ src/Jobs/VMGDebugGridJob.hpp	(revision f6c19d6c9eff8d0155c782c22a09f19969950170)
@@ -37,7 +37,10 @@
    * @param _JobId id of the job
    * @param _density_grid sampled electron charge density from short-range solutions
+   * @param OpenBoundaryConditions states whether we have open (true) or periodic
+   *        (false) boundary conditions
    */
   VMGDebugGridJob(const JobId_t _JobId,
-      const SamplingGrid &density_grid);
+      const SamplingGrid &density_grid,
+      const bool _OpenBoundaryConditions = false);
   virtual ~VMGDebugGridJob();
 
@@ -50,4 +53,6 @@
   //!> sampled density required as input
   const SamplingGrid density_grid;
+  //!> states whether we have open (true) or periodic (false) boundary conditions
+  const bool OpenBoundaryConditions;
 
 private:
Index: src/Jobs/VMGJob.hpp
===================================================================
--- src/Jobs/VMGJob.hpp	(revision ee9018c3463e8d8c1eacc73f29fda8d4a292de41)
+++ src/Jobs/VMGJob.hpp	(revision f6c19d6c9eff8d0155c782c22a09f19969950170)
@@ -133,4 +133,5 @@
     ar & const_cast< bool &>(DoImportParticles);
     ar & const_cast< bool &>(DoPrintDebug);
+    ar & const_cast< bool &>(OpenBoundaryConditions);
     ar & returndata;
   }
