major refectoring of things, making clear seperation of client code and system code, hide low layer handler code from user. enable client configuration injection