basic metaprogramming functionality