add RefPuppet, refactor public-private mani