added put builder, moved some code into base class, unit tests