re-design: remove meta programming