* reorganising feature generation internals to make them more generic