first pass at proton implementation