Refactoring controls to include shared behaviour