Currently, exceptions are thrown and caught all over the place.
Consolidate the usage of exceptions. If applicable, prefer to fail-fast (wrapping thrown exception in unchecked exceptions (IllegalStateE, IllegalArgumentE, ...)
Try to separate all IO from the domain classes. (F.e. IO should not be done in constructors, ...)
Currently, exceptions are thrown and caught all over the place.