metaprogramming for fun...