Started abstracting the code generation more.