fix abstracting implementation