Rewrote the interface entirely