implement the carbon protocol