Progess so far (UNTESTED)