rewritten from scratch; add Berkeley specific header