Review interface and clean the code
Merge remote-tracking branch 'todown/master'