use metaclass in client to make everything dynamic
simplify client