move impl specific logic into new class