separate look and feel from behavior