extracted builders into separate class files for better testing and added more unit tests