need better factories to get data and returns data