abstract & adapter