diff --git a/src/util/sparsegrid_util_common.hpp b/src/util/sparsegrid_util_common.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..2af67477d4d118370f9ea558f42a20d7810b23aa
--- /dev/null
+++ b/src/util/sparsegrid_util_common.hpp
@@ -0,0 +1,82 @@
+#ifndef SPARSEGRID_UTIL_COMMON
+#define SPARSEGRID_UTIL_COMMON
+
+template<typename base>
+struct sparse_grid_bck_wrapper_impl
+{
+    base & b;
+
+    typedef typename base::value_type bt_type;
+
+    sparse_grid_bck_wrapper_impl(base & b)
+    :b(b)
+    {}
+
+    auto operator[](int i) -> decltype(b[0])
+    {
+        b[0];
+    }
+
+    template<typename T>
+    sparse_grid_bck_wrapper_impl<base> & operator=(T c)
+    {
+        for (int i = 0; i < b.size() ; i++)
+        {
+            b[i] = c;
+        }
+
+        return *this;
+    }
+
+    operator bt_type() const
+    {
+        return b[0];
+    }
+};
+
+// openfpm::detail::multi_array::sub_array_openfpm<T,N1,vmpl>
+
+template<typename T,typename vmpl>
+struct sparse_grid_bck_wrapper_impl<openfpm::detail::multi_array::sub_array_openfpm<T, 1, vmpl>>
+{
+    openfpm::detail::multi_array::sub_array_openfpm<T, 1, vmpl > b;
+
+    
+    sparse_grid_bck_wrapper_impl(openfpm::detail::multi_array::sub_array_openfpm<T, 1, vmpl > b)
+    :b(b)
+    {}
+
+    auto operator[](int i) -> decltype(b[i][0])
+    {
+        return b[i][0];
+    }
+
+    auto operator[](int i) const -> decltype(b[i][0])
+    {
+        return b[i][0];
+    }
+};
+
+template<typename chunk_def>
+struct sparse_grid_bck_value
+{
+	chunk_def bck;
+
+	sparse_grid_bck_value(chunk_def bck)
+	:bck(bck)
+	{}
+
+	template<unsigned int p>
+	auto get() -> sparse_grid_bck_wrapper_impl<typename std::remove_reference<decltype(bck.template get<p>())>::type>
+	{
+		return sparse_grid_bck_wrapper_impl<typename std::remove_reference<decltype(bck.template get<p>())>::type>(bck.template get<p>());
+	}
+
+	template<unsigned int p>
+	auto get() const -> sparse_grid_bck_wrapper_impl<typename std::remove_reference<decltype(bck.template get<p>())>::type>
+	{
+		return sparse_grid_bck_wrapper_impl<typename std::remove_reference<decltype(bck.template get<p>())>::type>(bck.template get<p>());
+	}
+};
+
+#endif