Removed unused code
Change Exception throws clause
Added comments, reorganize imports and reformat code
Additional tests
Added hashCode() and equals() to domain classes