close to finished, need more testing