manual data abstraction