added bridge pattern