updates with tests etc