How to build a common controls framework