Further split the functionality into separate classes and added the #partial method
5.1.0