First draft.
Split the implementation/common things in a different way.
Use Fiveam for testing.