diff --git a/tests/BasicLbmScenarios/SimDomain.hpp b/tests/BasicLbmScenarios/SimDomain.hpp
index 508adb9d38aa80e6ae1e71be9f6bab82b20fc56c..105e5d7b971007872db52c0c76c9f01555fbbe12 100644
--- a/tests/BasicLbmScenarios/SimDomain.hpp
+++ b/tests/BasicLbmScenarios/SimDomain.hpp
@@ -70,7 +70,7 @@ struct SimDomain
       const BlockDataID uId;
    } gpuFields;
 
-   GpuCommScheme commGpu;
+   std::unique_ptr< GpuCommScheme > commGpu;
 
    void initFromFields(const Vector3< real_t > force)
    {
@@ -121,7 +121,7 @@ struct SimDomain
    void syncGhostLayers()
    {
       // WALBERLA_GPU_CHECK(gpuPeekAtLastError());
-      commGpu();
+      (*commGpu)();
    }
 
    void fields2host()
@@ -242,14 +242,13 @@ struct SimDomainBuilder
       const BlockDataID rhoIdGpu  = gpu::addGPUFieldToStorage< ScalarField_T >(sbfs, rhoId, "rho_gpu");
       const BlockDataID uIdGpu    = gpu::addGPUFieldToStorage< VectorField_T >(sbfs, uId, "u_gpu");
 
-      GpuCommScheme commGpu{ sbfs };
+      auto commGpu = std::make_unique< GpuCommScheme >( sbfs );
       auto gpuPdfsPackInfo = std::make_shared< GpuPdfsPackInfo >(pdfsIdGpu);
-      commGpu.addPackInfo(gpuPdfsPackInfo);
+      commGpu->addPackInfo(gpuPdfsPackInfo);
       // commCpu.addPackInfo(gpuPdfsPackInfo);
 #endif
 
-      return
-      {
+      return {
          .blocks = sbfs, //
          .cpuFields = { //
             .pdfsId = pdfsId,
@@ -264,7 +263,7 @@ struct SimDomainBuilder
             .rhoId = rhoIdGpu,
             .uId = uIdGpu
          },
-         .commGpu = commGpu
+         .commGpu = std::move(commGpu)
 #endif
       };
    }