some improvements to ICP