diff --git a/src/TNL/Functions/MeshFunction.h b/src/TNL/Functions/MeshFunction.h
index 32d54ec2139a05e7e2456fe9436b53d1801b8ffe..9d67808e1ec2f5b827bc346fe531841195ffee57 100644
--- a/src/TNL/Functions/MeshFunction.h
+++ b/src/TNL/Functions/MeshFunction.h
@@ -163,6 +163,16 @@ class MeshFunction :
 
       using Object::boundLoad;
 
+      DistributedMeshSynchronizerType& getSynchronizer()
+      {
+         return this->synchronizer;
+      }
+
+      const DistributedMeshSynchronizerType& getSynchronizer() const
+      {
+         return this->synchronizer;
+      }
+
       template< typename CommunicatorType,
                 typename PeriodicBoundariesMaskType = MeshFunction< Mesh, MeshEntityDimension, bool > >
       void synchronize( bool withPeriodicBoundaryConditions = false,
@@ -171,8 +181,9 @@ class MeshFunction :
 
    protected:
 
-      //DistributedMeshSynchronizerType synchronizer;
-      Meshes::DistributedMeshes::DistributedMeshSynchronizer< Functions::MeshFunction< MeshType, MeshEntityDimension, RealType > > synchronizer;
+      // TODO: synchronizer should not be part of the mesh function - the way of synchronization
+      // depends rather on algorithm/method/scheme in hand than on data
+      DistributedMeshSynchronizerType synchronizer;
 
       MeshPointer meshPointer;
 
@@ -182,7 +193,6 @@ class MeshFunction :
 
    private:
       void setupSynchronizer( DistributedMeshType *distributedMesh );
-   
 };
 
 template< typename Mesh,
diff --git a/src/TNL/Meshes/DistributedMeshes/DistributedGridSynchronizer.h b/src/TNL/Meshes/DistributedMeshes/DistributedGridSynchronizer.h
index 3ca8cc5f3e6d34b024106cbe3e7c356758762b05..401d33bdd47ac649f7274a7a1a86b3c51be58bf3 100644
--- a/src/TNL/Meshes/DistributedMeshes/DistributedGridSynchronizer.h
+++ b/src/TNL/Meshes/DistributedMeshes/DistributedGridSynchronizer.h
@@ -66,6 +66,11 @@ class DistributedMeshSynchronizer< Functions::MeshFunction< Grid< MeshDimension,
          setDistributedGrid( distributedGrid );
       };
 
+      void setPeriodicBoundariesCopyDirection( const PeriodicBoundariesCopyDirection dir )
+      {
+         this->periodicBoundariesCopyDirection = dir;
+      }
+
       void setDistributedGrid( DistributedGridType *distributedGrid )
       {
          isSet = true;
diff --git a/src/UnitTests/Meshes/DistributedMeshes/DistributedGridTest_1D.cpp b/src/UnitTests/Meshes/DistributedMeshes/DistributedGridTest_1D.cpp
index fca8bb8cff9f3968cb97f9674da3e4f8da2f17f0..3d90a33701d54b840b8c784afec6235d81e73746 100644
--- a/src/UnitTests/Meshes/DistributedMeshes/DistributedGridTest_1D.cpp
+++ b/src/UnitTests/Meshes/DistributedMeshes/DistributedGridTest_1D.cpp
@@ -256,6 +256,8 @@ TEST_F(DistributedGridTest_1D, SynchronizePeriodicNeighborsWithoutMask )
    setDof_1D( dof, -rank-1 );
    maskDofs.setValue( true );
    constFunctionEvaluator.evaluateAllEntities( meshFunctionPtr, constFunctionPtr );
+   using Synchronizer = decltype( meshFunctionPtr->getSynchronizer() );
+   meshFunctionPtr->getSynchronizer().setPeriodicBoundariesCopyDirection( Synchronizer::OverlapToBoundary );
    meshFunctionPtr->template synchronize<CommunicatorType>( true );
 
    if( rank == 0 )