todo: use another approach