switch to struct initialiser; change latency to a time.Duration; add device relative support