factoring out propose/accept