hopefully better design