introduced a "Data" pointer structure to avoid copying arrays