second part of metaprogramming