Tried to incorporate domain driven design.