refactor parent, add implements