add builder; privatize methods