add data abstraction