extend abstract class BIF instead of interface Function
avoid infiniti loop in clean process
Merge remote-tracking branch 'origin/4.1' into 4.1