new() seems complete (but is untested)