Now we support pluggable learning functions