refactored abstract daos