simplify the design a lot