Refactoring Base

This PR is intended to be kept as long as the refactoring is running.  
All refactoring PR are going to be based onto this branch.

Feel free to cherry pick!

![](http://i.imgur.com/rkOis.gif)