modified for 64 bit compatibility