This is based on Refactoring book by Martin Fowler