refactor to meta implementation