implemented data generation