Rewrite codebase to use reflection and proxies for version-independance