Mixing v3, v4 into this v2 .... a MAJOR refactoring is needed
Merged