first pass at completion; tests next