clean implementation