reimplementing datagrapper