Dry initialisation [WIP]

* can we use `case` statement instead of `if`?
* it'd be cleaner if extracting these logic into a private method