migrant from google code
head 28