before adapter abstraction