Added non-functional metaprogramming.