Created generative interfaces, updated Models accordingly.

Please note that this change breaks compilation under g++ 4.8. g++ 4.9
and Clang 3.4 work fine.