Reduce code duplication.
Refactor from to inheritance based to keep in line with rest of lib.
Update CHANGELOG
Update build