diff --git a/src/domain_decomposition/MakeBlockDataInitFunction.h b/src/domain_decomposition/MakeBlockDataInitFunction.h
index c6446b919b5a650cf67c7ae474766950decbe3a5..de41cd696de30b312f47883cbc59987a3e6b71d2 100644
--- a/src/domain_decomposition/MakeBlockDataInitFunction.h
+++ b/src/domain_decomposition/MakeBlockDataInitFunction.h
@@ -34,119 +34,19 @@ namespace domain_decomposition {
 /// \cond internal
 namespace internal
 {
-   template<class T>
-   T * newFunc( const IBlock* const ) {
-      return new T();
+   template<class T, typename... Args>
+   T * newFunc( const IBlock* const, Args&... args ) {
+      return new T(args...);
    }
-
-   template<class T, class P1>
-   T * newFunc( const IBlock* const , const P1 & p1 ) {
-      return new T(p1);
-   }
-
-   template<class T, class P1, class P2>
-   T * newFunc( const IBlock* const , const P1 & p1, const P2 & p2 ) {
-      return new T(p1, p2);
-   }
-
-   template<class T, class P1, class P2, class P3>
-   T * newFunc( const IBlock* const , const P1 & p1, const P2 & p2, const P3 & p3 ) {
-      return new T(p1, p2, p3);
-   }
-
-   template<class T, class P1, class P2, class P3, class P4>
-   T * newFunc( const IBlock* const , const P1 & p1, const P2 & p2, const P3 & p3, const P4 & p4 ) {
-      return new T(p1, p2, p3, p4);
-   }
-
-   template<class T, class P1, class P2, class P3, class P4, class P5>
-   T * newFunc( const IBlock* const , const P1 & p1, const P2 & p2, const P3 & p3, const P4 & p4, const P5 & p5 ) {
-      return new T(p1, p2, p3, p4, p5);
-   }
-
-   template<class T, class P1, class P2, class P3, class P4, class P5, class P6>
-   T * newFunc( const IBlock* const ,  const P1 & p1, const P2 & p2, const P3 & p3, const P4 & p4, const P5 & p5, const P6 & p6 ) {
-      return new T(p1, p2, p3, p4, p5, p6);
-   }
-
-   template<class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7>
-   T * newFunc( const IBlock* const , const P1 & p1, const P2 & p2, const P3 & p3, const P4 & p4, const P5 & p5, const P6 & p6, const P7 & p7 ) {
-      return new T(p1, p2, p3, p4, p5, p6,p7);
-   }
-
-   template<class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8>
-   T * newFunc( const IBlock* const , const P1 & p1, const P2 & p2, const P3 & p3, const P4 & p4, const P5 & p5, const P6 & p6, const P7 & p7, const P8 & p8 ) {
-      return new T(p1, p2, p3, p4, p5, p6, p7,p8 );
-   }
-
-   template<class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9>
-   T * newFunc( const IBlock* const , const P1 & p1, const P2 & p2, const P3 & p3, const P4 & p4, const P5 & p5, const P6 & p6, const P7 & p7, const P8 & p8, const P9 & p9 ) {
-      return new T(p1, p2, p3, p4, p5, p6, p7,p8, p9 );
-   }
-
 } // namespace internal
 /// \endcond
 
 
 
-template<class T>
-std::function< T* ( const IBlock* const block ) >
-makeBlockDataInitFunction() {
-   return std::bind( internal::newFunc<T>,  std::placeholders::_1);
-}
-
-template<class T, class P1>
-std::function< T* ( const IBlock* const block ) >
-makeBlockDataInitFunction(const P1 & p1) {
-   return std::bind( internal::newFunc<T,P1>,  std::placeholders::_1,p1);
-}
-
-template<class T, class P1, class P2>
-std::function< T* ( const IBlock* const block ) >
-makeBlockDataInitFunction(const P1 & p1, const P2 & p2) {
-   return std::bind( internal::newFunc<T,P1,P2>,  std::placeholders::_1,p1,p2);
-}
-
-template<class T, class P1, class P2, class P3>
-std::function< T* ( const IBlock* const block ) >
-makeBlockDataInitFunction(const P1 & p1, const P2 & p2, const P3 & p3) {
-   return std::bind( internal::newFunc<T,P1,P2,P3>,  std::placeholders::_1,p1,p2,p3);
-}
-
-template<class T, class P1, class P2, class P3, class P4>
-std::function< T* ( const IBlock* const block ) >
-makeBlockDataInitFunction(const P1 & p1, const P2 & p2, const P3 & p3, const P4 & p4) {
-   return std::bind( internal::newFunc<T,P1,P2,P3,P4>,  std::placeholders::_1,p1,p2,p3,p4);
-}
-
-template<class T, class P1, class P2, class P3, class P4, class P5>
-std::function< T* ( const IBlock* const block ) >
-makeBlockDataInitFunction(const P1 & p1, const P2 & p2, const P3 & p3, const P4 & p4, const P5 & p5) {
-   return std::bind( internal::newFunc<T,P1,P2,P3,P4,P5>,  std::placeholders::_1,p1,p2,p3,p4,p5);
-}
-
-template<class T, class P1, class P2, class P3, class P4, class P5, class P6>
-std::function< T* ( const IBlock* const block ) >
-makeBlockDataInitFunction(const P1 & p1, const P2 & p2, const P3 & p3, const P4 & p4, const P5 & p5, const P6 & p6) {
-   return std::bind( internal::newFunc<T,P1,P2,P3,P4,P5,P6>,  std::placeholders::_1,p1,p2,p3,p4,p5,p6);
-}
-
-template<class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7>
-std::function< T* ( const IBlock* const block ) >
-makeBlockDataInitFunction(const P1 & p1, const P2 & p2, const P3 & p3, const P4 & p4, const P5 & p5, const P6 & p6, const P7 & p7) {
-   return std::bind( internal::newFunc<T,P1,P2,P3,P4,P5,P6,P7>,  std::placeholders::_1,p1,p2,p3,p4,p5,p6,p7);
-}
-
-template<class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8>
-std::function< T* ( const IBlock* const block ) >
-makeBlockDataInitFunction(const P1 & p1, const P2 & p2, const P3 & p3, const P4 & p4, const P5 & p5, const P6 & p6, const P7 & p7, const P8 & p8) {
-   return std::bind( internal::newFunc<T,P1,P2,P3,P4,P5,P6,P7,P8>,  std::placeholders::_1,p1,p2,p3,p4,p5,p6,p7,p8);
-}
-
-template<class T, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8, class P9>
+template<class T, typename... Args>
 std::function< T* ( const IBlock* const block ) >
-makeBlockDataInitFunction(const P1 & p1, const P2 & p2, const P3 & p3, const P4 & p4, const P5 & p5, const P6 & p6, const P7 & p7, const P8 & p8, const P9 & p9) {
-   return std::bind( internal::newFunc<T,P1,P2,P3,P4,P5,P6,P7,P8,P9>,  std::placeholders::_1,p1,p2,p3,p4,p5,p6,p7,p8,p9);
+makeBlockDataInitFunction(Args&&... args) {
+   return std::bind( internal::newFunc<T,Args...>, std::placeholders::_1, std::forward<Args>(args)... );
 }