a little less metaprogramming