Refactor implementations to have a common parent for code reuse