Get rid of some metaprogramming in favor of composition