Use abstract models where possible

| Q                   | A
| ------------------- | ---
| Bug fix?            | N
| New feature?        | N
| BC breaks?          | ?
| Tests pass?         | ?
| Scenarios pass?     | ?
| Checkstyle issues?  | N
| Changelog updated?  | N
| Fixed tickets       | ~
| Doc PR              | ~