some metaprogramming.