use a better design