impl separeted from spec