added an Abstract Factory for control creation