Some refactoring to deal with Insiel's case study.
Merge remote-tracking branch 'origin/acf' into alrd