Explicit semantics
Refactor and re-introduce unit tests
Refactor