redesign + fix tests