Separate the reusable data processors from the data layers

This PR will resolve #148 and take over #196.