added ICleaner interface and some optimization