difficult, but complete